📄 lcdkey03.lst
字号:
C51 COMPILER V8.02 LCDKEY03 07/31/2007 09:25:36 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE LCDKEY03
OBJECT MODULE PLACED IN lcdkey03.OBJ
COMPILER INVOKED BY: D:\SOFTWARE\uv3\C51\BIN\C51.EXE lcdkey03.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg51.h>
2 #include<intrins.h>
3 #include<string.h>
4 #include<stdio.h>
5 #include<math.h>
6
7 #define uint unsigned int
8 #define uchar unsigned char
9 #define lcd_bus P1
10 #define key_bus P0
11
12
13 sbit rs=P3^0;
14 sbit rw=P3^1;
15 sbit e =P3^2;
16 sbit P2_4=P2^4;
17
18 sbit beep=P3^5;
19
20 sbit load=P2^0;
21 sbit sclk=P2^1;
22 sbit sdata=P2^2;
23 sbit DQ =P3^5; //定义通信端口
24
25 uchar code table[16]={15,0,14,13,7,8,9,12,4,5,6,11,1,2,3,10};
26 //年月度
27 uchar code hanzi[]={0x80,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02,
28 0xf,0x9,0xf,0x9,0xf,0x9,0x11,0,
29 0x1C,0x14,0x1C,0x0,0x0,0x0,0x00,0x00};
30
31 uchar code str1[]="I LIKE MCU";
32 uchar code str2[]="INPUT FREQENCY:";
33 uchar code str3[]="INPUT PHASE:";
34 uchar code str4[]="1:FREQENCY"; //频率
35 uchar code str5[]="2:PHASE"; //相位
36 uchar code str6[]="3:AMPLITUDE"; //幅度
37 //uchar code str7[]="4: HELP";
38 uchar code str8[]="4:TEMPERATURE"; //温度
39 uchar code str9[]="temperature is:";
40 uchar code str10[]="5:INPUT TL";
41 uchar code str11[]="6:INPUT TH";
42
43
44 uchar code he[]=" A:OK B:DEL D:UP";
45 uchar code am[]="INPUT AMPLITUDE:";
46 uchar code warn[]="WARNING!!VOLTAGE < 5V";
47 uchar state=0;
48
49 uchar fre[20];
50 uchar TL[3];
51 uchar TH[3];
52 uchar TLL;
53 uchar THH;
54 void lcd_wrcmd(uchar cmd);
55 void lcd_wrdata( uchar lcddata);
C51 COMPILER V8.02 LCDKEY03 07/31/2007 09:25:36 PAGE 2
56
57
58
59
60
61 delay(int d)
62 {
63 1 while(--d);
64 1 }
65
66 /*****************读按键***************/
67 uchar getkey()
68 {
69 1 uchar keycode=0xff,temp,i;
70 1 key_bus=0x0f;
71 1 temp=key_bus&0x0f;
72 1 if(temp!=0x0f) //有键按下
73 1 {
74 2 beep=0;
75 2 key_bus=0x7f;
76 2 for(i=0;i<4;i++)
77 2 {
78 3 temp=key_bus&0x0f;
79 3 if(temp==0x07)
80 3 {
81 4 keycode=i*4;
82 4 break;
83 4 }
84 3 else if(temp==0x0b)
85 3 {
86 4 keycode=i*4+1;
87 4 break;
88 4 }
89 3 else if(temp==0x0d)
90 3 {
91 4 keycode=i*4+2;
92 4 break;
93 4 }
94 3 else if(temp==0x0e)
95 3 {
96 4 keycode=i*4+3;
97 4 break;
98 4 }
99 3 key_bus=(key_bus>>1)|0x80;
100 3 }
101 2
102 2 while((key_bus&0x0f)!=0x0f) //等待释放
103 2 {
104 3 key_bus=0x0f;
105 3 }
106 2 beep=1;
107 2
108 2 }
109 1 return keycode;
110 1 }
111
112
113 reset(void)
114 {
115 1 unsigned char x=0;
116 1 DQ = 1; //DQ复位
117 1 delay(8); //稍做延时
C51 COMPILER V8.02 LCDKEY03 07/31/2007 09:25:36 PAGE 3
118 1 DQ = 0; //单片机将DQ拉低
119 1 delay(80); //精确延时 大于 480us
120 1 DQ = 1; //拉高总线
121 1 delay(14);
122 1 x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
123 1 delay(20);
124 1 }
125
126
127
128 //读一个字节
129 unsigned char read_byte(void)
130 {
131 1 unsigned char i=0;
132 1 unsigned char dat = 0;
133 1 for (i=8;i>0;i--)
134 1 {
135 2 DQ = 0; // 给脉冲信号
136 2 dat>>=1;
137 2 DQ = 1; // 给脉冲信号
138 2 if(DQ)
139 2 dat|=0x80; /*LSB to MSB*/
140 2 delay(4);
141 2 }
142 1 return(dat);
143 1 }
144
145
146
147 //写一个字节
148 write_byte(unsigned char dat)
149 {
150 1 unsigned char i=0;
151 1 for (i=8; i>0; i--)
152 1 {
153 2 DQ = 0;
154 2 DQ = dat&0x01;
155 2 delay(5);
156 2 DQ = 1;
157 2 dat>>=1;
158 2 }
159 1 }
160
161
162
163
164 //读取温度
165
166
167
168 //读取温度
169 unsigned char read_temperature(void)
170 {
171 1 unsigned char a=0;
172 1 unsigned char b=0;
173 1
174 1 reset();
175 1 write_byte(0xCC); // 跳过读序号列号的操作
176 1 write_byte(0x44); // 启动温度转换
177 1 reset();
178 1 write_byte(0xCC); //跳过读序号列号的操作
179 1 write_byte(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
C51 COMPILER V8.02 LCDKEY03 07/31/2007 09:25:36 PAGE 4
180 1 a=read_byte();
181 1 b=read_byte();
182 1 b=b<<4;
183 1 a=a>>4;
184 1
185 1 return(a|b);
186 1 }
187
188
189
190
191
192 unsigned char tempdisplay(void)
193 {
194 1 unsigned char iii,i,r=0,j;
195 1 unsigned char t,stra[3];
196 1 float tt=0;
197 1 lcd_wrcmd(0x0f);
198 1 lcd_wrcmd(0xc9);
199 1 lcd_wrdata(2);
200 1 lcd_wrdata(0x43);
201 1 lcd_wrcmd(0x81);
202 1 for(j=0;j<16;j++)lcd_wrdata(str9[j]);
203 1 while(1)
204 1
205 1 {
206 2 t=read_temperature();
207 2 if(t<TLL||t>THH)
208 2 P2_4=0;
209 2 else P2_4=1;
210 2 stra[0]=t/100+'0';
211 2 stra[1]=t%100/10+'0';
212 2 stra[2]=t%10+'0';
213 2 if(stra[0]=='0')
214 2 r=1;
215 2 lcd_wrcmd(0xc6+r);
216 2 for(i=r;i<3;i++)
217 2 lcd_wrdata(stra[i]);
218 2 lcd_wrcmd(0xcf);
219 2 iii=table[getkey()];
220 2
221 2 if(iii==13)
222 2 {
223 3 state=1;
224 3 lcd_wrcmd(0x0c);
225 3 lcd_wrcmd(1);
226 3 lcd_wrcmd(0x80);
227 3 break;
228 3 }
229 2
230 2
231 2 }
232 1 }
*** WARNING C173 IN LINE 232 OF LCDKEY03.C: missing return-expression
233
234
235
236
237
238
239 dac_tlc5620(uchar send_char)
240 {
C51 COMPILER V8.02 LCDKEY03 07/31/2007 09:25:36 PAGE 5
241 1 uchar i;
242 1 load=1;
243 1 sclk=1;sdata=0;sclk=0;
244 1 sclk=1;sdata=0;sclk=0;
245 1 sclk=1;sdata=1;sclk=0;
246 1
247 1 for(i=0;i<8;i++)
248 1 {
249 2 sclk=1;
250 2 if(send_char&0x80) sdata=1;
251 2 else sdata=0;
252 2 sclk=0;
253 2 send_char=send_char<<1;
254 2 }
255 1 load=0;
256 1 load=1;
257 1
258 1 }
259
260
261
262 /**********判断忙标志,返回的是一个位BF**********/
263 bit lcd_busy(void)
264 {
265 1 uchar bflag;
266 1 rs=0;
267 1 rw=1;
268 1 _nop_();
269 1 e=1;
270 1 _nop_();
271 1 lcd_bus=0xff;
272 1 bflag=lcd_bus;
273 1 e=0;
274 1 return(bit)(bflag&0x80); //BF=1 busy
275 1 }
276
277
278
279 /*********写命令,有两个参数,第一个是要写的命令控制字,
280 第二个是用来控制是否进行忙标志的判断。
281 busyflag=1:判断;为 0:不判断****************/
282 void lcd_wrcmd(uchar cmd)
283 {
284 1 while(lcd_busy());
285 1 lcd_bus=cmd;
286 1 rs=0;
287 1 rw=0;
288 1 _nop_();
289 1 e=1;
290 1 _nop_();
291 1 _nop_();
292 1 e=0;
293 1 }
294
295
296 /************向液晶片写数据***************/
297 void lcd_wrdata( uchar lcddata)
298 {
299 1 while(lcd_busy());
300 1 lcd_bus=lcddata;
301 1 rs=1;
302 1 rw=0;
C51 COMPILER V8.02 LCDKEY03 07/31/2007 09:25:36 PAGE 6
303 1 _nop_();
304 1 e=1;
305 1 _nop_();
306 1 _nop_();
307 1 e=0;
308 1 }
309
310 /****************初始化***************/
311 void lcd_ini(void)
312 {
313 1 lcd_wrcmd(0x38);
314 1 delay(100);
315 1 lcd_wrcmd(0x0c);
316 1 delay(100);
317 1 lcd_wrcmd(0x06);
318 1 delay(100);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -