找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1116|回复: 6
收起左侧

求大神帮我看一眼这个单片机程序仿真时为什么按键没反应?

[复制链接]
ID:563526 发表于 2019-6-18 07:50 | 显示全部楼层 |阅读模式
  1. #include<reg51.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. uint a,b,i,min,hour,minge,minshi,hourge,hourshi,amin,ahour,aminge,aminshi,ahourge,ahourshi,sec;
  5. uchar int_time;
  6. sbit key1=P1^0;     
  7. sbit key2=P1^1;  
  8. sbit key3=P1^2;  
  9. sbit key4=P1^3;  
  10. sbit lcdrs=P2^0;  
  11. sbit lcdrw=P2^1;
  12. sbit lcden=P2^2;
  13. sbit led=P2^4;   
  14. sbit sound=P2^5;  
  15. uchar code table1[]={'0','1','2','3','4','5','6','7','8','9'};
  16. uchar code table2[]="Time:00:00      " ;
  17. uchar code Alarm_1[]="Alarm:00:00     ";
  18. uchar code nul[]="                 ";
  19.   void delay(unsigned int xms)  //??????
  20. { uint i,j;         
  21.   for(i=xms;i>0;i--)
  22.    for(j=124;j>0;j--);
  23. }
  24. void write_com(uchar com)   //LCD???????
  25. { delay(5) ;
  26. lcdrs=0;
  27. P0=com;
  28. delay(5);
  29. lcden=1;
  30. delay(5);
  31. lcden=0;
  32. }
  33. void write_data(uchar date)     //LCD???????
  34. {
  35. delay(5);
  36. lcdrs=1;
  37. P0=date;
  38. delay(5);
  39. lcden=1;
  40. delay(5);
  41. lcden=0;
  42. }
  43.    void clock_write()
  44.    { while(1)
  45. {
  46.   if(key1==0)                    
  47.   { delay(10);
  48.    if(key1==0)
  49.    {
  50.     if(hour==23)     // ???????
  51.      hour=0;
  52.     else
  53.      hour++;
  54.     hourge=hour%10;
  55.     hourshi=hour/10;
  56.     write_com(0x0f);
  57.     delay(2);
  58.     write_com(0x80+6);
  59.     write_data(table1[hourge]);
  60.     delay(5);
  61.     write_com(0x80+5);
  62.     delay(2);
  63.     write_data(table1[hourshi]);
  64.     while(!key1);
  65.     delay(1);
  66.    }
  67.   }
  68.   if(key2==0)
  69.    {
  70.     delay(10);
  71.    if(key2==0)
  72.    {
  73.     if(min==59)     //????????
  74.      min=0;
  75.     else
  76.      min++;
  77.     minge=min%10;
  78.     minshi=min/10;
  79.                 write_com(0x0f);
  80.                 write_com(0x80+9);
  81.     write_data(table1[minge]);
  82.     delay(1);
  83.                 write_com(0x80+8);
  84.     write_data(table1[minshi]);
  85.     delay(1);
  86.     while(!key2);
  87.    }
  88.    }
  89.   if(key3==0)
  90.    {
  91.     delay(10);
  92.    if(key3==0)
  93.    {
  94.     write_com(0x0c);
  95.     TR1=1;
  96.     while(!key3);
  97.     break;
  98.    }
  99.    }
  100. }
  101. }
  102. void alarm()     
  103. {
  104.   while(1)
  105. {
  106.   if(key1==0)
  107.   {
  108.     delay(10);
  109.    if(key1==0)
  110.    {
  111.     if(ahour==24)   
  112.      ahour=0;
  113.     else
  114.      ahour++;
  115.     ahourge=ahour%10;
  116.     ahourshi=ahour/10;
  117.     write_com(0x0f);
  118.     delay(2);
  119.     write_com(0x80+0x40+8);
  120.     write_data(':');
  121.     write_com(0x80+0x40+7);
  122.     write_data(table1[ahourge]);
  123.     delay(1);
  124.     write_com(0x80+0x40+6);
  125.     delay(2);
  126.     write_data(table1[ahourshi]);
  127.     delay(1);
  128.     while(!key1);
  129.    }
  130.   }
  131.   if(key2==0)
  132.    {
  133.     delay(10);
  134.    if(key2==0)
  135.    {
  136.     if(amin==59)   
  137.      amin=0;
  138.     else
  139.      amin++;
  140.     aminge=amin%10;
  141.     aminshi=amin/10;
  142.     write_com(0x0f);
  143.     delay(2);
  144.     write_com(0x80+0x40+10);
  145.     write_data(table1[aminge]);
  146.     delay(1);
  147.     write_com(0x80+0x40+9);
  148.        delay(2);
  149.     write_data(table1[aminshi]);
  150.     delay(1);
  151.     while(!key2);
  152.    }
  153.    }
  154.   if(key3==0)
  155.    {
  156.     delay(10);
  157.    if(key3==0)
  158.    {
  159.     write_com(0x0c);
  160.     write_com(0x80+0x40);
  161.     for(i=0;i<11;i++)
  162.     write_data(nul[i]);
  163.     while(!key3);
  164.     break;
  165.    }
  166.    }
  167. }
  168. }
  169. void keyscan()   
  170. {
  171.   if(key1==0)   
  172.   {
  173.    delay(10);
  174.   if(key1==0)
  175.   {
  176.    while(!key1);
  177.    time();
  178.   }
  179. }   
  180.   else if(key2==0)   
  181.   {
  182.    delay(10);
  183.   if(key2==0)
  184.   {
  185.    while(!key2)
  186.    {
  187.    ahourge=ahour%10;
  188.    ahourshi=ahour/10;
  189.    write_com(0x80+0x40+7);
  190.    write_data(table1[ahourge]);
  191.    delay(5);
  192.    write_com(0x80+0x40+6);
  193.    delay(2);
  194.    write_data(table1[ahourshi]);
  195.    aminge=amin%10;
  196.    aminshi=amin/10;
  197.    write_com(0x80+0x40+10);
  198.    write_data(table1[aminge]);
  199.    delay(5);
  200.    write_com(0x80+0x40+9);
  201.    delay(2);
  202.    write_data(table1[aminshi]);
  203.    write_com(0x80+0x40);
  204.    for(i=0;i<11;++i)
  205.    write_data(Alarm_1[i]);
  206.    }
  207.    write_com(0x80+0x40);
  208.    for(i=0;i<11;i++)
  209.    write_data(nul[i]);
  210.   }
  211.   }
  212. else if(key3==0)     
  213.   {
  214.    delay(10);
  215.   if(key3==0)
  216.   {
  217.    while(!key3);
  218.       ahourge=ahour%10;
  219.    ahourshi=ahour/10;
  220.    write_com(0x80+0x40+7);
  221.    write_data(table1[ahourge]);
  222.    delay(5);
  223.    write_com(0x80+0x40+6);
  224.    delay(2);
  225.    write_data(table1[ahourshi]);
  226.    aminge=amin%10;
  227.    aminshi=amin/10;
  228.    write_com(0x80+0x40+10);
  229.    write_data(table1[aminge]);
  230.    delay(5);
  231.    write_com(0x80+0x40+9);
  232.    delay(2);
  233.    write_data(table1[aminshi]);
  234.    write_com(0x80+0x40);
  235.    for(i=0;i<11;++i)
  236.    write_data(Alarm_1[i]);
  237.    alarm();
  238.   }
  239.   }
  240. else if(key4==0)     
  241.    delay(5);
  242.   if(key4==0)
  243.   {
  244.    while(!key4);
  245.    a=a+1;
  246.    if(a%2==0)
  247.    {
  248.     for(b=0;b<6;b++)
  249.     {
  250.      sound=~sound;
  251.      delay(200);
  252.     }
  253.     sound=1;
  254.    }
  255.    else if(a%2==1)
  256.    {
  257.     sound=0;
  258.     delay(300);
  259.     sound=1;
  260.     delay(300);
  261.    }
  262.     sound=1;
  263.   }
  264.   }
  265.   void main()
  266.   {
  267.    TMOD=0x01;
  268. TH0=(65536-46483)/256;
  269. TL1=(65536-46483)%256;
  270. EA=1;
  271. ET0=1;
  272. TR0=1;
  273. int_time=0;
  274. sec=55;
  275. min=59;
  276. hour=23;
  277. }
  278. void T0_interserve(void) interrupt 1
  279. {
  280.    int_time++;
  281.    if(int_time==20)
  282.    {int_time=0;
  283.    sec++;
  284.    }
  285.    if(sec==60)
  286.    {   sec=0;
  287.    min++;
  288.    }
  289.    if(min==60)
  290.    {min=0;
  291.    hour++;
  292.    }
  293.    if(hour==24)
  294.    {hour=0;}
  295. TH0=(65536-46483)/256;
  296. TL1=(65536-46483)%256;
  297. }
复制代码
回复

使用道具 举报

ID:552614 发表于 2019-6-18 13:50 | 显示全部楼层
检查一下引脚有没有定义错误,没有硬件图很难看出来
回复

使用道具 举报

ID:565843 发表于 2019-6-18 16:42 | 显示全部楼层
求大神给我个项目,单片机实训,电子钟,谢谢
回复

使用道具 举报

ID:213173 发表于 2019-6-18 17:02 | 显示全部楼层
楼主main程序中没有调用任何子程序并且没有主循环,MCU除了反复初始化定时器和时分秒,什么也干不了,包括中断也不可能发生。
回复

使用道具 举报

ID:452821 发表于 2019-6-18 19:04 | 显示全部楼层
主函数没有循环,程序不运行;随便一提快三百行的程序没有注释对齐也不是很准确看着真的非常头疼。建议下次改进一下。
回复

使用道具 举报

ID:563526 发表于 2019-6-18 22:31 | 显示全部楼层
wulin 发表于 2019-6-18 17:02
楼主main程序中没有调用任何子程序并且没有主循环,MCU除了反复初始化定时器和时分秒,什么也干不了,包括 ...

⊙0⊙,谢谢你鸭。
回复

使用道具 举报

ID:365405 发表于 2019-6-19 15:15 | 显示全部楼层
主程序没有循环,所以什么都干不了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表