历史上的今天

今天是:2024年10月21日(星期一)

正在发生

2019年10月21日 | 用51单片机控制LCD12864显示屏源程序

发布者:eaff86 来源: 51hei关键字:51单片机控制  LCD12864  显示屏 手机看文章 扫描二维码
随时随地手机看文章

12864液晶在出厂时其对比度已经调好,所以用户在使用的时候第三管脚可不用接任何东西,本实验板上为了兼容多家12864液晶所以加了液晶对比度调节电位器,若用户使用我们配套的12864液晶可不用管它,液晶的第三管脚悬空就可以。有些液晶功耗比较大,用户在使用的时候可将液晶的第19、20引脚的背光不接,这样字体会很清楚。

 

单片机源程序如下:

/**********************BST-V51实验开发板例程************************

*  平台:BST-V51 + Keil U3 + STC89C52

*  名称: 

*  晶振:11.0592MHZ

*  说明:免费开源,不提供源代码分析.

******************************************************************/

/*******************************************************************/

/*                                                                 */

/* 单片机开发系统演示程序 - 128*64LCD显示显示  */

/*                                                                 */

//;*  LCD型号:TS12864A-3(带汉字库)或兼容型号    控制器ST7920      */

//;*  MCU:AT89S52 ,晶体频率:11.0592MHz                              */

/*                                                                 */

/*******************************************************************/


#include

#include

        

#define uchar unsigned char

#define uint  unsigned int

/*12864端口定义*/

#define LCD_data  P0             //数据口

sbit LCD_RS  =  P2^6;            //寄存器选择输入 

sbit LCD_RW  =  P2^5;            //液晶读/写控制

sbit LCD_EN  =  P2^7;            //液晶使能控制

sbit LCD_PSB =  P1^2;            //串/并方式控制

sbit wela    =  P2^6;

sbit dula    =  P2^7;


uchar code dis1[] = {"看什么看!"};

uchar code dis2[] = {"显示屏而已!"};

uchar code dis3[] = {"少见多怪!"};

uchar code dis4[] = {"那凉哪呆着!"};                  


#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};

uchar IRDIS[2];

uchar IRCOM[4];

void delay0(uchar x);  //x*0.14MS

void beep();

void  dataconv();

void lcd_pos(uchar X,uchar Y);  //确定显示位置

/*******************************************************************/

/*                                                                 */

/*  延时函数                                                       */

/*                                                                 */

/*******************************************************************/

void delay(int ms)

{

    while(ms--)

        {

      uchar i;

          for(i=0;i<250;i++)  

           {

            _nop_();                           

                _nop_();

                _nop_();

                _nop_();

           }

        }

}                

/*******************************************************************/

/*                                                                 */

/*检查LCD忙状态                                                    */

/*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。      */

/*                                                                 */

/*******************************************************************/

bit lcd_busy()

{                          

    bit result;

    LCD_RS = 0;

    LCD_RW = 1;

    LCD_EN = 1;

    delayNOP();

    result = (bit)(P0&0x80);

    LCD_EN = 0;

    return(result); 

}

/*******************************************************************/

/*                                                                 */

/*写指令数据到LCD                                                  */

/*RS=L,RW=L,E=高脉冲,D0-D7=指令码。                             */

/*                                                                 */

/*******************************************************************/

void lcd_wcmd(uchar cmd)

{                          

   while(lcd_busy());

    LCD_RS = 0;

    LCD_RW = 0;

    LCD_EN = 0;

    _nop_();

    _nop_(); 

    P0 = cmd;

    delayNOP();

    LCD_EN = 1;

    delayNOP();

    LCD_EN = 0;  

}

/*******************************************************************/

/*                                                                 */

/*写显示数据到LCD                                                  */

/*RS=H,RW=L,E=高脉冲,D0-D7=数据。                               */

/*                                                                 */

/*******************************************************************/

void lcd_wdat(uchar dat)

{                          

   while(lcd_busy());

    LCD_RS = 1;

    LCD_RW = 0;

    LCD_EN = 0;

    P0 = dat;

    delayNOP();

    LCD_EN = 1;

    delayNOP();

    LCD_EN = 0; 

}

/*******************************************************************/

/*                                                                 */

/*  LCD初始化设定                                                  */

/*                                                                 */

/*******************************************************************/

void lcd_init()


    LCD_PSB = 1;         //并口方式

    

    lcd_wcmd(0x34);      //扩充指令操作

    delay(5);

    lcd_wcmd(0x30);      //基本指令操作

    delay(5);

    lcd_wcmd(0x0C);      //显示开,关光标

    delay(5);

    lcd_wcmd(0x01);      //清除LCD的显示内容

    delay(5);

}

/*********************************************************/

/*                                                                                                                 */

/* 主程序                                                                                    */

/*                                                       */

[1] [2]
关键字:51单片机控制  LCD12864  显示屏 引用地址:用51单片机控制LCD12864显示屏源程序

上一篇:单片机太阳能自动追光系统程序+电路+仿真
下一篇:单片机加个PCF8574模块,实现IIC方式驱动LCD1602

推荐阅读

三大模块:电源、IO口、时钟。一、 首先,我们来看一下电源,下面是电源框图从上面我们可以看出,电源给内部的三大关键部分供电,一是给ADC供电,这块无需多说,二是电池备份域,VBAT引脚可以连接到一个可选的待机电压由电池供电或由另一个来源,当V DD是断开时保留的备份寄存器的内容和供给的RTC。还一部分主要用来给数字逻辑部分供电,像...
刚开始摸索430F55系列,我也是菜鸟一名,折腾了两天它的时钟系统,总算自认为有点眉目。想到入门不易,趁热把我的一些体会分享一下。菜鸟才疏学浅,如有不妥之处,请务必指出。DCO5系列中比149多了个FLL——锁频环,初学者对着他确实有点头疼。另外,还有一个名为DCOCLKDIV的时钟源,它只是由DCOCLK分频而得,但请谨记: ·PUC后MCLK和SMCLK的...
知名手机评测机构DXOMARK在昨天更新了第4版相机测评标准,为此DXOMARK也谈到了该标准的具体情况。DXOMARK称最新的相机测试基准第4版有两项重大更新:首先,添加了摄像头预览图像质量测试,因为预览可以给消费者图像质量的第一印象,对图像结果也有很大的影响;其次是所谓的“可信度”评鉴。可信度评鉴的设计宗旨在于使DXOMARK的摄像头测试基准更加详尽、更...
STVD编译stm8s工程报如下错误:Running Linkerclnk -l"C:Program Files (x86)COSMICCXSTM8Lib" -o Debugstm8s_sx1276.sm8 -mDebugstm8s_sx1276.map Debugstm8s_sx1276.lkf#error clnk Debugstm8s_sx1276.lkf:1 segment .ubsct size overflow (313) The command: "clnk -l"C:Program Files (x86)COSMICCXSTM8Lib" -o Debugstm8s_sx...

史海拾趣

问答坊 | AI 解惑

女工程师在各大名企求职80天的经历(三)

周一早上,我赶早乘火车去了广州,可是紧赶慢赶12点到了新盛通,正好午休,职员们开始张罗叫外买了,前台小姐边吃盒饭边招呼我去会议室等,我就去了,正寻思着自己也没吃饭,上次面试我的人就过来问我有没有吃饭,让我先去下面吃饭,1点半再过来, ...…

查看全部问答∨

SoSO说坛子里用热转印的不多, 发一个昨天晚上刚刚完成的热转印小板分享一下

起因:工作上需要,做一个加速度传感器的实验 投PCB厂家做板 周期最快得1周(加急),平时1-2周            耽误开发周期,而且还花不少开模费。无奈热转印  挑战下QFN封装的极限! 时间:0604 ...…

查看全部问答∨

传感器专题 (刚才的没传上)

本帖最后由 paulhyde 于 2014-9-15 09:21 编辑 大家一起努力吧  …

查看全部问答∨

C语言高效编程的几招

C语言高效编程的几招…

查看全部问答∨

EVC 下开发客户与pc上开发服务端通信

我想通过无线网络,在pda上开发一个客户端,与pc服务器的服务器通信,通信采用socket通信,但由于客户端与服务端不是一个平台开发的,能不能进行通信?请高手们提提意见.客户端用evc,服务端用vc++6.0…

查看全部问答∨

请教各位:proteus制作元件时,如何编辑元件

本人制作元件,对于元件引脚的电气类型不知如何选择,总是导致制作失败。 请教各位,引脚的这几个电气类型分别代表什么意思?如何选择?谢谢!!! …

查看全部问答∨

关于内核态驱动的问题

CE6.0下提到说内核态的驱动程序不能直接显示用户接口,必须在系统中添加UI PROXY组件,并且调用CeCallUserPro()函数来安装用户接口,我不明白的是在注册表里面已经添加了相应的键值,还需要这样做吗,这样做到底有什么目的?还望各位高手指点迷津 ...…

查看全部问答∨

伟福仿真器 VW.EXE 支持 V8,V9 有那么难吗?

别家的仿真器都已经支持 Keil C  V8~9 了,为什么伟福的仿真器还停留在V4~5 从 WAVE6000 玩到 V8,都已经快 10 个年头了,伟福还是没有任何改善? …

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved