?? 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單片機開發(fā)系統(tǒng)演示程序 - LCD1602 4位數(shù)據(jù)線控制方式 *
4 * *
5 * LCD1602顯示 *
6 * *
7 * 郵箱: gguoqing@willar.com *
8 * 網(wǎng)站: http://www.willar.com *
9 * 作者: gguoqing *
10 * 時間: 2007/01/03 *
11 * *
12 *【版權(quán)】Copyright(C)偉納電子 www.willar.com All Rights Reserved *
13 *【聲明】此程序僅用于學(xué)習(xí)與參考,引用請注明版權(quán)和作者信息! *
14 * *
15 ********************************************************************
16 * *
17 * 描述: *
18 * LCD1602可以分為8位和4位控制方式,8位控制方式是用D0-D7數(shù)據(jù)線 *
19 * 來傳送控制命令及數(shù)據(jù)。4位控制方式是用D4-D7數(shù)據(jù)線來傳送控制命令 *
20 * 及數(shù)據(jù)。使用4位數(shù)據(jù)線做控制時,需要分兩次來傳送,先送出高4位數(shù) *
21 * 據(jù),再送出低4位數(shù)據(jù)。可以節(jié)省單片機的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忙狀態(tài)
70 * lcd_busy為1時,忙,等待。
71 * lcd-busy為0時,閑,可寫指令與數(shù)據(jù)
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 * 寫指令或數(shù)據(jù)
89
90 * start=0, 寫入命令; start=1, 寫入數(shù)據(jù)
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; //寫入數(shù)據(jù)
106 1
107 1 LCD_RW = 0;
108 1 LCD_EN = 0;
109 1 delayNOP();
110 1
111 1 P0 = Hdata; //發(fā)送高四位
112 1 LCD_EN = 1;
113 1 delayNOP();
114 1 LCD_EN = 0;
115 1 delayNOP();
116 1
117 1 P0 = Ldata; //發(fā)送低四位
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初始化設(shè)定
127
128 *************************************************************/
129 void lcd_init()
130 {
131 1 delay(15);
132 1 lcd_write(0,0x28); //16*2顯示,5*7點陣,4位數(shù)據(jù)
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); //顯示開,關(guān)光標(biāo)
140 1 delay(5);
141 1 lcd_write(0,0x06); //移動光標(biāo)
142 1 delay(5);
143 1 lcd_write(0,0x01); //清除LCD的顯示內(nèi)容
144 1 delay(25); //延時
145 1 }
146
147 /**********************************************************
148
149 * 設(shè)定顯示位置
150
151 **********************************************************/
152 void lcd_pos(uchar pos)
153 {
154 1 lcd_write(0,pos|0x80); //數(shù)據(jù)指針=80+地址變量
155 1 }
156
157 /**********************************************************
158
159 * 主函數(shù)
160
161 **********************************************************/
162 void main()
163 {
164 1 uchar m;
165 1
166 1 lcd_init(); //LCD1602初始化
167 1
168 1 lcd_pos(0x00); //設(shè)置顯示位置為第一行
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); //設(shè)置顯示位置為第二行
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)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -