📄 lcd1602driver.lst
字号:
C51 COMPILER V7.06 LCD1602DRIVER 01/25/2008 16:03:52 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE LCD1602DRIVER
OBJECT MODULE PLACED IN LCD1602DRIVER.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE LCD1602DRIVER.C BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include"LCD1602DRIVER.H"
2 #include"reg52.h"
3 #include"intrins.h"
4 #include"string.h"
5 #include"key.h"
6 //================================================================================
7 //函数名称:LCD1602_Write(uchar Comment,uchar Modle_Choose)写命令
8 //函数功能:向LCD1602写命令
9 //================================================================================
10 void LCD1602_Write(uchar Comment,bit Modle_Choose)
11 {
12 1
13 1 LCD_E = 0;
14 1 LCD_RS=Modle_Choose;
15 1 LCD_RW = 0;
16 1 _nop_();
17 1 Data_Port = Comment;
18 1 _nop_();
19 1 _nop_();
20 1 LCD_E = 1;
21 1 LCD_E = 0;
22 1 _nop_();
23 1 Test_Busy();
24 1 }
25 //================================================================================
26 //函数名称:LCD1602_Read(uchar Modle_Choose)读命令
27 //函数功能:读LCD1602端口数据
28 //================================================================================
29 uchar LCD1602_Read(uchar Modle_Choose)
30 {
31 1 uchar Data_Return;
32 1 if(Modle_Choose&0x01)
33 1 LCD_RS=1;
34 1 else
35 1 LCD_RS=0;
36 1 LCD_RW = 1;
37 1 LCD_E = 0;
38 1 _nop_();
39 1 LCD_E = 1;
40 1 _nop_();
41 1 _nop_();
42 1 Data_Return = Data_Port ;
43 1 _nop_();
44 1 LCD_E=0;
45 1 LCD_RW = 0;
46 1 Test_Busy();
47 1 return Data_Return;
48 1 }
49 //================================================================================
50 //函数名称:LCD1602_Init()
51 //函数功能:LCD1602初始化
52 //================================================================================
53 void LCD1602_Init()
54 {
55 1 LCD_E=0;
C51 COMPILER V7.06 LCD1602DRIVER 01/25/2008 16:03:52 PAGE 2
56 1 LCD1602_Write(Modle_Choode,Comment_Modle);
57 1 LCD1602_Write(Modle_Choode,Comment_Modle);
58 1 LCD1602_Write(Clear_Screen,Comment_Modle);
59 1 LCD1602_Write(Open_Disput,Comment_Modle);
60 1 LCD1602_Write(Auto_Move,Comment_Modle);
61 1
62 1 }
63 //================================================================================
64 //函数名称:void LCD1602_ClearScreen();
65 //函数功能:清屏
66 //===============================================================================
67 void LCD1602_ClearScreen()
68 {
69 1 Test_Busy();
70 1 LCD1602_Write(Clear_Screen,Comment_Modle);
71 1 }
72 //================================================================================
73 //函数名称:Test_Busy()
74 //函数功能:检查LCD总线忙
75 //================================================================================
76 void Test_Busy()
77 {
78 1 uchar Flage;
79 1 LCD_RS=0;
80 1 LCD_RW = 1;
81 1 LCD_E = 1;
82 1 _nop_();
83 1 _nop_();
84 1 Flage=Data_Port;
85 1 while(Flage&0x80)
86 1 {
87 2 Flage=Data_Port;
88 2 _nop_();
89 2 }
90 1 LCD_E = 0;
91 1
92 1 }
93 //================================================================================
94 //函数名称:Delay(uchar Delay_Time)
95 //函数功能:检查LCD总线忙
96 //===============================================================================
97 void Delay(uchar Delay_Time)
98 {
99 1 uchar i;
100 1 for(;Delay_Time>0;Delay_Time--)
101 1 for(i=0;i<50;i++);
102 1 }
103 //================================================================================
104 //函数名称:uchar Translater(uchar Tr_Data);
105 //函数功能:转换成ASCLL码
106 //===============================================================================
107 uchar Translater(uchar Tr_Data)
108 {
109 1 uchar TD;
110 1 TD = Tr_Data+0x30;
111 1 return TD;
112 1
113 1 }
114 //================================================================================
115 //函数名称:void Disput_AChar(uchar addr,uchar Display);
116 //函数功能:向指定地址显示一个字符
117 //===============================================================================
C51 COMPILER V7.06 LCD1602DRIVER 01/25/2008 16:03:52 PAGE 3
118 void Disput_ANum(uchar addr,uchar Display)
119 {
120 1 uchar ASCALL_Data;
121 1 ASCALL_Data=Translater(Display);
122 1 Test_Busy();
123 1 LCD1602_Write(addr,Comment_Modle);
124 1 Test_Busy();
125 1 LCD1602_Write(ASCALL_Data,Data_Modle);
126 1
127 1 }
128 //================================================================================
129 //函数名称:void Disput_AChar(uchar addr,uchar *Display);
130 //函数功能:向指定地址显示一行字符
131 //===============================================================================
132 void Disput_ALineChar(uchar addr,uchar *Display)
133 {
134 1 uchar Str_Length,address;
135 1 address=addr;
136 1 Str_Length=strlen(Display);
137 1 for(;Str_Length>0;Str_Length--)
138 1 {
139 2
140 2 LCD1602_Write(address,Comment_Modle);
141 2 LCD1602_Write(*(Display++),Data_Modle);
142 2 if(address==0x8f)
143 2 address=0xc0;
144 2 else if(address==0xcf)
145 2 address=0x80;
146 2 else address++;
147 2 }
148 1
149 1 }
150 //================================================================================
151 //函数名称:void Disput_CharNum(uchar addr,uchar Display);
152 //函数功能:向指定地址显示一行字符
153 //===============================================================================
154 void Disput_CharNum(uchar addr,uchar Display)
155 {
156 1 uchar Disput_Data[4]={0x20,0x20,0x20,0};
157 1 uchar Temp;
158 1 uchar i=0;
159 1 Temp=Display;
160 1 while(Temp/10)
161 1 {
162 2
163 2 Temp/=10;
164 2 i++;
165 2 }
166 1 while(i)
167 1 {
168 2 Disput_Data[i]=Display%10+0x30;
169 2 Display/=10;
170 2 i--;
171 2 }
172 1 Disput_Data[i]=Display%10+0x30;
173 1 Disput_ALineChar(addr,Disput_Data);
174 1
175 1 }
176 //================================================================================
177 //函数名称:void Disput_IntNum(uchar addr,uchar Display);
178 //函数功能:向指定地址显示一行字符
179 //===============================================================================
C51 COMPILER V7.06 LCD1602DRIVER 01/25/2008 16:03:52 PAGE 4
180 void Disput_IntNum(uchar addr,uint Display_Int)
181 {
182 1 uchar Disput_Data[7]={0x20,0x20,0x20,0x20,0x20,0x20,0};
183 1 uint Temp;
184 1 uchar i=0;
185 1 Temp=Display_Int;
186 1 while(Temp/10)
187 1 {
188 2
189 2 Temp/=10;
190 2 i++;
191 2 }
192 1 while(i)
193 1 {
194 2 Disput_Data[i]=Display_Int%10+0x30;
195 2 Display_Int/=10;
196 2 i--;
197 2 }
198 1 Disput_Data[i]=Display_Int%10+0x30;
199 1 Disput_ALineChar(addr,Disput_Data);
200 1
201 1
202 1 }
203 //================================================================================
204 //函数名称:void Disput_LongNum(uchar addr,uchar Display);
205 //函数功能:向指定地址显示一行字符
206 //===============================================================================
207 void Disput_LongNum(uchar addr,ulong Display_Long)
208 {
209 1 uchar Disput_Data[13]={0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0};
210 1 ulong Temp;
211 1 uchar i=0;
212 1 Temp=Display_Long;
213 1 while(Temp/10)
214 1 {
215 2 Temp/=10;
216 2 i++;
217 2 }
218 1 while(i)
219 1 {
220 2 Disput_Data[i]=Display_Long%10+0x30;
221 2 Display_Long/=10;
222 2 i--;
223 2 }
224 1 Disput_Data[i]=Display_Long%10+0x30;
225 1 Disput_ALineChar(addr,Disput_Data);
226 1
227 1
228 1 }
229 void main()
230 {
231 1 uchar Key_Value=0;
232 1 LCD1602_Init();
233 1 Disput_ALineChar(0x80,"Key_Value:");
234 1 //Disput_CharNum(0x80,123);
235 1 while(1)
236 1 {
237 2 Key_Value=KeyScan();
238 2 if(Key_Value!=16)
239 2 {
240 3 Disput_LongNum(0xc0,Key_Value);
241 3 while(Key_Value==KeyScan());
C51 COMPILER V7.06 LCD1602DRIVER 01/25/2008 16:03:52 PAGE 5
242 3 }
243 2 }
244 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 701 ----
CONSTANT SIZE = 35 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 47
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -