欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 51單片機(jī)+74hc245驅(qū)動(dòng)交通燈控制系統(tǒng)原理圖和源代碼 [打印本頁(yè)]

作者: 戴小翔    時(shí)間: 2017-8-5 16:35
標(biāo)題: 51單片機(jī)+74hc245驅(qū)動(dòng)交通燈控制系統(tǒng)原理圖和源代碼
基于51單片機(jī)最小系統(tǒng)的交通的設(shè)計(jì)系統(tǒng),驅(qū)動(dòng)芯片用的74hc245


74hc245驅(qū)動(dòng)交通燈元件清單
1.        9*15萬(wàn)用板
2.        STC89C51
3.        40P IC座
4.        12M晶振
5.        30P瓷片電容 *2
6.        10k電阻
7.        103排阻
8.        102排阻
9.        10uF電容
10.    0.36寸兩位一體共陰數(shù)碼管*4
11.    發(fā)光二極管 紅 綠 黃  各*4
12.    20腳座
13.    74hc245
14.    DC座
15.    按鍵*9
16.    自鎖開(kāi)關(guān)      
17.    導(dǎo)線若干
18.    焊錫若干
19.    USB電源線(DC接頭+電池盒)

加蜂鳴器:
209012
21. 2.2k電阻
23.蜂鳴器

單片機(jī)源程序如下:
  1. #include <reg51.h>                                //頭文件
  2. #define uchar unsigned char
  3. #define uint  unsigned int                //宏定義

  4. uchar data buf[4];                                        //秒顯示的變量
  5. uchar data sec_dx=20;                          //東西數(shù)默認(rèn)
  6. uchar data sec_nb=30;                        //南北默認(rèn)值
  7. uchar data set_timedx=20;                //設(shè)置東西方向的時(shí)間
  8. uchar data set_timenb=30;                //設(shè)置南北方向的時(shí)間
  9. int n;
  10. uchar data countt0,countt1;//定時(shí)器0中斷次數(shù)
  11. //定義6組開(kāi)關(guān)
  12. sbit  k4=P3^7;      //切換方向
  13. sbit  k1=P3^5;                //時(shí)間加
  14. sbit  k2=P3^6;                //時(shí)間減
  15. sbit  k3=P3^4;                //確認(rèn)
  16. sbit  k5=P3^1;                //禁止
  17. sbit  k6=P1^5;                //夜間模式


  18. sbit Red_nb=P2^6;                //南北紅燈標(biāo)志
  19. sbit Yellow_nb=P2^5;        //南北黃燈標(biāo)志
  20. sbit Green_nb=P2^4;     //南北綠燈標(biāo)志

  21. sbit Red_dx=P2^3;                //東西紅燈標(biāo)志
  22. sbit Yellow_dx=P2^2;        //東西黃燈標(biāo)志
  23. sbit Green_dx=P2^1;                //東西綠燈標(biāo)志
  24.                
  25. bit set=0;                                //調(diào)時(shí)方向切換鍵標(biāo)志 =1時(shí),南北,=0時(shí),東西
  26. bit dx_nb=0;                        //東西南北控制位
  27. bit shanruo=0;                        //閃爍標(biāo)志位
  28. bit yejian=0;                        //夜間黃燈閃爍標(biāo)志位

  29. uchar code table[11]={        //共陰極字型碼
  30.         0x3f,  //--0
  31.         0x06,  //--1
  32.         0x5b,  //--2
  33.         0x4f,  //--3
  34.         0x66,  //--4
  35.         0x6d,  //--5
  36.         0x7d,  //--6
  37.         0x07,  //--7
  38.         0x7f,  //--8
  39.         0x6f,  //--9
  40.         0x00   //--NULL
  41. };

  42. //函數(shù)的聲明部分
  43. void delay(int ms);                        //延時(shí)子程序
  44. void key();                                        //按鍵掃描子程序
  45. void key_to1();                                //鍵處理子程序
  46. void key_to2();
  47. void key_to3();
  48. void display();                                //顯示子程序
  49. void logo();                                   //開(kāi)機(jī)LOGO
  50. void Buzzer();
  51. //主程序
  52. void main()
  53. {
  54.         TMOD=0X11;                                           //定時(shí)器設(shè)置
  55.         TH1=0X3C;               
  56.         TL1=0XB0;
  57.         TH0=0X3C;                                        //定時(shí)器0置初值 0.05S
  58.         TL0=0XB0;
  59.         EA=1;                                                //開(kāi)總中斷
  60.         ET0=1;                                                //定時(shí)器0中斷開(kāi)啟
  61.         ET1=1;                                           //定時(shí)器1中斷開(kāi)啟
  62.         TR0=1;                                                //啟動(dòng)定時(shí)0
  63.         TR1=0;                                                         //關(guān)閉定時(shí)1
  64.         EX0=1;                                                //開(kāi)外部中斷0
  65.         EX1=1;                                                //開(kāi)外部中斷1
  66.     logo();                                                //開(kāi)機(jī)初始化
  67.         P2=0Xc3;                                        // 開(kāi)始默認(rèn)狀態(tài),東西綠燈,南北黃燈   
  68.     sec_nb=sec_dx+5;                         //默認(rèn)南北通行時(shí)間比東西多5秒
  69.         while(1)                                          //主循環(huán)
  70.         {         
  71.                 key();                                         //調(diào)用按鍵掃描程序
  72.                 display();                                 //調(diào)用顯示程序
  73.         }        
  74. }
  75. //函數(shù)的定義部分
  76. void key(void)        //按鍵掃描子程序
  77. {         
  78.         if(k1!=1)                                                        //當(dāng)K1(時(shí)間加)按下時(shí)
  79.         {
  80.                 display();                                       //調(diào)用顯示,用于延時(shí)消抖
  81.                 if(k1!=1)                                                        //如果確定按下
  82.                 {
  83.                           TR0=0;                                               //關(guān)定時(shí)器        
  84.                         shanruo=0;                                        //閃爍標(biāo)志位關(guān)
  85.                         P2=0x00;                                        //滅顯示
  86.                         TR1=0;                                                        //啟動(dòng)定時(shí)1
  87.                         if(set==0)                                        //設(shè)置鍵按下
  88.                                 set_timedx++;                   //南北加1S
  89.                         else
  90.                                 set_timenb++;                    //東西加1S
  91.                         if(set_timenb==100)
  92.                                 set_timenb=1;
  93.                         if(        set_timedx==100)
  94.                                 set_timedx=1;                   //加到100置1
  95.                         sec_nb=set_timenb ;                 //設(shè)置的數(shù)值賦給東西南北
  96.                         sec_dx=set_timedx;                        
  97.                           do
  98.                          {
  99.                                 display();                                 //調(diào)用顯示,用于延時(shí)
  100.                         }
  101.                         while(k1!=1);                         //等待按鍵釋放
  102.                 }
  103.         }

  104.         if(k2!=1)                                                        //當(dāng)K2(時(shí)間減)按鍵按下時(shí)
  105.         {               
  106.                 display();                                       //調(diào)用顯示,用于延時(shí)消抖  
  107.                 if(k2!=1)                                                //如果確定按下
  108.                 {        
  109.                          TR0=0;                                         //關(guān)定時(shí)器0        
  110.                         shanruo=0;                                        //閃爍標(biāo)志位關(guān)
  111.                         P2=0x00;                                        //滅顯示
  112.                         TR1=0;                                                //關(guān)定時(shí)器1        
  113.                         if(set==0)
  114.                                 set_timedx--;                          //南北減1S
  115.                         else
  116.                                 set_timenb--;                          //東西減1S
  117.                         if(set_timenb==0)
  118.                                 set_timenb=99;        
  119.                         if(        set_timedx==0 )
  120.                                 set_timedx=99;                   //減到1重置99
  121.                         sec_nb=set_timenb ;                         //設(shè)置的數(shù)值賦給東西南北
  122.                         sec_dx=set_timedx;
  123.                           do        
  124.                     {
  125.                                 display();                       //調(diào)用顯示,用于延時(shí)
  126.                         }
  127.                         while(k2!=1);                           //等待按鍵釋放
  128.                 }
  129.         }

  130.         if(k3!=1)                                                        //當(dāng)K3(確認(rèn))鍵按下時(shí)
  131.         {        
  132.                 display();                                       //調(diào)用顯示,用于延時(shí)消抖
  133.                 if(k3!=1)                                                //如果確定按下
  134.                 {
  135.                         TR0=1;                                                  //啟動(dòng)定時(shí)器0
  136.                         sec_nb=set_timenb;                                //從中斷回復(fù),仍顯示設(shè)置過(guò)的數(shù)值
  137.                         sec_dx=set_timedx;                                //顯示設(shè)置過(guò)的時(shí)間
  138.                         TR1=0;                                                        //關(guān)定時(shí)器1        
  139.                         if(set==0)                                                //時(shí)間倒時(shí)到0時(shí)
  140.                         {
  141.                                 P2=0X00;                                         //滅顯示
  142.                                 Green_dx=1;                                                //東西綠燈亮
  143.                                 Red_nb=1;                                        //南北紅燈亮
  144.                                 sec_nb=sec_dx+5;                         //回到初值
  145.                         }
  146.                         else
  147.                         {
  148.                                 P2=0x00;                                        //南北綠燈,東西紅燈
  149.                                 Green_nb=1;
  150.                                 Red_dx=1;
  151.                                 sec_dx=sec_nb+5;
  152.                         }
  153.                 }
  154.         }
  155.          
  156.         if(k4!=1)                                                        //當(dāng)K4(切換)鍵按下
  157.     {
  158.                 display();                                       //調(diào)用顯示,用于延時(shí)消抖
  159.                 if(k4!=1)                                                //如果確定按下
  160.                 {  
  161.                          TR0=0;                                                //關(guān)定時(shí)器0        
  162.                         set=!set;                                        //取反set標(biāo)志位,以切換調(diào)節(jié)方向
  163.                         TR1=0;                                                //關(guān)定時(shí)器1
  164.                         dx_nb=set;
  165.                         do
  166.                         {
  167.                                 display();                            //調(diào)用顯示,用于延時(shí)
  168.                         }                                
  169.                         while(k4!=1);                          //等待按鍵釋放
  170.                 }
  171.         }        

  172.         if(k5!=1)                                                        //當(dāng)K5(禁止)鍵按下時(shí)
  173.         {
  174.                    display();                                       //調(diào)用顯示,用于延時(shí)消抖
  175.                    if(k5!=1)                                                //如果確定按下
  176.                    {         
  177.                     TR0=0;                                                //關(guān)定時(shí)器
  178.                         P2=0x00;                                        //滅顯示
  179.                         Red_dx=1;
  180.                         Red_nb=1;                                        //全部置紅燈
  181.                         TR1=0;
  182.                         sec_dx=00;                                        //四個(gè)方向的時(shí)間都為00
  183.                         sec_nb=00;
  184.                         do
  185.                         {
  186.                                 display();                                 //調(diào)用顯示,用于延時(shí)
  187.                         }        
  188.                         while(k5!=1);                        //等待按鍵釋放        
  189.                    }
  190.         }
  191.         if(k6!=1)                                                        //當(dāng)K6(夜間模式)按下
  192.         {
  193.                    display();                                       //調(diào)用顯示,用于延時(shí)消抖
  194.                    if(k6!=1)                                                //如果確定按下
  195.                    {         
  196.                     TR0=0;                                                //關(guān)定時(shí)器
  197.                         P2=0x00;
  198.                         TR1=1;
  199.                         sec_dx=00;                                        //四個(gè)方向的時(shí)間都為00
  200.                         sec_nb=00;
  201.                         do
  202.                         {
  203.                                 display();                           //調(diào)用顯示,用于延時(shí)
  204.                         }        
  205.                         while(k6!=1);                        //等待按鍵釋放        
  206.                    }
  207.         }
  208. }
  209. void display(void) //顯示子程序
  210. {               
  211.         buf[1]=sec_nb/10;                 //第1位 東西秒十位
  212.         buf[2]=sec_nb%10;                 //第2位 東西秒個(gè)位
  213.         buf[3]=sec_dx/10;                 //第3位 南北秒十位
  214.         buf[0]=sec_dx%10;                 //第4位 南北秒個(gè)位               
  215.         P1=0xff;                          // 初始燈為滅的
  216.         P0=0x00;                                 ////滅顯示
  217.         P1=0xfe;                           //片選LED1
  218.         P0=table[buf[1]];                //送東西時(shí)間十位的數(shù)碼管編碼                        
  219.         delay(1);                                //延時(shí)
  220.         P1=0xff;                                //關(guān)顯示
  221.         P0=0x00;                                //滅顯示
  222.                                                    
  223.         P1=0xfd;                     //片選LED2
  224.         P0=table[buf[2]];                 //送東西時(shí)間個(gè)位的數(shù)碼管編碼
  225.         delay(1);                                 //延時(shí)
  226.         P1=0xff;                                //關(guān)顯示
  227.         P0=0x00;                                //關(guān)顯示
  228.         P1=0Xfb;                                  //片選LED3
  229.         P0=table[buf[3]];                //送南北時(shí)間十位的數(shù)碼管編碼
  230.         delay(1);                                //延時(shí)
  231.         P1=0xff;                                 //關(guān)顯示
  232.         P0=0x00;                                 //關(guān)顯示
  233.         P1=0Xf7;                                 //片選LED4        
  234.         P0=table[buf[0]];                //送南北時(shí)間個(gè)位的數(shù)碼管編碼
  235.         delay(1);                                //延時(shí)
  236. }

  237. void time0(void) interrupt 1 using 1          //定時(shí)中斷子程序
  238. {
  239.         TH0=0X3C;                                                        //重賦初值
  240.         TL0=0XB0;                                                        //12m晶振50ms//重賦初值
  241.         TR0=1;                                                                //重新啟動(dòng)定時(shí)器
  242.         countt0++;                                                        //軟件計(jì)數(shù)加1
  243.         if(countt0==10)                                                //加到10也就是半秒
  244.         {
  245.                 if((sec_nb<=5)&&(dx_nb==0)&&(shanruo==1))                  //東西黃燈閃               
  246.         {
  247.                         Green_dx=0;
  248.                         Yellow_dx=0;
  249.                 }                                                   
  250.             if((sec_dx<=5)&&(dx_nb==1)&&(shanruo==1))                  //南北黃燈閃               
  251.         {  
  252.                         Green_nb=0;
  253.                         Yellow_nb=0;
  254.                 }        
  255.         }
  256.                
  257.         if(countt0==20)                                  // 定時(shí)器中斷次數(shù)=20時(shí)(即1秒時(shí))
  258.         {        countt0=0;                                                //清零計(jì)數(shù)器
  259.                 sec_dx--;                                                //東西時(shí)間減1
  260.                 sec_nb--;                                                //南北時(shí)間減1

  261.                 if((sec_nb<=5)&&(dx_nb==0)&&(shanruo==1))                  //東西黃燈閃               
  262.         {
  263.                         Green_dx=0;
  264.                         Yellow_dx=1;
  265.                 }                                                   
  266.             if((sec_dx<=5)&&(dx_nb==1)&&(shanruo==1))                  //南北黃燈閃               
  267.         {  
  268.                         Green_nb=0;
  269.                         Yellow_nb=1;
  270.                 }                                                                 
  271.                 if(sec_dx==0&&sec_nb==5)                 //當(dāng)東西倒計(jì)時(shí)到0時(shí),重置5秒,用于黃燈閃爍時(shí)間   
  272.                 {
  273.                         sec_dx=5;
  274.                         shanruo=1;
  275.                 }
  276.                 if(sec_nb==0&&sec_dx==5)                //當(dāng)南北倒計(jì)時(shí)到0時(shí),重置5秒,用于黃燈閃爍時(shí)間   
  277.                 {
  278.                         sec_nb=5;
  279.                         shanruo=1;
  280.                 }
  281.                 if(dx_nb==0&&sec_nb==0)                        //當(dāng)黃燈閃爍時(shí)間倒計(jì)時(shí)到0時(shí),
  282.                 {
  283.                         P2=0x00;                                        //重置東西南背方向的紅綠燈
  284.                         Green_nb=1;
  285.                         Red_dx=1;
  286.                         dx_nb=!dx_nb;
  287.                         shanruo=0;
  288.                         sec_nb=set_timenb;                        //重賦南北方向的起始值
  289.                         sec_dx=set_timenb+5;                //重賦東西方向的起始值
  290.                 }               
  291.                 if(dx_nb==1&&sec_dx==0)                        //當(dāng)黃燈閃爍時(shí)間到
  292.                 {
  293.                         P2=0X00;                                        //重置東西南北的紅綠燈狀態(tài)
  294.                         Green_dx=1;                                         //東西綠燈亮
  295.                         Red_nb=1;                                         //南北紅燈亮
  296.                         dx_nb=!dx_nb;                                 //取反
  297.                         shanruo=0;                                        //閃爍
  298.                         sec_dx=set_timedx;                        //重賦東西方向的起始值
  299.                         sec_nb=set_timedx+5;                //重賦南北方向的起始值
  300.                 }
  301.         }        
  302. }
  303. void time1(void) interrupt 3         //定時(shí)中斷子程序
  304. {
  305.         TH1=0X3C;                                                        //重賦初值
  306.         TL1=0XB0;                                                        //12m晶振50ms//重賦初值
  307.         countt1++;                                                        //軟件計(jì)數(shù)加1
  308.         if(countt1==10)                                           // 定時(shí)器中斷次數(shù)=10時(shí)(即0.5秒)
  309.         {
  310.                         Yellow_nb=0;                                //南北黃燈滅
  311.                         Yellow_dx=0;                                //東西黃燈滅
  312.         }
  313.         if(countt1==20)                                  // 定時(shí)器中斷次數(shù)=20時(shí)(即1秒時(shí))
  314.         {        countt1=0;                                                //清零計(jì)數(shù)器
  315.                         Yellow_nb=1;                                        //南北黃燈亮
  316.                         Yellow_dx=1;                                  //東西黃燈亮
  317.         }        
  318. }


  319. //外部中斷0
  320. void int0(void) interrupt 0 using 1           //只允許東西通行
  321. {
  322.         TR0=0;                                                                //關(guān)定時(shí)器0
  323.         TR1=0;                                                                //關(guān)定時(shí)器1
  324.         P2=0x00;                                                        //滅顯示
  325. ……………………

  326. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
以下幾個(gè)文檔下載:
程序.docx (19.72 KB, 下載次數(shù): 70)
245驅(qū)動(dòng)交通燈原件清單.doc (11.5 KB, 下載次數(shù): 29)
245驅(qū)動(dòng)交通燈原理圖.doc (121 KB, 下載次數(shù): 42)
原理圖.pdf (91.8 KB, 下載次數(shù): 44)



作者: a1025743265    時(shí)間: 2018-11-19 21:33
學(xué)習(xí)學(xué)習(xí)。
作者: linmingsheng    時(shí)間: 2020-4-3 11:43
下載來(lái)學(xué)習(xí)一下!感謝分享!
作者: 難搞啊    時(shí)間: 2020-6-16 00:26
想下載學(xué)習(xí)一下
作者: 2215129928    時(shí)間: 2022-5-24 15:43
誰(shuí)能分享一下 proteus的原理圖 或者proteus內(nèi)部的元件清單呀




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