📄 text1.lst
字号:
200
201 ***************/
202
203 void lcd1602_wrcmd(unsigned char lcdcmd)
204 {
205 1 while(lcd1602_busy()); //等待空闲
206 1 lcd1602_bus=lcdcmd;
207 1 rs_1602=0;
208 1 rw_1602=0;
209 1 _nop_();
210 1 e_1602=1;
211 1 _nop_();
212 1 _nop_();
213 1 e_1602=0; //产生一个下沿
214 1 }
215
216
217
218 /***************向液晶写数据******************/
219
220 void lcd1602_wrdata(unsigned char lcddata)
221 {
222 1 while(lcd1602_busy()); //等待空闲
223 1 lcd1602_bus=lcddata; //在下沿的时候写数据
224 1 rs_1602=1;
225 1 rw_1602=0;
226 1 _nop_();
227 1 e_1602=1;
228 1 _nop_();
229 1 _nop_();
230 1 e_1602=0;
231 1 //lcd_bus=0xff;
232 1 }
233
234
235 /************液晶的清屏************/
236
237 void lcd1602_clear(void)
238 {
239 1 lcd1602_wrcmd(0x01); //液晶清屏控制字 并延时>40us
240 1 delay_1602(100);
241 1 }
C51 COMPILER V7.20 TEXT1 07/19/2007 09:52:58 PAGE 5
242
243
244 /***********1602液晶的初始化***************/
245
246 void lcd1602_init(void)
247 {
248 1 lcd1602_wrcmd(0x38); //功能设置-----8位数据接口,两行显示,5*7点阵字符显示
249 1 delay_1602(100);
250 1 lcd1602_wrcmd(0x0c); //显示开关控制----显示开关开,光标开关关,闪烁开关关
251 1 delay_1602(100);
252 1 lcd1602_wrcmd(0x06); //输入方式设置,AC自增1, S=0;
253 1 delay_1602(100);
254 1 lcd1602_wrcmd(0x01); //清屏
255 1 delay_1602(100);
256 1 }
257
258 /************键盘扫描*************/
259 uchar keyscan(void)
260 {
261 1 uchar scancode,tmpcode;
262 1 P3 = 0xf0;
263 1 if ((P3&0xf0)!=0xf0)
264 1 {
265 2 delay_1602(125);
266 2 if ((P3&0xf0)!=0xf0)
267 2 {
268 3 scancode = 0xfe;
269 3 while((scancode&0x10)!=0)
270 3 {
271 4 P3 = scancode;
272 4 if ((P3&0xf0)!=0xf0)
273 4 {
274 5 tmpcode = (P3&0xf0)|0x0f;
275 5 return((~scancode)+(~tmpcode));
276 5 }
277 4 else scancode = (scancode<<1)|0x01;
278 4 }
279 3 }
280 2 }
281 1 return(0);
282 1 }
283
284 void fen(unsigned int hex,uchar a[4])
285 {
286 1 a[0]=table[hex/1000];
287 1 hex=hex%1000;
288 1 a[1]=table[hex/100];
289 1 hex=hex%100;
290 1 a[2]=table[hex/10];
291 1 hex=hex%10;
292 1 a[3]=table[hex];
293 1 }
294
295 void jia(n)
296 {
297 1 uchar i;
298 1 set[j]=table[n];
299 1 lcd1602_wrcmd(0x8a-j);
300 1 for(i=0;i<=j;i++)
301 1 lcd1602_wrdata(set[i]);
302 1 j++;
303 1 data5620=data5620*10+n;
C51 COMPILER V7.20 TEXT1 07/19/2007 09:52:58 PAGE 6
304 1 }
305
306
307
308 main()
309 {
310 1 uchar key,i;
311 1 unsigned char str0[]="setting: *10mA ";
312 1 unsigned char str1[]="measure: mA ";
313 1 uchar data549=0;
314 1 unsigned int cov549=0;
315 1 b=0;j=0;
316 1 data5620=0;
317 1 delay_1602(2);
318 1 lcd1602_bus=0xff;
319 1 lcd1602_init();
320 1 lcd1602_wrcmd(0x80);
321 1 for(i=0;i<16;i++)
322 1 lcd1602_wrdata(str0[i]);
323 1 while(1)
324 1 {
325 2 lcd1602_wrcmd(0x8a);
326 2 key=0;
327 2 while(key==0)
328 2 key=keyscan();
329 2 while(P3!=0xf0)
330 2 P3=0xf0;
331 2 if(key==0x18)
332 2 {
333 3 dac_5620(data5620,data5620,data5620,data5620);
334 3 b=1;j=0;
335 3 data549=adc_0838convert();
336 3 cov549=data549*19.6;
337 3 fen(cov549,mea);
338 3 lcd1602_wrcmd(0xc0);
339 3 for(i=0;i<14;i++)
340 3 lcd1602_wrdata(str1[i]);
341 3 lcd1602_wrcmd(0xc8);
342 3 for(i=0;i<4;i++)
343 3 lcd1602_wrdata(mea[i]);
344 3 }
345 2 else if(key==0x12)
346 2 {
347 3 if(j>0)
348 3 {
349 4 j--;
350 4 data5620=(data5620-(set[j]-0x30))/10;
351 4 lcd1602_wrcmd(0x8a-j);
352 4 lcd1602_wrdata(0);
353 4 for(i=0;i<j;i++)
354 4 lcd1602_wrdata(set[i]);
355 4 }
356 3 }
357 2 else
358 2 {
359 3 if(j<3)
360 3 {
361 4 if(b==1)
362 4 {
363 5 set[0]=0;set[1]=0;set[2]=0;
364 5 data5620=0;
365 5 j=0;
C51 COMPILER V7.20 TEXT1 07/19/2007 09:52:58 PAGE 7
366 5 lcd1602_wrcmd(0xc0);
367 5 for(i=0;i<14;i++)
368 5 lcd1602_wrdata(0);
369 5 lcd1602_wrcmd(0x87);
370 5 for(i=0;i<3;i++)
371 5 lcd1602_wrdata(0);
372 5 b=0;
373 5 }
374 4 switch(key)
375 4 {
376 5 case 0x14:jia(0);break;
377 5 case 0x28:jia(1);break;
378 5 case 0x24:jia(2);break;
379 5 case 0x22:jia(3);break;
380 5 case 0x48:jia(4);break;
381 5 case 0x44:jia(5);break;
382 5 case 0x42:jia(6);break;
383 5 case 0x88:jia(7);break;
384 5 case 0x84:jia(8);break;
385 5 case 0x82:jia(9);break;
386 5 default : break;
387 5 }
388 4 }
389 3 }
390 2 }
391 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1102 ----
CONSTANT SIZE = 44 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 11 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 + -