你们好,最近小未来发现有诸多的小伙伴们对于lcd1602背光亮度控制,lcd1602这个问题都颇为感兴趣的,今天小活为大家梳理了下,一起往下看看吧。
1、 新建工程
2、 新代码文件
3、 将代码复制到文件
4、 代码:
5、 /***************************************************************************
6、 标题:液晶显示器1602
7、 作者:百度ID米强滋润。
8、 描述:这个程序在LCD1602上显示两行字符。
9、 ******************************************************************************/
10、 //头文件:
11、 #include reg52.h
12、 /* * * * * * * * IO引脚定义* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
13、 sbit lcd_rs=p1^0;//定义管脚
14、 sbit LCD_RW=P1^1;
15、 sbit LCD_E=P1^2;
16、 /* * * * * * * *宏定义* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。
17、 #define LCD_Data P0
18、 #define Busy0x80 //用于检测LCD状态字中的Busy标志。
19、 /* * * * * * * *数据定义* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
20、 unsigned char code uctech[]={'LCD1602 DJZRS'};
21、 unsigned char code net[]={'51hahahahahaha51'};
22、 /* * * * * * * *函数语句* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
23、 Void WriteDataLCD (unsigned character WDLCD); //Write data
24、 void write command CD(unsigned char WCLCD,BuysC);//写命令
25、 无符号字符read data LCD(void);//读取数据
26、 无符号char ReadStatusLCD(void);//阅读状态
27、 void LCDInit(void);//初始化
28、 Void DisplayOneChar (unsigned char X, unsigned char Y, unsigned char data); //The corresponding coordinates display byte contents.
29、 Void DisplayListChar (unsigned char X, unsigned char Y, unsigned char code * ddata); //The corresponding coordinates start to display a string of contents.
30、 无效延迟5 ms(无效);//延时
31、 Void Delay400Ms (invalid); //Delay
32、 * * * * * * * * * *主功能启动* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。
33、 void main(void)
34、 {
35、 delay 400 ms();//开始等待,等待LCD工作。
36、 LCDInit();//初始化
37、 delay 5 ms();//延迟片刻(不要)
38、 DisplayListChar(0, 0, uctech);
39、 DisplayListChar(0, 5, net);
40、 read data LCD();//测试句子没有意义
41、 while(1);
42、 }
43、 * * * * * * * * * *写数据* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。
44、 void WriteDataLCD(unsigned char WDLCD)
45、 {
46、 ReadStatusLCD();//检测忙
47、 LCD_Data=WDLCD;
48、 LCD_RS=1;
49、 LCD_RW=0;
50、 LCD_E=0; //若晶振速度太高可以在这后加小的延时
51、 LCD_E=0; //延时
52、 LCD_E=1;
53、 }
54、 /***********写指令********************************************************/
55、 void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC为0时忽略忙检测
56、 {
57、 if (BuysC) ReadStatusLCD(); //根据需要检测忙
58、 LCD_Data=WCLCD;
59、 LCD_RS=0;
60、 LCD_RW=0;
61、 LCD_E=0;
62、 LCD_E=0;
63、 LCD_E=1;
64、 }
65、 /***********读数据********************************************************/
66、 unsigned char ReadDataLCD(void)
67、 {
68、 LCD_RS=1;
69、 LCD_RW=1;
70、 LCD_E=0;
71、 LCD_E=0;
72、 LCD_E=1;
73、 return(LCD_Data);
74、 }
75、 /***********读状态*******************************************************/
76、 unsigned char ReadStatusLCD(void)
77、 {
78、 LCD_Data=0xFF;
79、 LCD_RS=0;
80、 LCD_RW=1;
81、 LCD_E=0;
82、 LCD_E=0;
83、 LCD_E=1;
84、 while (LCD_Data Busy); //检测忙信号
85、 return(LCD_Data);
86、 }
87、 /***********初始化********************************************************/
88、 void LCDInit(void)
89、 {
90、 LCD_Data=0;
91、 WriteCommandLCD(0x38,0); //三次模式设置,不检测忙信号
92、 Delay5Ms();
93、 WriteCommandLCD(0x38,0);
94、 Delay5Ms();
95、 WriteCommandLCD(0x38,0);
96、 Delay5Ms();
97、 WriteCommandLCD(0x38,1); //显示模式设置,开始要求每次检测忙信号
98、 WriteCommandLCD(0x08,1); //关闭显示
99、 WriteCommandLCD(0x01,1); //显示清屏
100、 WriteCommandLCD(0x06,1); //显示光标移动设置
101、 WriteCommandLCD(0x0C,1); //显示开及光标设置
102、 }
103、 /***********按指定位置显示一个字符*******************************************/
104、 void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
105、 {
106、 Y=0x1;
107、 X=0xF; //限制X不能大于15,Y不能大于1
108、 if (Y) X |=0x40; //当要显示第二行时地址码+0x40;
109、 X |=0x80; //算出指令码
110、 WriteCommandLCD(X, 0); //这里不检测忙信号,发送地址码
111、 WriteDataLCD(DData);
112、 }
113、 /***********按指定位置显示一串字符*****************************************/
114、 void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
115、 {
116、 unsigned char ListLength;
117、 ListLength=0;
118、 Y=0x1;
119、 X=0xF; //限制X不能大于15,Y不能大于1
120、 while (DData[ListLength]=0x20){ //若到达字串尾则退出
121、 if (X=0xF){ //X坐标应小于0xF
122、 DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符
123、 ListLength++;
124、 X++;
125、 }
126、 }
127、 }
128、 /***********短延时********************************************************/
129、 void Delay5Ms(void)
130、 {
131、 unsigned int TempCyc=5552;
132、 while(TempCyc--);
133、 }
134、 /***********长延时********************************************************/
135、 void Delay400Ms(void)
136、 {
137、 unsigned char TempCycA=5;
138、 unsigned int TempCycB;
139、 while(TempCycA--){
140、 TempCycB=7269;
141、 while(TempCycB--);
142、 }
143、 }
144、 把文件添加到组
145、 编译
146、 代码简介。具体请看看代码注释
147、 如果你改了代码,就要重新编译
148、 连线,下载
149、 效果
以上就是lcd1602这篇文章的一些介绍,希望对大家有所帮助。