找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1223|回復(fù): 0
收起左側(cè)

51單片機(jī)lcd控制程序的疑問(wèn)

[復(fù)制鏈接]
ID:450939 發(fā)表于 2018-12-20 18:12 | 顯示全部樓層 |閱讀模式
題目   郭天祥學(xué)習(xí)板為硬件,晶振為11.0592MHz開(kāi)始時(shí)LCD第二行最左端顯示100010,每等0.5秒,LCD顯示值自動(dòng)加1,LCD顯示范圍100010-100020,循環(huán)顯示。按按鍵S2一下,LCD顯示值變?yōu)?/font>100010,加1重新進(jìn)行。0.5S定時(shí)用定時(shí)器實(shí)現(xiàn)。
程序

當(dāng)前程序按鍵為s4 重新開(kāi)始循環(huán) 請(qǐng)問(wèn)怎么改到s2

單片機(jī)源程序:
  1. #include <reg52.h>                 //調(diào)用單片機(jī)頭文件
  2. #define uchar unsigned char  //無(wú)符號(hào)字符型 宏定義        變量范圍0~255
  3. #define uint  unsigned int         //無(wú)符號(hào)整型 宏定義        變量范圍0~65535




  4. sbit rs=P3^5;         //寄存器選擇信號(hào) H:數(shù)據(jù)寄存器          L:指令寄存器
  5. sbit e =P3^4;         //片選信號(hào)   下降沿觸發(fā)
  6. sbit le=P2^5;
  7. sbit l1=P2^6;
  8. sbit l2=P2^7; //鎖數(shù)碼管


  9. sbit s4=P3^6;




  10. char xianshi=10;
  11. uchar t;


  12. /***********************延時(shí)函數(shù)************************/
  13. void delay_uint(uint q)
  14. {
  15.         while(q--);
  16. }


  17. /***********************lcd1602寫命令函數(shù)************************/
  18. void write_com(uchar com)
  19. {
  20.         e=0;
  21.         rs=0;
  22.         P0=com;
  23.         delay_uint(3);
  24.         e=1;
  25.         delay_uint(25);
  26.         e=0;
  27. }


  28. /***********************lcd1602寫數(shù)據(jù)函數(shù)************************/
  29. void write_data(uchar dat)
  30. {
  31.         e=0;
  32.         rs=1;
  33.         P0=dat;
  34.         delay_uint(3);
  35.         e=1;
  36.         delay_uint(25);
  37.         e=0;        
  38. }








  39. /***********************lcd1602上顯示這字符函數(shù)************************/
  40. void write_string(uchar hang,uchar add,uchar *p)
  41. {
  42.         if(hang==1)   
  43.                 write_com(0x80+add);
  44.         else
  45.                 write_com(0x80+0x40+add);
  46.                 while(1)                                                                                                                 
  47.                 {
  48.                         if(*p == '\0')  break;
  49.                         write_data(*p);
  50.                         p++;
  51.                         delay_uint(50);
  52.                 }        
  53. }




  54. /***********************lcd1602初始化設(shè)置************************/
  55. void init_1602()
  56. {
  57.         write_com(0x38);        //
  58.         write_com(0x0c);
  59.         write_com(0x06);
  60.                 write_string(1,0,"        ");//第一行顯示
  61.                 write_string(2,0,"100010  ");


  62. }


  63. void write_zifu(uchar hang,uchar add,uchar dat)
  64. {
  65.         if(hang==1)   
  66.                 write_com(0x80+add);
  67.         else
  68.                 write_com(0x80+0x40+add);
  69.         write_data(dat);
  70. }
  71. /***********************1ms延時(shí)函數(shù)*****************************/
  72. void delay_1ms(uint q)
  73. {
  74.         uint i,j;
  75.         for(i=0;i<q;i++)
  76.                 for(j=0;j<120;j++);
  77. }




  78. void time_init()         
  79. {
  80.         EA   = 1;                   //開(kāi)總中斷
  81.         TMOD = 0X01;          //定時(shí)器0、工作方式1
  82.                 TH0=-20000/256;
  83.                 TL0=-20000%256;
  84.                 TR0=1;
  85.         ET0  = 1;
  86. }
  87. /******************主程序**********************/           
  88. void main()
  89. {        
  90.     l1=l2=0;// 關(guān)閉數(shù)碼管
  91.         init_1602();//液晶初始化
  92.         time_init();
  93.         while(1)
  94.         {
  95. if(!s4) //按鍵按下
  96. { delay_1ms(5);//延時(shí)10ms
  97. if(!s4)
  98. {
  99. while(!s4); //按鍵抬起
  100. xianshi=10;        t=0;
  101. }
  102. }


  103. write_zifu(2,4,xianshi/10+0x30);
  104. write_zifu(2,5,xianshi%10+0x30);




  105.          }






  106.         }


  107. void time0() interrupt 1
  108. {


  109.                   TH0=-20000/256;
  110.                 TL0=-20000%256;
  111.                 if(++t>=25)
  112.                 {         
  113.                   t=0;
  114.                   xianshi =xianshi+1;
  115.                   if(xianshi==21)  xianshi=10;
  116.                
  117.                 }




  118. }
復(fù)制代碼


ZH200開(kāi)發(fā)板原理圖.pdf

74.46 KB, 下載次數(shù): 3

附上原理圖

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表