请大家帮我看看这段程序能不能实现功能

2020-02-04 09:05发布

预计功能是 :开电源后,LCD显示时间 并开始走动  (初始显示   2012-05-01 TUE     00:00:00),
              按键对显示控制,按下按键后LCD切换显示 ,再次按下按键恢复初始显示
用keil51编译没错误,但没实验板,也不会用protue仿真 所以请高手帮忙看看能不能行
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. sbit RS=P3^1;
  5. sbit EN=P3^0;                         //RW接地
  6. sbit KEY=P3^3;
  7. uchar h,m,s,count,t;
  8. uchar code table[]="   2012-05-01 TUE";
  9. uchar code table1[]="   00:00:00";
  10. uchar code table2[]="   ZHOU DENG";
  11. uchar code table3[]="   20091131173";
  12. //延时;
  13. void delay(uint z)
  14. {
  15.   uint x,y;
  16.   for(x=z;x>0;x--)
  17.      for(y=110;y>0;y--);
  18. }
  19. //LCD写指令;
  20. void write_com(uchar com)
  21. {
  22.   RS=0;
  23.   EN=0;
  24.   P1=com;
  25.   delay(5);
  26.   EN=1;
  27.   delay(5);
  28.   EN=0;
  29. }
  30. //LCD写数据;
  31. void write_date(uchar date)
  32. {
  33.   RS=1;
  34.   EN=0;
  35.   P1=date;
  36.   delay(5);
  37.   EN=1;
  38.   delay(5);
  39.   EN=0;
  40. }
  41. //时分秒走动;
  42. void write_sfm(uchar add,uchar date)
  43. {
  44.   uchar shi,ge;
  45.   shi=date/10;
  46.   ge=date%10;
  47.   write_com(0x80+0x40+add);        //第二行时间位置
  48.   write_date(0x30+shi);
  49.   write_date(0x30+ge);
  50. }
  51. // 按键检测
  52. uchar keyscan()
  53. {
  54. if(KEY==0)
  55. {
  56.   delay(5);
  57.   if(KEY==0)
  58.   return 0;          
  59.   else
  60.   return 1;
  61.   }
  62.   else
  63.   return 1;
  64. }
  65. // 切换内容
  66. void xianshi()
  67. {
  68.   uchar a;
  69.   write_com(0x01);//清屏;
  70.   write_com(0x80);
  71.   for(a=0;a<12;a++)
  72.   {
  73.    write_date(table2[a]);
  74.    delay(5);
  75.   }
  76.   write_com(0x80+0x40);
  77.   for(a=0;a<14;a++)
  78.   {
  79.    write_date(table3[a]);
  80.    delay(5);
  81.   }
  82.    while(keyscan()) ;  //保持显示
  83. }
  84.   
  85. //LCD初始化;
  86. void init()
  87. {
  88. uchar b;
  89. write_com(0x38);
  90. delay(5);
  91. write_com(0x0c);
  92. delay(5);
  93. write_com(0x06);
  94. delay(5);
  95. write_com(0x01);
  96. delay(5);
  97. write_com(0x80);
  98. for(b=0;b<16;b++)
  99.           {
  100.           write_date(table[b]);
  101.           delay(5);
  102.     }
  103. write_com(0x80+0x40);
  104. for(b=0;b<12;b++)
  105.         {
  106.           write_date(table1[b]);
  107.           delay(5);
  108.         }
  109. }
  110. //主函数;
  111. void main()
  112. {
  113. while(1)
  114. {
  115. init();   
  116. count=0;
  117. TMOD=0x01;
  118. TH0=(65536-50000)/256;
  119. TL0=(65536-50000)%256;
  120. EA=1;
  121. ET0=1;
  122. TR0=1;
  123. while(1)
  124. {
  125.   if(count==20)
  126.   {
  127.    count=0;
  128.    s++;
  129.    if(s==60)
  130.    {
  131.     s=0;
  132.         m++;
  133.         if(m==60)
  134.         {
  135.          m=0;
  136.          h++;
  137.          if(h==24)
  138.          {
  139.           h=0;
  140.          }
  141.          write_sfm(4,h);
  142.         }
  143.         write_sfm(7,m);
  144.    }
  145.    write_sfm(10,m);
  146.   }
  147.   if(keyscan()==0)
  148.    break;
  149.    }
  150.   xianshi();
  151.   }
  152.   }
  153. //中断;
  154. void timer0() interrupt 1
  155. {
  156. TH0=(65536-50000)/256;
  157. TL0=(65536-50000)%256;
  158. count++;
  159. }
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。