📄 lcd1602-4bit.lst
字号:
C51 COMPILER V8.02 LCD1602_4BIT 01/05/2007 19:41:12 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE LCD1602_4BIT
OBJECT MODULE PLACED IN LCD1602-4BIT.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LCD1602-4BIT.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************
2 * *
3 * ME500单片机开发系统演示程序 - LCD1602 4位数据线控制方式 *
4 * *
5 * LCD1602显示 *
6 * *
7 * 邮箱: gguoqing@willar.com *
8 * 网站: http://www.willar.com *
9 * 作者: gguoqing *
10 * 时间: 2007/01/03 *
11 * *
12 *【版权】Copyright(C)伟纳电子 www.willar.com All Rights Reserved *
13 *【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! *
14 * *
15 ********************************************************************
16 * *
17 * 描述: *
18 * LCD1602可以分为8位和4位控制方式,8位控制方式是用D0-D7数据线 *
19 * 来传送控制命令及数据。4位控制方式是用D4-D7数据线来传送控制命令 *
20 * 及数据。使用4位数据线做控制时,需要分两次来传送,先送出高4位数 *
21 * 据,再送出低4位数据。可以节省单片机的4根端口线。 *
22 * *
23 *******************************************************************/
24
25 #include < reg51.h >
26 #include < intrins.h >
27
28 #define uchar unsigned char
29 #define uint unsigned int
30
31 sbit LCD_RS = P2^0;
32 sbit LCD_RW = P2^1;
33 sbit LCD_EN = P2^2;
34
35
36 uchar code cdis1[ ] = {" WELCOME TO "};
37 uchar code cdis2[ ] = {" WWW.WILLAR.COM "};
38
39 /**********************************************************
40
41 * 5us 延时子程序
42
43 **********************************************************/
44 void delayNOP()
45 {
46 1 _nop_();
47 1 _nop_();
48 1 _nop_();
49 1 _nop_();
50 1 _nop_();
51 1 }
52
53 /**********************************************************
54
55 * 延时子程序
C51 COMPILER V8.02 LCD1602_4BIT 01/05/2007 19:41:12 PAGE 2
56
57 **********************************************************/
58 void delay(uint ms)
59 {
60 1 uchar t;
61 1 while(ms--)
62 1 {
63 2 for(t = 0; t < 120; t++);
64 2 }
65 1 }
66
67 /**********************************************************
68
69 * 检查LCD忙状态
70 * lcd_busy为1时,忙,等待。
71 * lcd-busy为0时,闲,可写指令与数据
72
73 **********************************************************/
74 bit lcd_busy()
75 {
76 1 bit result;
77 1 LCD_RS = 0;
78 1 LCD_RW = 1;
79 1 LCD_EN = 1;
80 1 delayNOP();
81 1 result = (bit)(P0&0x80);
82 1 LCD_EN = 0;
83 1 return(result);
84 1 }
85
86 /*********************************************************
87
88 * 写指令或数据
89
90 * start=0, 写入命令; start=1, 写入数据
91
92 *********************************************************/
93 void lcd_write(bit start, uchar in_data)
94 {
95 1 uchar Hdata,Ldata;
96 1
97 1 while(lcd_busy());
98 1
99 1 Hdata=in_data&0xf0; //取高四位
100 1 Ldata=(in_data<<4)&0xf0; //取低四位
101 1
102 1 if(start==0)
103 1 LCD_RS = 0; //写入命令
104 1 else
105 1 LCD_RS = 1; //写入数据
106 1
107 1 LCD_RW = 0;
108 1 LCD_EN = 0;
109 1 delayNOP();
110 1
111 1 P0 = Hdata; //发送高四位
112 1 LCD_EN = 1;
113 1 delayNOP();
114 1 LCD_EN = 0;
115 1 delayNOP();
116 1
117 1 P0 = Ldata; //发送低四位
C51 COMPILER V8.02 LCD1602_4BIT 01/05/2007 19:41:12 PAGE 3
118 1 LCD_EN = 1;
119 1 delayNOP();
120 1 LCD_EN = 0;
121 1 delayNOP();
122 1 }
123
124 /*************************************************************
125
126 * LCD初始化设定
127
128 *************************************************************/
129 void lcd_init()
130 {
131 1 delay(15);
132 1 lcd_write(0,0x28); //16*2显示,5*7点阵,4位数据
133 1 delay(5);
134 1 lcd_write(0,0x28);
135 1 delay(5);
136 1 lcd_write(0,0x28);
137 1
138 1 delay(5);
139 1 lcd_write(0,0x0c); //显示开,关光标
140 1 delay(5);
141 1 lcd_write(0,0x06); //移动光标
142 1 delay(5);
143 1 lcd_write(0,0x01); //清除LCD的显示内容
144 1 delay(25); //延时
145 1 }
146
147 /**********************************************************
148
149 * 设定显示位置
150
151 **********************************************************/
152 void lcd_pos(uchar pos)
153 {
154 1 lcd_write(0,pos|0x80); //数据指针=80+地址变量
155 1 }
156
157 /**********************************************************
158
159 * 主函数
160
161 **********************************************************/
162 void main()
163 {
164 1 uchar m;
165 1
166 1 lcd_init(); //LCD1602初始化
167 1
168 1 lcd_pos(0x00); //设置显示位置为第一行
169 1 for(m=0;m<16;m++)
170 1 {
171 2 lcd_write(1,cdis1[m]);
172 2 delay(150);
173 2 }
174 1
175 1 lcd_pos(0x40); //设置显示位置为第二行
176 1 for(m=0;m<16;m++)
177 1 {
178 2 lcd_write(1,cdis2[m]);
179 2 delay(150);
C51 COMPILER V8.02 LCD1602_4BIT 01/05/2007 19:41:12 PAGE 4
180 2 }
181 1 while(1) ;
182 1 }
183
184 /*********************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 245 ----
CONSTANT SIZE = 34 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 1
IDATA SIZE = ---- ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -