1602液晶显示模块C语言程序详解(8位) - 深圳led背光源生产厂家,lcd显示屏,lcm液晶显示模块|模组厂-z6尊龙官网
  1. z6尊龙官网

    1. 
        •  深圳市z6尊龙官网产品分类列表

          联系我们

          公司名称:深圳市z6尊龙官网光电有限公司
          厂址 :中国.广东省.深圳市宝安西乡臣田工业区

          营销专线
          吴先生 手机:13538278608
          胡先生 手机 :13823360976
          固定电话 :86-0755-28246146/
          28246906/28246536/28247229
          电话传真:86-0755-89715671
          投诉与售后咨询 黄小姐:13823217679
          胡先生:13928021976

          Email:bly@tuanm9.com

          公司网址 :https://www.tuanm9.com/

          1602液晶显示模块C语言程序详解(8位)

          1602液晶显示模块C语言程序详解(8位)

            液晶屏显示模块与数码管相比,它显得更为专业、漂亮。液晶显示屏以其微功耗、体积小 、显示内容丰富 、超薄轻巧 、使用方便等诸多优点 ,在通讯、仪器仪表 、电子设备、家用电器等低功耗应用系统中得到越来越广泛的应用 ,使这些电子设备的人机界面变得越来越直观形象,目前已广泛应用于电子表、计算器、IC卡电话机、液晶电视机、便携式电脑、掌上型电子玩具 、复印机、传真机等许多方面。1602字符型液晶模块(带背光),是目前工控系统中使用最为广泛的液晶屏之一 。1602采用标准的16脚接口 ,其引脚功能如下:

            第1脚 :VSS为电源地,接GND。

            第2脚:VDD接5V正电源。

            第3脚:VL为液晶显示器对比度调整端 ,接正电源时对比度最弱 ,接地电源时对比度最高,对比度过高时会产生“鬼影” ,使用时可以通过一个10K的电位器调整对比度。

            第4脚 :RS为寄存器选择 ,高电平时选择数据寄存器、低电平时选择指令寄存器。

            第5脚 :RW为读写信号线 ,高电平时进行读操作 ,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。

            第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令 。

            第7~14脚:D0~D7为8位双向数据线 。

            第15脚:BLA背光电源正极(+5V)输入引脚 。

            第16脚 :BLK背光电源负极,接GND。

            1602液晶模块内带标准字库 ,内部的字符发生存储器(CGROM)已经存储了192个5×7点阵字符,32个5×10点阵字符。另外还有字符生成RAM(CGRAM)512字节,供用户自定义字符 。如表1所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号 、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来 ,我们就能看到字母“A”。

            液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符 。

            C51程序如下:

            [注:AT89S51使用12M晶振]

            [cpp] view plain copy print?

            /*==========================================================*/

            #include

            #define LCM_Data P1

            #define Busy 0×80 //用于检测LCM状态字中的Busy标识

            sbit LCM_RW P2^0; //定义引脚

            sbit LCM_RS P2^1;

            sbit LCM_E P2^2;

            void WriteDataLCM(unsigned char WDLCM);

            void WriteCommandLCM(unsigned char WCLCM,BuysC);

            unsigned char ReadDataLCM(void);

            unsigned char ReadStatusLCM(void);

            void LCMInit(void);

            void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);

            void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);

            void Delay5Ms(void);

            void Delay400Ms(void);

            unsigned char code csdn[] = {“csdn”};

            unsigned char code net[] = {www.csdn.net};

            void main(void)

            {

            LCMInit(); //LCM初始化

            Delay5Ms(); //延时片刻(可不要)

            DisplayListChar(0, 5, csdn);

            DisplayListChar(1, 0, net);

            ReadDataLCM();//测试用句无意义

            while(1);

            }

            //写数据

            void WriteDataLCM(unsigned char WDLCM)

            {

            ReadStatusLCM(); //检测忙

            LCM_Data = WDLCM;

            LCM_RS = 1;

            LCM_RW = 0;

            LCM_E = 0; //若晶振速度太高可以在这后加小的延时

            LCM_E = 0; //延时

            LCM_E = 1;

            }

            //写指令

            void WriteCommandLCM(unsigned char WCLCM,BuysC) //BuysC为0时忽略忙检测

            {

            if (BuysC) ReadStatusLCM(); //根据需要检测忙

            LCM_Data = WCLCM;

            LCM_RS = 0;

            LCM_RW = 0;

            LCM_E = 0;

            LCM_E = 0;

            LCM_E = 1;

            }

            //读数据

            unsigned char ReadDataLCM(void)

            {

            LCM_RS = 1;

            LCM_RW = 1;

            LCM_E = 0;

            LCM_E = 0;

            LCM_E = 1;

            return(LCM_Data);

            }

            //读状态

            unsigned char ReadStatusLCM(void)

            {

            LCM_Data = 0xFF;

            LCM_RS = 0;

            LCM_RW = 1;

            LCM_E = 0;

            LCM_E = 0;

            LCM_E = 1;

            while (LCM_Data & Busy); //检测忙信号

            return(LCM_Data);

            }

            void LCMInit(void) //LCM初始化

            {

            LCM_Data = 0;

            WriteCommandLCM(0×38,0); //三次显示模式设置 ,不检测忙信号

            Delay5Ms();

            WriteCommandLCM(0×38,0);

            Delay5Ms();

            WriteCommandLCM(0×38,0);

            Delay5Ms();

            WriteCommandLCM(0×38,1); //显示模式设置,开始要求每次检测忙信号

            WriteCommandLCM(0×08,1); //关闭显示

            WriteCommandLCM(0×01,1); //显示清屏

            WriteCommandLCM(0×06,1); // 显示光标移动设置

            WriteCommandLCM(0x0C,1); // 显示开及光标设置

            }

            //按指定位置显示一个字符

            void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)

            {

            Y &= 0×1;

            X &= 0xF; //限制X不能大于15,Y不能大于1

            if (Y) X |= 0×40; //当要显示第二行时地址码 0×40;

            X |= 0×80; // 算出指令码

            WriteCommandLCM(X, 0); //这里不检测忙信号,发送地址码

            WriteDataLCM(DData);

            }

            //按指定位置显示一串字符

            void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)

            {

            unsigned char ListLength;

            ListLength = 0;

            Y &= 0×1;

            X &= 0xF; //限制X不能大于15 ,Y不能大于1

            while (DData[ListLength]>0×20) //若到达字串尾则退出

            {

            if (X <= 0xF) //X坐标应小于0xF

            {

            DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符

            ListLength++;

            X++;

            }

            }

            }

            //5ms延时

            void Delay5Ms(void)

            {

            unsigned int TempCyc = 5552;

            while(TempCyc–);

            }

            免责声明 :本文转载于互联网 ,仅代表作者观点,如对稿件内容/版权等有疑议,请及时联系我们删除 。

          
          首 页 | 公司简介 | 企业荣誉 | 产品中心 | 新闻中心 | 联系我们 | 集团首页

          版权所有 深圳市z6尊龙官网光电有限公司     粤ICP备08129267号-1
          1. XML地图