久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2831|回復: 0
打印 上一主題 下一主題
收起左側(cè)

基于計數(shù)器的交通燈應用

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:857654 發(fā)表于 2020-12-20 21:00 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
本次分為兩個版本:
基礎版
加強版


基礎版只是利用定時器去實現(xiàn)相應的功能模塊

加強版使用了兩個中斷(功能:1,綠燈時,每按一下,時間+2s,最高9s,功能2:相反)

說明:
基礎版和加強版可共用一個電路圖,此帖只附加了加強版的壓縮包,想要基礎版的可留言+郵件地址,謝謝閱讀!多多支持

電路圖



基礎版主函數(shù)代碼
  1. #include <config.h>
  2. sbit RED_NANBEIZHI=P1^0;          //南北方向直行紅燈
  3. sbit YELLOW_NANBEIZHI=P1^1;  //南北方向直行黃燈
  4. sbit GREEN_NANBEIZHI=P1^2;          //南北方向直行綠燈
  5. sbit RED_DONGXIZHI=P1^3;          //東西方向直行紅燈
  6. sbit YELLOW_DONGXIZHI=P1^4;        //東西方向直行黃燈
  7. sbit GREEN_DONGXIZHI=P1^5;          //東西方向直行綠燈
  8. sbit RED_NANBEIZUO=P2^0;          //南北方向左轉(zhuǎn)紅燈
  9. sbit YELLOW_NANBEIZUO=P2^1;  //南北方向左轉(zhuǎn)黃燈
  10. sbit GREEN_NANBEIZUO=P2^2;          //南北方向左轉(zhuǎn)綠燈
  11. sbit RED_DONGXIZUO=P2^3;          //東西方向左轉(zhuǎn)紅燈
  12. sbit YELLOW_DONGXIZUO=P2^4;        //東西方向左轉(zhuǎn)黃燈
  13. sbit GREEN_DONGXIZUO=P2^5;          //東西方向左轉(zhuǎn)綠燈
  14. sbit NBZHI=P1^6;
  15. sbit NBZUO=P1^7;
  16. sbit DXZHI=P2^6;
  17. sbit DXZUO=P2^7;

  18. u16 n;
  19. u16 tt,bai,shi,ge,bb;       
  20. u8 code table[]={
  21. 0x3f,0x06,0x5b,0x4f,
  22. 0x66,0x6d,0x7d,0x07,
  23. 0x7f,0x6f};

  24. void delay_ms(u16 t);

  25. void xtimer0();
  26. //1
  27. void chushi0();
  28. //2
  29. void nbzhi1();
  30. void nbzhi2();
  31. void nbzhi3();
  32. //3
  33. void nbzuo2();
  34. void nbzuo3();
  35. void nbzuo4();
  36. //4
  37. void dxzhi1();
  38. void dxzhi2();
  39. void dxzhi3();
  40. //5
  41. void dxzuo2();
  42. void dxzuo3();
  43. void dxzuo4();


  44. void main()
  45. {
  46.    P0=0xff;
  47.    P1=0xc9;
  48.    P2=0xc0;
  49.    P3=0xff;
  50.    EA=1;
  51.    EX0=1;
  52.    IT0=0;
  53.    delay_ms(250);

  54.    chushi0();                // ①南北向直行綠燈亮,延時5秒

  55.    while(1)
  56.    {

  57.             //2 南北向直行:
  58.          nbzhi1(); // ②啟動南北向左轉(zhuǎn)數(shù)碼管顯示:倒計時6秒;同時南北向直行綠燈閃爍3下,滅亮滅亮滅亮共3秒,
  59.          nbzhi2(); // 然后南北向直行綠燈滅,南北向直行黃燈亮,延時3秒
  60.          nbzhi3(); // ③南北向左轉(zhuǎn)數(shù)碼管倒計時顯示結(jié)束,關閉;同時南北向直行黃燈滅,南北向直行紅燈亮    ①南北向左轉(zhuǎn)綠燈亮,延時若干秒
  61. //         //3 南北向左轉(zhuǎn)
  62.          nbzuo2(); // ②啟動東西向直行數(shù)碼管顯示:倒計時6秒;同時南北向左轉(zhuǎn)綠燈閃爍3下,滅亮滅亮滅亮共3秒,
  63.          nbzuo3(); // 然后南北向左轉(zhuǎn)綠燈滅,南北向左轉(zhuǎn)黃燈亮,延時3秒
  64.          nbzuo4();        //③東西向直行數(shù)碼管倒計時顯示結(jié)束,關閉;同時南北向左轉(zhuǎn)黃燈滅,南北向左轉(zhuǎn)紅燈亮           ①東西向直行綠燈亮,延時若干秒
  65.          //4 東西向直行:
  66.          dxzhi1();        //②啟動東西向左轉(zhuǎn)數(shù)碼管顯示:倒計時6秒;同時東西向直行綠燈閃爍3下,滅亮滅亮滅亮共3秒,
  67.          dxzhi2();        //然后東西向直行綠燈滅,東西向直行黃燈亮,延時3秒
  68.          dxzhi3();        //③東西向左轉(zhuǎn)數(shù)碼管倒計時顯示結(jié)束,關閉;同時東西向直行黃燈滅,東西向直行紅燈亮          ①東西向左轉(zhuǎn)綠燈亮,延時若干秒
  69.          //5 東西向左轉(zhuǎn):
  70.          dxzuo2();         //②啟動南北向直行數(shù)碼管顯示:倒計時6秒;同時東西向左轉(zhuǎn)綠燈閃爍3下,滅亮滅亮滅亮共3秒,
  71.          dxzuo3();         //然后東西向左轉(zhuǎn)綠燈滅,東西向左轉(zhuǎn)黃燈亮,延時3秒
  72.          dxzuo4();         //③南北向直行數(shù)碼管倒計時顯示結(jié)束,關閉;同時東西向左轉(zhuǎn)黃燈滅,東西向左轉(zhuǎn)紅燈亮
  73.    }
  74. }
  75. ////////1、初始時:南北向、東西向直行左轉(zhuǎn)均為紅燈
  76. void chushi0()          // ①南北向直行綠燈亮,延時5秒
  77. {
  78.     u16 temp1;
  79.          temp1=5;
  80.          TMOD|=0x01;
  81.          TH0=(65535-50000)/256;
  82.          TL0=(65535-50000)%256;
  83.          EA=1;
  84.          ET0=1;
  85.          TR0=1;
  86.          while(1)
  87.          {
  88.                  RED_NANBEIZHI=0;         
  89.                  GREEN_NANBEIZHI=1;
  90.                                   
  91.                  if(tt==20)//20*50us=1s
  92.                  {
  93.                         tt=0;
  94.                         temp1--;         
  95.                  }
  96.                   
  97.              n=(temp1)%10;

  98.                  if(temp1==0)
  99.                  {
  100.                           temp1=5;
  101.                         break;
  102.                  }
  103.                  NBZHI=0;         //南北直行
  104.                  NBZUO=1;
  105.                  DXZHI=1;
  106.                  DXZUO=1;
  107.                  P0=table[n];
  108.                  delay_ms(5);
  109.          }
  110. }


  111. //////2、南北向直行:
  112. void nbzhi1()                 //②啟動南北向左轉(zhuǎn)數(shù)碼管顯示:倒計時6秒;同時南北向直行綠燈閃爍3下,滅亮滅亮滅亮共3秒,
  113. {                       
  114.         u16 temp1;       
  115.         temp1=6;
  116.         TMOD=0x01;
  117.         TH0=(65535-50000)/256;
  118.         TL0=(65535-50000)%256;
  119.         EA=1;
  120.         ET0=1;
  121.         TR0=1;
  122.         while(1)
  123.         {
  124.                  RED_NANBEIZHI=0;             
  125.                  RED_NANBEIZUO=1;          
  126.                  
  127.                  RED_DONGXIZUO=1;
  128.                 if(tt==20)
  129.                 {
  130.                          tt=0;
  131.                         temp1--;
  132.                         if(temp1>=2)
  133.                         {
  134.                         GREEN_NANBEIZHI=~GREEN_NANBEIZHI;
  135.                     }                               
  136.                 }
  137.                 n=(temp1)%10;
  138.                                                  
  139.                 if(temp1==3)
  140.                 {
  141.                  temp1=6;
  142.                  break;       
  143.                 }
  144.             NBZHI=1;         //南北左轉(zhuǎn)
  145.                 NBZUO=0;
  146.                 DXZHI=1;
  147.                 DXZUO=1;
  148.                 P0=table[n];
  149.                 delay_ms(5);
  150.         }
  151. }

  152. void nbzhi2()                 // 然后南北向直行綠燈滅,南北向直行黃燈亮,延時3秒
  153. {                       
  154.         u16 temp1;       
  155.         temp1=3;
  156.         TMOD=0x01;
  157.         TH0=(65535-50000)/256;
  158.         TL0=(65535-50000)%256;
  159.         EA=1;
  160.         ET0=1;
  161.         TR0=1;
  162.         while(1)
  163.         {
  164.                  GREEN_NANBEIZHI=0;
  165.                  YELLOW_NANBEIZHI=1;
  166.                 if(tt==20)
  167.                 {
  168.                          tt=0;
  169.                         temp1--;
  170.                                                
  171.                        
  172.                        
  173.                 }
  174.                 n=(temp1)%10;
  175.                                                          
  176.                 if(temp1==0)
  177.                 {
  178.                  temp1=3;
  179.                  break;       
  180.                 }
  181.             NBZHI=1;         //南北左轉(zhuǎn)
  182.                 NBZUO=0;
  183.                 DXZHI=1;
  184.                 DXZUO=1;
  185.                 P0=table[n];
  186.                 delay_ms(5);       
  187.         }
  188. }

  189. void nbzhi3()                 //③南北向左轉(zhuǎn)數(shù)碼管倒計時顯示結(jié)束,關閉;同時南北向直行黃燈滅,南北向直行紅燈亮    ①南北向左轉(zhuǎn)綠燈亮,延時若干秒
  190. {                       
  191.         u16 temp1;       
  192.         temp1=5;
  193.         TMOD=0x01;
  194.         TH0=(65535-50000)/256;
  195.         TL0=(65535-50000)%256;
  196.         EA=1;
  197.         ET0=1;
  198.         TR0=1;
  199.         while(1)
  200.         {
  201.                  RED_NANBEIZHI=1;
  202.                  RED_NANBEIZUO=0;            
  203.                  GREEN_NANBEIZUO=1;;
  204.                  YELLOW_NANBEIZHI=0;

  205.                 if(tt==20)
  206.                 {
  207.                          tt=0;
  208.                         temp1--;
  209.                                 
  210.                 }
  211.                 n=(temp1)%10;                                                         
  212.                 if(temp1==0)
  213.                 {
  214.                  temp1=5;
  215.                  break;       
  216.                 }
  217.             NBZHI=1;         
  218.                 NBZUO=0;
  219.                 DXZHI=1;
  220.                 DXZUO=1;
  221.                 P0=table[n];
  222.                 delay_ms(5);
  223.         }       
  224. }

  225. ////////3、南北向左轉(zhuǎn):

  226. void nbzuo2()           //②啟動東西向直行數(shù)碼管顯示:倒計時6秒;同時南北向左轉(zhuǎn)綠燈閃爍3下,滅亮滅亮滅亮共3秒,
  227. {                       
  228.         u16 temp1,temp2;       
  229.         temp1=6;
  230.         temp2=3;
  231.         TMOD=0x01;
  232.         TH0=(65535-50000)/256;
  233.         TL0=(65535-50000)%256;
  234.         EA=1;
  235.         ET0=1;
  236.         TR0=1;
  237.         while(1)
  238.         {
  239.                  RED_DONGXIZHI=0;
  240.                  RED_DONGXIZHI=1;
  241.                  RED_DONGXIZUO=1;          
  242.                  GREEN_NANBEIZHI=0;
  243.                  YELLOW_NANBEIZHI=0;
  244.                 if(tt==20)
  245.                 {
  246.                          tt=0;
  247.                         temp1--;
  248.                         if(temp1>=2)
  249.                         {
  250.                         GREEN_NANBEIZUO=~GREEN_NANBEIZUO;
  251.                     }                       
  252.                          
  253.                        
  254.                 }
  255.                 n=(temp1)%10;                                                         
  256.                 if(temp1==3)
  257.                 {
  258.                  temp1=6;
  259.                  break;       
  260.                 }
  261.             NBZHI=1;         //南北左轉(zhuǎn)
  262.                 NBZUO=1;
  263.                 DXZHI=0;
  264.                 DXZUO=1;
  265.                 P0=table[n];
  266.                 delay_ms(5);       
  267.         }       
  268. }

  269. void nbzuo3()           // 然后南北向左轉(zhuǎn)綠燈滅,南北向左轉(zhuǎn)黃燈亮,延時3秒
  270. {                       
  271.         u16 temp1;       
  272.         temp1=3;
  273.         TMOD=0x01;
  274.         TH0=(65535-50000)/256;
  275.         TL0=(65535-50000)%256;
  276.         EA=1;
  277.         ET0=1;
  278.         TR0=1;
  279.         while(1)
  280.         {
  281.                
  282.                  GREEN_NANBEIZUO=0;
  283.                  GREEN_DONGXIZUO=0;
  284.                  GREEN_DONGXIZHI=0;
  285.                  YELLOW_NANBEIZUO=1;
  286.                  YELLOW_DONGXIZHI=0;
  287.                  
  288.                 if(tt==20)
  289.                 {
  290.                          tt=0;
  291.                         temp1--;
  292.                                                
  293.                  
  294.                        
  295.                 }         
  296.                 n=(temp1)%10;
  297.                                                          
  298.                 if(temp1==0)
  299.                 {
  300.                  temp1=3;
  301.                  break;       
  302.                 }        
  303.             NBZHI=1;         //南北左轉(zhuǎn)
  304.                 NBZUO=1;
  305.                 DXZHI=0;
  306.                 DXZUO=1;
  307.                 P0=table[n];
  308.                 delay_ms(5);       
  309.         }       
  310. }

  311. void nbzuo4()                   //③東西向直行數(shù)碼管倒計時顯示結(jié)束,關閉;同時南北向左轉(zhuǎn)黃燈滅,南北向左轉(zhuǎn)紅燈亮           ①東西向直行綠燈亮,延時若干秒
  312. {                       
  313.         u16 temp1;       
  314.         temp1=5;
  315.         TMOD=0x01;
  316.         TH0=(65535-50000)/256;
  317.         TL0=(65535-50000)%256;
  318.         EA=1;
  319.         ET0=1;
  320.         TR0=1;
  321.         while(1)
  322.         {
  323.                  RED_NANBEIZHI=1;             
  324.                  RED_NANBEIZUO=1;
  325.                  RED_DONGXIZHI=0;          
  326.                  GREEN_DONGXIZHI=1;
  327.                  YELLOW_DONGXIZHI=0;
  328.                  YELLOW_NANBEIZUO=0;
  329.                         if(tt==20)
  330.                 {
  331.                          tt=0;
  332.                         temp1--;
  333.                         
  334.                 }
  335.                 n=(temp1)%10;                                                         
  336.                 if(temp1==0)
  337.                 {
  338.                  temp1=5;
  339.                  break;       
  340.                 }
  341.             NBZHI=1;         
  342.                 NBZUO=1;
  343.                 DXZHI=0;
  344.                 DXZUO=1;
  345.                 P0=table[n];
  346.                 delay_ms(5);
  347.         }       
  348. }

  349. ////////4、東西向直行:

  350. void dxzhi1()           //②啟動東西向左轉(zhuǎn)數(shù)碼管顯示:倒計時6秒;同時東西向直行綠燈閃爍3下,滅亮滅亮滅亮共3秒,
  351. {                       
  352.         u16 temp1;       
  353.         temp1=6;
  354.         TMOD=0x01;
  355.         TH0=(65535-50000)/256;
  356.         TL0=(65535-50000)%256;
  357.         EA=1;
  358.         ET0=1;
  359.         TR0=1;
  360.         while(1)
  361.         {
  362.                  RED_NANBEIZHI=1;            
  363.                  RED_NANBEIZUO=1;          
  364.                  RED_DONGXIZUO=1;
  365.                  RED_DONGXIZHI=0;
  366.                 if(tt==20)
  367.                 {
  368.                          tt=0;
  369.                         temp1--;
  370.                         if(temp1>=2)
  371.                         {
  372.                         GREEN_DONGXIZHI=~GREEN_DONGXIZHI;
  373.                     }                       
  374.                                 
  375.                 }
  376.                 n=(temp1)%10;                                 
  377.                 if(temp1==3)
  378.                 {
  379.                  temp1=6;
  380.                  break;       
  381.                 }
  382.             NBZHI=1;         //南北左轉(zhuǎn)
  383.                 NBZUO=1;
  384.                 DXZHI=1;
  385.                 DXZUO=0;
  386.                 P0=table[n];
  387.                 delay_ms(5);
  388.         }       
  389. }

  390. void dxzhi2()                   //然后東西向直行綠燈滅,東西向直行黃燈亮,延時3秒
  391. {                       
  392.         u16 temp1;       
  393.         temp1=3;
  394.         TMOD=0x01;
  395.         TH0=(65535-50000)/256;
  396.         TL0=(65535-50000)%256;
  397.         EA=1;
  398.         ET0=1;
  399.         TR0=1;
  400.         while(1)
  401.         {
  402.                  RED_NANBEIZHI=1;            
  403.                  RED_NANBEIZUO=1;
  404.                  RED_DONGXIZHI=0;          
  405.                  GREEN_DONGXIZHI=0;
  406.                  YELLOW_DONGXIZHI=1;
  407.                 if(tt==20)
  408.                 {
  409.                          tt=0;
  410.                         temp1--;                                                       
  411.                 }
  412.                 n=(temp1)%10;                                                          
  413.                 if(temp1==0)
  414.                 {
  415.                  temp1=3;
  416.                  break;       
  417.                 }
  418.             NBZHI=1;         //南北左轉(zhuǎn)
  419.                 NBZUO=1;
  420.                 DXZHI=1;
  421.                 DXZUO=0;
  422.                 P0=table[n];
  423.                 delay_ms(5);
  424.         }               
  425. }

  426. void dxzhi3()                //③東西向左轉(zhuǎn)數(shù)碼管倒計時顯示結(jié)束,關閉;同時東西向直行黃燈滅,東西向直行紅燈亮          ①東西向左轉(zhuǎn)綠燈亮,延時若干秒
  427. {                       
  428.         u16 temp1;       
  429.         temp1=5;
  430.         TMOD=0x01;
  431.         TH0=(65535-50000)/256;
  432.         TL0=(65535-50000)%256;
  433.         EA=1;
  434.         ET0=1;
  435.         TR0=1;
  436.         while(1)
  437.         {
  438.                  RED_NANBEIZHI=0;             
  439.                  RED_DONGXIZHI=1;          
  440.                  RED_DONGXIZUO=0;
  441.                  GREEN_DONGXIZUO=1;
  442.                  YELLOW_DONGXIZHI=0;
  443.                 if(tt==20)
  444.                 {
  445.                          tt=0;
  446.                         temp1--;
  447.                                
  448.                 }
  449.                 n=(temp1)%10;                                                         
  450.                 if(temp1==0)
  451.                 {
  452.                  temp1=5;
  453.                  break;       
  454.                 }
  455.             NBZHI=1;         //南北左轉(zhuǎn)
  456.                 NBZUO=1;
  457.                 DXZHI=1;
  458.                 DXZUO=0;
  459.                 P0=table[n];
  460.                 delay_ms(5);
  461.         }       
  462. }

  463. ////////5、東西向左轉(zhuǎn):

  464. void dxzuo2()                //②啟動南北向直行數(shù)碼管顯示:倒計時6秒;同時東西向左轉(zhuǎn)綠燈閃爍3下,滅亮滅亮滅亮共3秒,
  465. {                       
  466.         u16 temp1,temp2;       
  467.         temp1=6;
  468.         temp2=3;
  469.         TMOD=0x01;
  470.         TH0=(65535-50000)/256;
  471.         TL0=(65535-50000)%256;
  472.         EA=1;
  473.         ET0=1;
  474.         TR0=1;
  475.         while(1)
  476.         {
  477.              
  478.                  RED_NANBEIZUO=1;          

  479.                 if(tt==20)
  480.                 {
  481.                          tt=0;
  482.                         temp1--;
  483.                         if(temp1>=2)
  484.                         {
  485.                         GREEN_DONGXIZUO=~GREEN_DONGXIZUO;
  486.                     }        
  487.                 }  
  488.                 n=(temp1)%10;                                                          
  489.                 if(temp1==3)
  490.                 {
  491.                  temp1=6;
  492.                  break;       
  493.                 }
  494.             NBZHI=0;         //南北左轉(zhuǎn)
  495.                 NBZUO=1;
  496.                 DXZHI=1;
  497.                 DXZUO=1;
  498.                 P0=table[n];
  499.                 delay_ms(5);                
  500.         }       
  501. }

  502. void dxzuo3()                 //然后東西向左轉(zhuǎn)綠燈滅,東西向左轉(zhuǎn)黃燈亮,延時3秒
  503. {                       
  504.         u16 temp1;       
  505.         temp1=3;
  506.         TMOD=0x01;
  507.         TH0=(65535-50000)/256;
  508.         TL0=(65535-50000)%256;
  509.         EA=1;
  510.         ET0=1;
  511.         TR0=1;
  512.         while(1)
  513.         {
  514.                  RED_NANBEIZHI=1;             
  515.                  RED_NANBEIZUO=1;
  516.                  GREEN_DONGXIZUO=0;          
  517.                  YELLOW_DONGXIZUO=1;
  518.                 if(tt==20)
  519.                 {
  520.                          tt=0;
  521.                         temp1--;
  522.                                                
  523.                          
  524.                        
  525.                 }
  526.                 n=(temp1)%10;                                 
  527.                 if(temp1==0)
  528.                 {
  529.                  temp1=3;
  530.                  break;       
  531.                 }
  532.             NBZHI=0;         //南北左轉(zhuǎn)
  533.                 NBZUO=1;
  534.                 DXZHI=1;
  535.                 DXZUO=1;
  536.                 P0=table[n];
  537.                 delay_ms(5);       
  538.         }       
  539. }

  540. void dxzuo4()                  //③南北向直行數(shù)碼管倒計時顯示結(jié)束,關閉;同時東西向左轉(zhuǎn)黃燈滅,東西向左轉(zhuǎn)紅燈亮          ①南北向直行綠燈亮,延時5秒
  541. {                       
  542.         u16 temp1;       
  543.         temp1=5;
  544.         TMOD=0x01;
  545.         TH0=(65535-50000)/256;
  546.         TL0=(65535-50000)%256;
  547.         EA=1;
  548.         ET0=1;
  549.         TR0=1;
  550.         while(1)
  551.         {         
  552.                  RED_NANBEIZHI=0;             
  553.                  RED_DONGXIZHI=1;
  554.                  RED_DONGXIZUO=1;
  555.                  GREEN_NANBEIZHI=1;
  556.                  YELLOW_DONGXIZUO=0;
  557.                         if(tt==20)
  558.                 {
  559.                          tt=0;
  560.                         temp1--;
  561.                                 
  562.                 }
  563.                 n=(temp1)%10;                                                         
  564.                 if(temp1==0)
  565.                 {
  566.                  temp1=5;
  567.                  break;       
  568.                 }
  569.             NBZHI=0;         //南北左轉(zhuǎn)
  570.                 NBZUO=1;
  571.                 DXZHI=1;
  572.                 DXZUO=1;
  573.                 P0=table[n];
  574.                 delay_ms(5);
  575.         }       
  576. }

  577. void delay_ms(u16 t)
  578. {                       
  579.         u8 i,j;
  580.         for(i=0;i<t;i++)
  581.         for(j=0;j<110;j++);       
  582. }



  583. void xtimer1() interrupt 1
  584. {                       
  585.         TH0=(65535-50000)/256;
  586.         TL0=(65535-50000)%256;
  587.         tt++;
  588. }

復制代碼



加強版主函數(shù)
  1. #include <config.h>
  2. sbit RED_NANBEIZHI=P1^0;          //南北方向直行紅燈
  3. sbit YELLOW_NANBEIZHI=P1^1;  //南北方向直行黃燈
  4. sbit GREEN_NANBEIZHI=P1^2;          //南北方向直行綠燈
  5. sbit RED_DONGXIZHI=P1^3;          //東西方向直行紅燈
  6. sbit YELLOW_DONGXIZHI=P1^4;        //東西方向直行黃燈
  7. sbit GREEN_DONGXIZHI=P1^5;          //東西方向直行綠燈
  8. sbit RED_NANBEIZUO=P2^0;          //南北方向左轉(zhuǎn)紅燈
  9. sbit YELLOW_NANBEIZUO=P2^1;  //南北方向左轉(zhuǎn)黃燈
  10. sbit GREEN_NANBEIZUO=P2^2;          //南北方向左轉(zhuǎn)綠燈
  11. sbit RED_DONGXIZUO=P2^3;          //東西方向左轉(zhuǎn)紅燈
  12. sbit YELLOW_DONGXIZUO=P2^4;        //東西方向左轉(zhuǎn)黃燈
  13. sbit GREEN_DONGXIZUO=P2^5;          //東西方向左轉(zhuǎn)綠燈
  14. sbit NBZHI=P1^6;
  15. sbit NBZUO=P1^7;
  16. sbit DXZHI=P2^6;
  17. sbit DXZUO=P2^7;
  18. u16 n,tt,temp1,temp=5;
  19. u8 code table[]={
  20. 0x3f,0x06,0x5b,0x4f,
  21. 0x66,0x6d,0x7d,0x07,
  22. 0x7f,0x6f};
  23. //函數(shù)
  24. void delay_ms(u16 t);
  25. void xtimer0();
  26. //1
  27. void chushi0();
  28. void chushi1();
  29. //2
  30. void nbzhi1();
  31. void nbzhi2();
  32. void nbzhi3();
  33. //3
  34. void nbzuo2();
  35. void nbzuo3();
  36. void nbzuo4();
  37. //4
  38. void dxzhi1();
  39. void dxzhi2();
  40. void dxzhi3();
  41. //5
  42. void dxzuo2();
  43. void dxzuo3();
  44. void dxzuo4();
  45. void sys_unit()
  46. {
  47.          TMOD|=0x01;
  48.          TH0=(65535-50000)/256;
  49.          TL0=(65535-50000)%256;
  50.             EA=1;
  51.          IT0=1;
  52.          IT1=1;         
  53.          ET0=1;
  54.          ET1=1;
  55.          EX0=1;
  56.          EX1=1;
  57.          TR0=1;
  58.          TR1=0;

  59. }

  60. void main()
  61. {  
  62.    P0=0xff;
  63.    P1=0xc9;
  64.    P2=0xc9;
  65.    P3=0xff;
  66.             
  67.    sys_unit();
  68.    chushi0();
  69.    chushi1();                // ①南北向直行綠燈亮,延時5秒
  70.    while(1)
  71.    {
  72.           
  73.             //2 南北向直行:
  74.          nbzhi1(); // ②啟動南北向左轉(zhuǎn)數(shù)碼管顯示:倒計時6秒;同時南北向直行綠燈閃爍3下,滅亮滅亮滅亮共3秒,
  75.          nbzhi2(); // 然后南北向直行綠燈滅,南北向直行黃燈亮,延時3秒
  76.          nbzhi3(); // ③南北向左轉(zhuǎn)數(shù)碼管倒計時顯示結(jié)束,關閉;同時南北向直行黃燈滅,南北向直行紅燈亮    ①南北向左轉(zhuǎn)綠燈亮,延時若干秒
  77. //         //3 南北向左轉(zhuǎn)
  78.          nbzuo2(); // ②啟動東西向直行數(shù)碼管顯示:倒計時6秒;同時南北向左轉(zhuǎn)綠燈閃爍3下,滅亮滅亮滅亮共3秒,
  79.          nbzuo3(); // 然后南北向左轉(zhuǎn)綠燈滅,南北向左轉(zhuǎn)黃燈亮,延時3秒
  80.          nbzuo4();        //③東西向直行數(shù)碼管倒計時顯示結(jié)束,關閉;同時南北向左轉(zhuǎn)黃燈滅,南北向左轉(zhuǎn)紅燈亮           ①東西向直行綠燈亮,延時若干秒
  81.          //4 東西向直行:
  82.          dxzhi1();        //②啟動東西向左轉(zhuǎn)數(shù)碼管顯示:倒計時6秒;同時東西向直行綠燈閃爍3下,滅亮滅亮滅亮共3秒,
  83.          dxzhi2();        //然后東西向直行綠燈滅,東西向直行黃燈亮,延時3秒
  84.          dxzhi3();        //③東西向左轉(zhuǎn)數(shù)碼管倒計時顯示結(jié)束,關閉;同時東西向直行黃燈滅,東西向直行紅燈亮          ①東西向左轉(zhuǎn)綠燈亮,延時若干秒
  85.          //5 東西向左轉(zhuǎn):
  86.          dxzuo2();         //②啟動南北向直行數(shù)碼管顯示:倒計時6秒;同時東西向左轉(zhuǎn)綠燈閃爍3下,滅亮滅亮滅亮共3秒,
  87.          dxzuo3();         //然后東西向左轉(zhuǎn)綠燈滅,東西向左轉(zhuǎn)黃燈亮,延時3秒
  88.          dxzuo4();         //③南北向直行數(shù)碼管倒計時顯示結(jié)束,關閉;同時東西向左轉(zhuǎn)黃燈滅,東西向左轉(zhuǎn)紅燈亮
  89.    }
  90. }
  91. ////////1、初始時:南北向、東西向直行左轉(zhuǎn)均為紅燈
  92. void chushi0()          // ①紅燈亮2秒
  93. {
  94.          temp1=5;
  95.          while(1)
  96.          {
  97.                  RED_NANBEIZHI=1;
  98.                  RED_NANBEIZUO=1;
  99.                  RED_DONGXIZHI=1;
  100.                  RED_DONGXIZUO=1;         
  101.                  if(tt==20)//20*50us=1s
  102.                  {
  103.                         tt=0;
  104.                         temp1--;         
  105.                  }
  106.                  if(temp1==3)
  107.                  {
  108.                           temp1=5;
  109.                         break;
  110.                  }
  111.          }
  112. }
  113. void chushi1()          // ①南北向直行綠燈亮,延時5秒
  114. {                 
  115.          while(1)
  116.          {                    
  117.                  RED_NANBEIZHI=0;         
  118.                  GREEN_NANBEIZHI=1;                                  
  119.                  if(tt==20)//20*50us=1s
  120.                  {
  121.                         tt=0;
  122.                         temp--;         
  123.                  }                   
  124.              n=temp%10;                 
  125.                  if(temp==0)
  126.                  {
  127.                           temp=5;
  128.                         break;
  129.                  }
  130.                  NBZHI=0;         //南北直行
  131.                  NBZUO=1;
  132.                  DXZHI=1;
  133.                  DXZUO=1;
  134.                  P0=table[n];
  135.                  delay_ms(5);
  136.          }
  137. }
  138. //////2、南北向直行:
  139. void nbzhi1()                 //②啟動南北向左轉(zhuǎn)數(shù)碼管顯示:倒計時6秒;同時南北向直行綠燈閃爍3下,滅亮滅亮滅亮共3秒,
  140. {                               
  141.         temp1=6;
  142.         while(1)
  143.         {
  144.                  RED_NANBEIZHI=0;             
  145.                  RED_NANBEIZUO=1;                  
  146.                  RED_DONGXIZUO=1;
  147.                 if(tt==20)
  148.                 {
  149.                          tt=0;
  150.                         temp1--;
  151.                         if(temp1>=2)
  152.                         {
  153.                         GREEN_NANBEIZHI=~GREEN_NANBEIZHI;
  154.                     }                               
  155.                 }
  156.                 n=temp1%10;                                                 
  157.                 if(temp1==3)
  158.                 {
  159.                  temp1=6;
  160.                  break;       
  161.                 }
  162.             NBZHI=1;         //南北左轉(zhuǎn)
  163.                 NBZUO=0;
  164.                 DXZHI=1;
  165.                 DXZUO=1;
  166.                 P0=table[n];
  167.                 delay_ms(5);
  168.         }
  169. }

  170. void nbzhi2()                 // 然后南北向直行綠燈滅,南北向直行黃燈亮,延時3秒
  171. {                               
  172.         temp1=3;
  173.         while(1)
  174.         {
  175.                  GREEN_NANBEIZHI=0;
  176.                  YELLOW_NANBEIZHI=1;
  177.                 if(tt==20)
  178.                 {
  179.                          tt=0;
  180.                         temp1--;       
  181.                 }
  182.                 n=(temp1)%10;                                                         
  183.                 if(temp1==0)
  184.                 {
  185.                  temp1=3;
  186.                  break;       
  187.                 }
  188.             NBZHI=1;         //南北左轉(zhuǎn)
  189.                 NBZUO=0;
  190.                 DXZHI=1;
  191.                 DXZUO=1;
  192.                 P0=table[n];
  193.                 delay_ms(5);       
  194.         }
  195. }

  196. void nbzhi3()                 //③南北向左轉(zhuǎn)數(shù)碼管倒計時顯示結(jié)束,關閉;同時南北向直行黃燈滅,南北向直行紅燈亮    ①南北向左轉(zhuǎn)綠燈亮,延時若干秒
  197. {       
  198.         while(1)
  199.         {
  200.                  RED_NANBEIZHI=1;
  201.                  RED_NANBEIZUO=0;            
  202.                  GREEN_NANBEIZUO=1;;
  203.                  YELLOW_NANBEIZHI=0;
  204.                 if(tt==20)
  205.                 {
  206.                          tt=0;
  207.                         temp--;                                
  208.                 }
  209.                 n=temp%10;                                                         
  210.                 if(temp==0)
  211.                 {
  212.                  temp=5;
  213.                  break;       
  214.                 }
  215.             NBZHI=1;         
  216.                 NBZUO=0;
  217.                 DXZHI=1;
  218.                 DXZUO=1;
  219.                 P0=table[n];
  220.                 delay_ms(5);
  221.         }       
  222. }

  223. ////////3、南北向左轉(zhuǎn):
  224. void nbzuo2()           //②啟動東西向直行數(shù)碼管顯示:倒計時6秒;同時南北向左轉(zhuǎn)綠燈閃爍3下,滅亮滅亮滅亮共3秒,
  225. {                               
  226.         temp1=6;
  227.         while(1)
  228.         {
  229.                  RED_DONGXIZHI=0;
  230.                  RED_DONGXIZHI=1;
  231.                  RED_DONGXIZUO=1;          
  232.                  GREEN_NANBEIZHI=0;
  233.                  YELLOW_NANBEIZHI=0;
  234.                 if(tt==20)
  235.                 {
  236.                          tt=0;
  237.                         temp1--;
  238.                         if(temp1>=2)
  239.                         {
  240.                         GREEN_NANBEIZUO=~GREEN_NANBEIZUO;
  241.                     }               
  242.                 }
  243.                 n=temp1%10;                                                         
  244.                 if(temp1==3)
  245.                 {
  246.                  temp1=6;
  247.                  break;       
  248.                 }
  249.             NBZHI=1;         //南北左轉(zhuǎn)
  250.                 NBZUO=1;
  251.                 DXZHI=0;
  252.                 DXZUO=1;
  253.                 P0=table[n];
  254.                 delay_ms(5);       
  255.         }       
  256. }

  257. void nbzuo3()           // 然后南北向左轉(zhuǎn)綠燈滅,南北向左轉(zhuǎn)黃燈亮,延時3秒
  258. {                               
  259.         temp1=3;
  260.         while(1)
  261.         {                         
  262.                  GREEN_NANBEIZUO=0;
  263.                  GREEN_DONGXIZUO=0;
  264.                  GREEN_DONGXIZHI=0;
  265.                  YELLOW_NANBEIZUO=1;
  266.                  YELLOW_DONGXIZHI=0;                 
  267.                 if(tt==20)
  268.                 {
  269.                          tt=0;
  270.                         temp1--;                                                       
  271.                 }         
  272.                 n=(temp1)%10;                                                         
  273.                 if(temp1==0)
  274.                 {
  275.                  temp1=3;
  276.                  break;       
  277.                 }        
  278.             NBZHI=1;         //南北左轉(zhuǎn)
  279.                 NBZUO=1;
  280.                 DXZHI=0;
  281.                 DXZUO=1;
  282.                 P0=table[n];
  283.                 delay_ms(5);       
  284.         }       
  285. }
  286. void nbzuo4()                   //③東西向直行數(shù)碼管倒計時顯示結(jié)束,關閉;同時南北向左轉(zhuǎn)黃燈滅,南北向左轉(zhuǎn)紅燈亮           ①東西向直行綠燈亮,延時若干秒
  287. {       
  288.         while(1)
  289.         {
  290.                  RED_NANBEIZHI=1;             
  291.                  RED_NANBEIZUO=1;
  292.                  RED_DONGXIZHI=0;          
  293.                  GREEN_DONGXIZHI=1;
  294.                  YELLOW_DONGXIZHI=0;
  295.                  YELLOW_NANBEIZUO=0;
  296.                 if(tt==20)
  297.                 {
  298.                          tt=0;
  299.                         temp--;                        
  300.                 }
  301.                 n=temp%10;                                                         
  302.                 if(temp==0)
  303.                 {
  304.                  temp=5;
  305.                  break;       
  306.                 }
  307.             NBZHI=1;         
  308.                 NBZUO=1;
  309.                 DXZHI=0;
  310.                 DXZUO=1;
  311.                 P0=table[n];
  312.                 delay_ms(5);
  313.         }       
  314. }

  315. ////////4、東西向直行:
  316. void dxzhi1()           //②啟動東西向左轉(zhuǎn)數(shù)碼管顯示:倒計時6秒;同時東西向直行綠燈閃爍3下,滅亮滅亮滅亮共3秒,
  317. {                               
  318.         temp1=6;
  319.         while(1)
  320.         {
  321.                  RED_NANBEIZHI=1;            
  322.                  RED_NANBEIZUO=1;          
  323.                  RED_DONGXIZUO=1;
  324.                  RED_DONGXIZHI=0;
  325.                 if(tt==20)
  326.                 {
  327.                          tt=0;
  328.                         temp1--;
  329.                         if(temp1>=2)
  330.                         {
  331.                         GREEN_DONGXIZHI=~GREEN_DONGXIZHI;
  332.                     }                
  333.                 }
  334.                 n=(temp1)%10;                                 
  335.                 if(temp1==3)
  336.                 {
  337.                  temp1=6;
  338.                  break;       
  339.                 }
  340.             NBZHI=1;         //南北左轉(zhuǎn)
  341.                 NBZUO=1;
  342.                 DXZHI=1;
  343.                 DXZUO=0;
  344.                 P0=table[n];
  345.                 delay_ms(5);
  346.         }       
  347. }

  348. void dxzhi2()                   //然后東西向直行綠燈滅,東西向直行黃燈亮,延時3秒
  349. {                               
  350.         temp1=3;
  351.         while(1)
  352.         {
  353.                  RED_NANBEIZHI=1;            
  354.                  RED_NANBEIZUO=1;
  355.                  RED_DONGXIZHI=0;          
  356.                  GREEN_DONGXIZHI=0;
  357.                  YELLOW_DONGXIZHI=1;
  358.                 if(tt==20)
  359.                 {
  360.                          tt=0;
  361.                         temp1--;                                                       
  362.                 }
  363.                 n=(temp1)%10;                                                          
  364.                 if(temp1==0)
  365.                 {
  366.                  temp1=3;
  367.                  break;       
  368.                 }
  369.             NBZHI=1;         //南北左轉(zhuǎn)
  370.                 NBZUO=1;
  371.                 DXZHI=1;
  372.                 DXZUO=0;
  373.                 P0=table[n];
  374.                 delay_ms(5);
  375.         }               
  376. }

  377. void dxzhi3()                //③東西向左轉(zhuǎn)數(shù)碼管倒計時顯示結(jié)束,關閉;同時東西向直行黃燈滅,東西向直行紅燈亮          ①東西向左轉(zhuǎn)綠燈亮,延時若干秒
  378. {       
  379.         while(1)
  380.         {
  381.                  RED_NANBEIZHI=0;             
  382.                  RED_DONGXIZHI=1;          
  383.                  RED_DONGXIZUO=0;
  384.                  GREEN_DONGXIZUO=1;
  385.                  YELLOW_DONGXIZHI=0;
  386.                 if(tt==20)
  387.                 {
  388.                          tt=0;
  389.                         temp--;                               
  390.                 }
  391.                 n=temp%10;                                                         
  392.                 if(temp==0)
  393.                 {
  394.                  temp=5;
  395.                  break;       
  396.                 }
  397.             NBZHI=1;         //南北左轉(zhuǎn)
  398.                 NBZUO=1;
  399.                 DXZHI=1;
  400.                 DXZUO=0;
  401.                 P0=table[n];
  402.                 delay_ms(5);
  403.         }       
  404. }

  405. ////////5、東西向左轉(zhuǎn):
  406. void dxzuo2()                //②啟動南北向直行數(shù)碼管顯示:倒計時6秒;同時東西向左轉(zhuǎn)綠燈閃爍3下,滅亮滅亮滅亮共3秒,
  407. {                               
  408.         temp1=6;
  409.         while(1)
  410.         {               
  411.                 RED_NANBEIZUO=1;          
  412.                 if(tt==20)
  413.                 {
  414.                          tt=0;
  415.                         temp1--;
  416.                         if(temp1>=2)
  417.                         {
  418.                         GREEN_DONGXIZUO=~GREEN_DONGXIZUO;
  419.                     }        
  420.                 }  
  421.                 n=(temp1)%10;                                                          
  422.                 if(temp1==3)
  423.                 {
  424.                  temp1=6;
  425.                  break;       
  426.                 }
  427.             NBZHI=0;         //南北左轉(zhuǎn)
  428.                 NBZUO=1;
  429.                 DXZHI=1;
  430.                 DXZUO=1;
  431.                 P0=table[n];
  432.                 delay_ms(5);                
  433.         }       
  434. }

  435. void dxzuo3()                 //然后東西向左轉(zhuǎn)綠燈滅,東西向左轉(zhuǎn)黃燈亮,延時3秒
  436. {                               
  437.         temp1=3;
  438.         while(1)
  439.         {
  440.                  RED_NANBEIZHI=1;             
  441.                  RED_NANBEIZUO=1;
  442.                  GREEN_DONGXIZUO=0;          
  443.                  YELLOW_DONGXIZUO=1;
  444.                 if(tt==20)
  445.                 {
  446.                          tt=0;
  447.                         temp1--;       
  448.                 }
  449.                 n=(temp1)%10;                                 
  450.                 if(temp1==0)
  451.                 {
  452.                  temp1=3;
  453.                  break;       
  454.                 }
  455.             NBZHI=0;         //南北左轉(zhuǎn)
  456.                 NBZUO=1;
  457.                 DXZHI=1;
  458.                 DXZUO=1;
  459.                 P0=table[n];
  460.                 delay_ms(5);       
  461.         }       
  462. }

  463. void dxzuo4()                  //③南北向直行數(shù)碼管倒計時顯示結(jié)束,關閉;同時東西向左轉(zhuǎn)黃燈滅,東西向左轉(zhuǎn)紅燈亮          ①南北向直行綠燈亮,延時5秒
  464. {         
  465.         while(1)
  466.         {         
  467.                  RED_NANBEIZHI=0;             
  468.                  RED_DONGXIZHI=1;
  469.                  RED_DONGXIZUO=1;
  470.                  GREEN_NANBEIZHI=1;
  471.                  YELLOW_DONGXIZUO=0;
  472.                         if(tt==20)
  473.                 {
  474.                          tt=0;
  475.                         temp--;                                
  476.                 }
  477.                 n=temp%10;                                                         
  478.                 if(temp==0)
  479.                 {
  480.                  temp=5;
  481.                  break;       
  482.                 }
  483.             NBZHI=0;         //南北左轉(zhuǎn)
  484.                 NBZUO=1;
  485.                 DXZHI=1;
  486.                 DXZUO=1;
  487.                 P0=table[n];
  488.                 delay_ms(5);
  489.         }       
  490. }

  491. void delay_ms(u16 t)
  492. {                       
  493.         u8 i,j;
  494.         for(i=0;i<t;i++)
  495.         for(j=0;j<110;j++);       
  496. }
  497. void int0() interrupt 0          //外部中斷0
  498. {          
  499.         if(temp<10&&temp>=0)
  500.         {
  501.                   temp=temp+2;
  502.         }
  503. }
  504. void int1() interrupt 2          //外部中斷1
  505. {
  506.         if(temp>=0&&temp<10)
  507.         {
  508.           temp=temp-2;
  509.         }
  510. }
  511. void xtimer1() interrupt 1
  512. {                       
  513.         TH0=(65535-50000)/256;
  514.         TL0=(65535-50000)%256;
  515.         tt++;
  516. }
復制代碼



交通燈 - 加強版.zip

96.41 KB, 下載次數(shù): 8, 下載積分: 黑幣 -5

加強版

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91麻豆产精品久久久久久 | 日本一区二区高清不卡 | 欧美精品一区三区 | 精品国产一区二区三区在线观看 | 亚洲精品视 | 亚洲精品国产成人 | 国产一区二区三区网站 | 国产免费一区二区 | 国产性生活一级片 | 国产精品欧美精品 | 亚洲91精品 | 中文字幕一区二区视频 | 97日日碰人人模人人澡分享吧 | 国产欧美一区二区三区日本久久久 | 91秦先生艺校小琴 | 精品国产一区探花在线观看 | 亚洲精品一区二区三区在线观看 | 日本三级网站在线观看 | 天天操天天拍 | 欧美一级一 | 亚洲成人av在线播放 | 国产探花在线精品一区二区 | 精品国产18久久久久久二百 | 国产片一区二区三区 | 久久网亚洲| 激情一区 | 欧美日韩一二三区 | www.夜夜骑.com | 国产黄色大片在线免费观看 | 国产精品特级毛片一区二区三区 | 超碰av在线 | 伊人伊人伊人 | 国产一级片免费在线观看 | 综合久久99 | 久久久久久久久久一区 | av激情影院 | 天天艹| 国产精品毛片一区二区在线看 | 国产日韩亚洲欧美 | 欧美日韩在线一区二区 | 欧美美乳 |