📄 lcd1602.lst
字号:
C51 COMPILER V8.09 LCD1602 04/18/2008 09:37:55 PAGE 1
C51 COMPILER V8.09, COMPILATION OF MODULE LCD1602
OBJECT MODULE PLACED IN LCD1602.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LCD1602.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /* *****************************************************************/
2 /* 电子技术实验室论坛单片机开发板演示程序 */
3 /* 1602滚动显示 */
4 /* 1602液晶显示 */
5 /* 晶体:11.0592M */
6 /* MCU:STC89S51,52orAT89系列 */
7 /* 版本: V1.0 (2008/03/20) */
8 /* 技术交流论坛:http://mcudz.5d6d.com */
9 /*【声明】此程序仅用于学习参考,为学习板赠送资料,不得用做商业用途 */
10 /* */
11 /*******************************************************************/
12 #include <reg51.h>
13 #include <intrins.h>
14
15 typedef unsigned char BYTE;
16 typedef bit BOOL;
17
18 sbit LCD_RS = P0^7;
19 sbit LCD_RW = P0^6;
20 sbit LCD_EP = P0^5;
21
22 BYTE code dis1[] = {" WLCOME TO "};
23 BYTE code dis2[] = {" mcudz.5d6d.com"};
24 BYTE code dis3[] = {" OT EMOCLW "};
25 BYTE code dis4[] = {" moc.d6d5.www "};
26
27 delay(int ms)
28 { // 延时子程序
29 1 int i;
30 1 while(ms--)
31 1 {
32 2 for(i = 0; i< 250; i++)
33 2 {
34 3 _nop_();
35 3 _nop_();
36 3 _nop_();
37 3 _nop_();
38 3 }
39 2 }
40 1 }
41
42 BOOL lcd_bz()
43 { // 测试LCD忙碌状态
44 1 BOOL result;
45 1 LCD_RS = 0;
46 1 LCD_RW = 1;
47 1 LCD_EP = 1;
48 1 _nop_();
49 1 _nop_();
50 1 _nop_();
51 1 _nop_();
52 1 result = (BOOL)(P2 & 0x80);
53 1 LCD_EP = 0;
54 1 return result;
55 1 }
C51 COMPILER V8.09 LCD1602 04/18/2008 09:37:55 PAGE 2
56
57 lcd_wcmd(BYTE cmd)
58 { // 写入指令数据到LCD
59 1 while(lcd_bz());
60 1 LCD_RS = 0;
61 1 LCD_RW = 0;
62 1 LCD_EP = 0;
63 1 _nop_();
64 1 _nop_();
65 1 P2 = cmd;
66 1 _nop_();
67 1 _nop_();
68 1 _nop_();
69 1 _nop_();
70 1 LCD_EP = 1;
71 1 _nop_();
72 1 _nop_();
73 1 _nop_();
74 1 _nop_();
75 1 LCD_EP = 0;
76 1 }
77
78 lcd_pos(BYTE pos)
79 { //设定显示位置
80 1 lcd_wcmd(pos | 0x80);
81 1 }
82
83 lcd_wdat(BYTE dat)
84 { //写入字符显示数据到LCD
85 1 while(lcd_bz());
86 1 LCD_RS = 1;
87 1 LCD_RW = 0;
88 1 LCD_EP = 0;
89 1 P2 = dat;
90 1 _nop_();
91 1 _nop_();
92 1 _nop_();
93 1 _nop_();
94 1 LCD_EP = 1;
95 1 _nop_();
96 1 _nop_();
97 1 _nop_();
98 1 _nop_();
99 1 LCD_EP = 0;
100 1 }
101
102 lcd_init()
103 { //LCD初始化设定
104 1 lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据
105 1 delay(1);
106 1 lcd_wcmd(0x0c); //显示开,关光标
107 1 delay(1);
108 1 lcd_wcmd(0x06); //移动光标
109 1 delay(1);
110 1 lcd_wcmd(0x01); //清除LCD的显示内容
111 1 delay(1);
112 1 }
113
114 main()
115 {
116 1 BYTE i;
117 1 lcd_init(); // 初始化LCD
C51 COMPILER V8.09 LCD1602 04/18/2008 09:37:55 PAGE 3
118 1 delay(10);
119 1
120 1 while(1)
121 1 {
122 2 lcd_wcmd(0x06); //向右移动光标
123 2 lcd_pos(0); //设置显示位置为第一行的第1个字符
124 2 i = 0;
125 2 while(dis1[ i ] != '\0')
126 2 { //显示字符"Welcome TO"
127 3 lcd_wdat(dis1[ i ]);
128 3 i++;
129 3 delay(30); //控制两字之间显示速度
130 3 }
131 2 lcd_pos(0x40); //设置显示位置为第二行第1个字符
132 2 i = 0;
133 2 while(dis2[ i ] != '\0')
134 2 {
135 3 lcd_wdat(dis2[ i ]); //显示字符" WWW.WILLAR.COM "
136 3 i++;
137 3 delay(30); //控制两字之间显示速度
138 3 }
139 2 delay(800); //控制停留时间
140 2
141 2 lcd_wcmd(0x01); //清除LCD的显示内容
142 2 delay(1);
143 2 lcd_wcmd(0x04); //向左移动光标
144 2
145 2 lcd_pos(15); //设置显示位置为第一行的第16个字符
146 2 i = 0;
147 2 while(dis3[ i ] != '\0')
148 2 { //显示字符"Welcome TO"
149 3 lcd_wdat(dis3[ i ]);
150 3 i++;
151 3 delay(30); //控制两字之间显示速度
152 3 }
153 2 lcd_pos(0x4F); //设置显示位置为第二行的第16个字符
154 2 i = 0;
155 2 while(dis4[ i ] != '\0')
156 2 {
157 3 lcd_wdat(dis4[ i ]); //显示字符" WWW.WILLAR.COM "
158 3 i++;
159 3 delay(30); //控制两字之间显示速度
160 3 }
161 2 delay(800); //控制停留时间
162 2
163 2 lcd_wcmd(0x01); //清除LCD的显示内容
164 2 delay(200); //控制两屏转换时间
165 2
166 2 }
167 1 }
168
169
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 305 ----
CONSTANT SIZE = 66 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
C51 COMPILER V8.09 LCD1602 04/18/2008 09:37:55 PAGE 4
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -