迅维网

查看: 1299|回复: 0
打印 上一主题 下一主题

好用的2004 LCD测试脚本,配合51单片机

[复制链接]
跳转到指定楼层
1#
发表于 2016-3-17 17:40:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式 来自: 山东 来自 山东

马上注册,获取阅读精华内容及下载权限

您需要 登录 才可以下载或查看,没有帐号?注册

x
  • ************************************************************************************************/
  • /***                                       LCD2004液晶显示                                    ***/
  • /***                                       2016-03-16  Mod By Xiaoyao                         ***/
  • /************************************************************************************************/
  • #include
  • #define uint unsigned int
  • #define uchar unsigned char
  • #define DATA P2                                                                             //定义LCM数据总线至P0
  • sbit RS=P3^0;                                                       //寄存器选择位(0指令1数据)
  • sbit RW=P3^1;                                                       //设置读写位(0写入1读取)
  • sbit E=P3^2;                                                        //使能为(0禁止1允许)
  • sbit BF=P3^3;
  • uchar line1[]="LCD TEST PROGRAM By ";                                //第一行显示字符
  • uchar line2[]="Everything is OK! XY";                                //第二行显示字符
  • uchar line3[]="aaaaaaaaaaaaaaaabcde";                                //第三行显示字符
  • uchar line4[]="bbbbbbbbbbbbbbbcdefg";                                //第四行显示字符
  • void Init_LCD(void);                                                 //声明液晶初始化设置函数
  • void write_cmd(uchar);                                               //声明写指令函数
  • void write_data(uchar);                                              //声明写数据函数
  • void check_BF(void);                                                 //声明检测忙信号函数
  • void delay_1ms(uint);                                                //声明延时函数
  • void set_xy(uchar x,uchar y);                                        //声明显示位置
  • void display(uchar x,uchar y,uchar *s);                                                 //声明显示函数
  • /*********************1ms延时函数****************************************************************/
  • void delay_1ms(uint x)
  • {
  •         uint i,j;
  •         for(i=1;i<x;i++)
  •         for(j=1;j<110;j++);
  • }
  • /*********************液晶初始化函数*************************************************************/
  • void Init_LCD(void)
  • {
  •         write_cmd(0x38);                                                         //设置8位格式,2行,5x7
  •         write_cmd(0x08);                                                         //Tune off screen
  •                                 write_cmd(0x01);                                                         //设定输入方式,增量不移位
  •         write_cmd(0x06);                                                         //整体显示,关光标,不闪烁
  •         write_cmd(0x0c);                                                         //清除屏幕显示
  • }
  • /**********************写指令函数******************************************************************/
  • void write_cmd(uchar com)
  • {
  •         check_BF();
  •         E=0;//写命令前三控制线的状态
  •                                 RS=0;
  •         RW=0;
  •         DATA=com;
  •         delay_1ms(2);
  •         E=1;
  •         delay_1ms(2);
  •         E=0;//写命令后三控制线的状态
  •         RS=1;
  •         RW=1;
  • }
  • /**********************写数据函数*******************************************************************/
  • void write_data(uchar chardata)
  • {
  •         check_BF();
  •         E=0;//写数据前三控制线的状态
  •                                 RS=1;
  •         RW=0;
  •         DATA=chardata;
  •         delay_1ms(2);
  •         E=1;
  •         delay_1ms(2);
  •         E=0;//写数据后三控制线的状态
  •         RS=0;
  •         RW=1;
  • }
  • /**********************检查忙碌函数******************************************************************/
  • void check_BF(void)
  • {
  •        P2=0xff;//赋P2口初始值
  •        E=0;//读状态前三控制线的状态
  •        RS=0;
  •        RW=1;
  •        E=1;//拉高,读状态
  •        while((P2&0x80)==0x80);//判断是否繁忙,等待空闲
  •        E=0;//读状态后三控制线的状态
  •        RS=1;
  •        RW=0;
  • }
  • /**********************定义显示位置*******************************************************************/
  • void set_xy(uchar x,uchar y)
  • {
  •         uchar add;
  •         if(x==0)
  •                 add=0x80+y;
  •         else
  •                 if(x==1)
  •                         add=0xc0+y;
  •         else
  •                 if(x==2)
  •                         add=0x94+y;
  •         else
  •                 if(x==3)
  •                         add=0xd4+y;
  •         write_cmd(add);
  • }
  • /**********************显示函数***********************************************************************/
  • void displayL(uchar x,uchar y,uchar *s)
  • {
  •         set_xy(x,y);
  •         while(*s)
  •         {
  •                 DATA=*s;
  •                 write_data(*s);
  •                 s++;
  •         }
  • }
  • /**********************主函数*************************************************************************/
  • void main()
  • {
  •         Init_LCD();
  •         while(1)
  •         {
  •                 displayL(0,0,line1);
  •                 displayL(1,0,line2);
  •                 displayL(2,0,line3);
  •                 displayL(3,0,line4);
  •         }
    }

复制代码

好用的2004 LCD测试脚本,配合51单片机






单片机

来源:网络转载
</x;i++)

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表
附近
店铺
微信扫码查看附近店铺
维修
报价
扫码查看手机版报价
信号元
件查询
点位图


芯片搜索

快速回复