標(biāo)題: 新手51單片機(jī)設(shè)置紅綠燈等問(wèn)題,一個(gè)疑惑,跪求解答! [打印本頁(yè)]

作者: haohaoxue51    時(shí)間: 2018-3-9 18:39
標(biāo)題: 新手51單片機(jī)設(shè)置紅綠燈等問(wèn)題,一個(gè)疑惑,跪求解答!
我現(xiàn)在設(shè)計(jì)紅綠燈程序,要設(shè)計(jì)一個(gè)按鍵,按一下三燈全亮,在按一下繼續(xù)執(zhí)行原來(lái)的讀秒。 比如現(xiàn)在倒計(jì)時(shí)從20開(kāi)始,到了10的時(shí)候我按下鍵在松開(kāi),紅綠燈三燈一直亮,我再按一下,繼續(xù)從10開(kāi)始倒計(jì)時(shí)。 我現(xiàn)在遇到的的問(wèn)題就是 再按一下,繼續(xù)從10開(kāi)始倒計(jì)時(shí) 這一步驟寫(xiě)不出來(lái),不知道怎么利用中斷寫(xiě)出來(lái),求解答。不知道如何改,我的程序如下: 直接從main主函數(shù)往下看就行了,中斷函數(shù)也在下面,純新手,求解答,在線等

單片機(jī)源程序如下:
  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.       
復(fù)制代碼

作者: 笨笨兔    時(shí)間: 2018-3-10 08:59
中斷保護(hù)現(xiàn)場(chǎng),再次中斷回復(fù)現(xiàn)場(chǎng)。。。。。。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1