找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2323|回复: 1
收起左侧

新手51单片机设置红绿灯等问题,一个疑惑,跪求解答!

[复制链接]
ID:289777 发表于 2018-3-9 18:39 | 显示全部楼层 |阅读模式
我现在设计红绿灯程序,要设计一个按键,按一下三灯全亮,在按一下继续执行原来的读秒。 比如现在倒计时从20开始,到了10的时候我按下键在松开,红绿灯三灯一直亮,我再按一下,继续从10开始倒计时。 我现在遇到的的问题就是 再按一下,继续从10开始倒计时 这一步骤写不出来,不知道怎么利用中断写出来,求解答。不知道如何改,我的程序如下: 直接从main主函数往下看就行了,中断函数也在下面,纯新手,求解答,在线等
QQ图片20180309183636.png
单片机源程序如下:
  1. #include <reg52.h>
  2. sbit red=P2^0;
  3. sbit yellow=P2^1;  
  4. sbit green=P2^2;
  5. sbit red1=P2^3;
  6. sbit yellow1=P2^4;
  7. sbit green1=P2^5;
  8.   
  9. #define DATA1 P0
  10. #define DATA2 P1
  11. void delay(long n)
  12. {
  13. while(n--);
  14. }
  15. void numb_test1()
  16. {   char e;
  17. for(e=5;e>=0;e--)
  18. {
  19. yellow1=0;
  20. DATA1=((e/10)<<4)+e%10;
  21. DATA2=((e/10)<<4)+e%10;
  22. delay(7500) ;
  23. yellow1=1;
  24. delay(7500) ;
  25. }
  26. }

  27. void numb_test2()
  28. {char y;
  29. for(y=5;y>=0;y--)
  30. {    yellow=0;
  31. DATA1=((y/10)<<4)+y%10;
  32. DATA2=((y/10)<<4)+y%10;
  33. delay(7500) ;
  34. yellow=1;
  35. delay(7500) ;
  36. }
  37. }

  38. void numb_test()
  39. {char x,q;
  40. for(x=30,q=35;x>=0,q>=0;x--,q--)
  41. {
  42.       if(x<0)
  43.    {
  44.    green=1;
  45. numb_test2() ;
  46.     break;  
  47.   }
  48.   
  49. DATA1=((x/10)<<4)+x%10;
  50. DATA2=((q/10)<<4)+q%10;
  51. delay(15000) ;
  52. }
  53. }


  54.    
  55. numb_test3 ()
  56. {char z,w;
  57. for(w=15,z=20;w>=0,z>=0;w--,z--)
  58. {
  59. if(w<0)
  60. {
  61. green1=1;
  62.   numb_test1();
  63. break;
  64. }
  65. DATA1=((z/10)<<4)+z%10;
  66. DATA2=((w/10)<<4)+w%10;
  67. delay(15000) ;
  68. }
  69. }
  70.    
  71.   char t=0;
  72. void main()
  73. {   
  74. EA=1;
  75. EX0=1;
  76. IT0=1;
  77. while(1)
  78. {

  79.     green=0;
  80.     red1=0;
  81.     numb_test();
  82.     green=1;
  83. red1=1;
  84. green1=0;
  85.     red=0;
  86.     numb_test3();
  87.     red=1;
  88.     red1=0;
  89.   
  90. }
  91. }  
  92. void interrupt_0() interrupt 0
  93.   { char r ;
  94.   while(1)
  95.    { r=99;
  96.     red=1;
  97.     green=0  ;
  98.     yellow=1;
  99.     DATA1=((r/10)<<4)+r%10;
  100.     DATA2=((r/10)<<4)+r%10;
  101.      
  102.      
  103.       }
  104.   
  105.      }  
  106.       
复制代码
回复

使用道具 举报

ID:158375 发表于 2018-3-10 08:59 | 显示全部楼层
中断保护现场,再次中断回复现场。。。。。。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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