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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 7314|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)交通燈原理圖加pcb工程文件+源程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:350762 發(fā)表于 2019-10-14 20:55 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
Altium Designer畫的交通燈原理圖和PCB圖如下:(51hei附件中可下載工程文件)


單片機(jī)源程序如下:
  1. /***************************************************
  2.      基于單片機(jī)的交通燈設(shè)計(jì)
  3. ***************************************************/
  4. #include <reg52.h> //52系列單片機(jī)頭文件
  5. #define uchar  unsigned char
  6. #define uint  unsigned int
  7. #define ON   0
  8. #define OFF  1
  9. sbit D1 = P1^3; //數(shù)碼管位選引腳
  10. sbit C1 = P1^2;  
  11. sbit B1 = P1^1;  
  12. sbit A1 = P1^0;
  13. sbit NS_GRE = P2^5; //定義LED燈引腳     
  14. sbit NS_YEL = P2^4;
  15. sbit NS_RED = P2^3;   
  16. sbit EW_GRE = P2^2;  
  17. sbit EW_YEL = P2^1;  
  18. sbit EW_RED = P2^0;
  19. uchar flag=1; //方向標(biāo)志位 1南北,0東西           初始化flag=1即南北方向先行
  20. #define YELTime 4   //黃燈時(shí)間 4s
  21. #define EWTime  28+YELTime  //東西紅燈28s
  22. #define NSTime  16+YELTime  //南北紅燈16s
  23. uchar t=EWTime;
  24. uchar tt=0;
  25. sbit Key1 = P3^2;  //按鍵引腳定義
  26. sbit Key2 = P3^4;
  27. uchar  keyflag = 0; //緊急情況標(biāo)志位,1為緊急情況  
  28. uchar table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //共陽數(shù)碼管
  29. #define EW_RED_ON()   do { EW_RED=ON;EW_GRE=OFF;EW_YEL=OFF; } while (0)
  30. #define EW_YEL_ON()   do { EW_RED=OFF;EW_GRE=OFF;EW_YEL=ON; } while (0)
  31. #define EW_GRE_ON()   do { EW_RED=OFF;EW_GRE=ON;EW_YEL=OFF; } while (0)
  32. #define NS_RED_ON()   do { NS_RED=ON;NS_GRE=OFF;NS_YEL=OFF; } while (0)
  33. #define NS_YEL_ON()   do { NS_RED=OFF;NS_GRE=OFF;NS_YEL=ON; } while (0)
  34. #define NS_GRE_ON()   do { NS_RED=OFF;NS_GRE=ON;NS_YEL=OFF; } while (0)
  35. /***************************************************
  36. * 延時(shí)函數(shù)
  37. ***************************************************/
  38. void Delay10uS(uint z)
  39. {
  40.     uint i,a,b;
  41.     for(i=0;i<z;i++){
  42.     for(b=1;b>0;b--)
  43.     for(a=2;a>0;a--);
  44.     }
  45. }
  46. /***************************************************
  47. *               東西方向顯示函數(shù)
  48. *num1 數(shù)值的十位  num2 數(shù)值的各位
  49. ***************************************************/
  50. void display1(uchar num1,uchar num2)
  51. {            
  52.       P0=0XFF;   
  53.       P0=table[num1];      
  54.       A1=ON;   
  55.       Delay10uS(1);     
  56.       A1=OFF;
  57.           P0=0XFF;   
  58.       P0=table[num2];   
  59.       B1=ON;   
  60.       Delay10uS(1);   
  61.       B1=OFF;
  62.           P0=0XFF;  
  63. }
  64. /***************************************************
  65. *               南北方向顯示函數(shù)
  66. *num3 數(shù)值的十位  num4 數(shù)值的各位
  67. ***************************************************/
  68. void display2(uchar num3,uchar num4)
  69. {   
  70.              P0=0XFF;
  71.       P0=table[num3];   
  72.       C1=ON;   
  73.       Delay10uS(1);   
  74.       C1=OFF;
  75.           P0=0XFF;     
  76.       P0=table[num4];     
  77.       D1=ON;      
  78.       Delay10uS(1);   
  79.       D1=OFF;
  80.           P0=0XFF;     
  81. }
  82. /***************************************************
  83. *               定時(shí)器初始化函數(shù)
  84. ***************************************************/
  85. void Timer_Init(void)
  86. {
  87.     TMOD=0x01;             //定時(shí)器工作方式
  88.     TH0=(65536-50000)/256; //定時(shí)器初值     50ms中斷一次
  89.     TL0=(65536-50000)%256;
  90.     ET0=1;                 //使能定時(shí)器中斷
  91.     TR0=1;                 //啟動(dòng)定時(shí)器0
  92. }
  93. /***************************************************
  94. *               按鍵檢測(cè)函數(shù)
  95. ***************************************************/
  96. void Key_Scan()
  97. {
  98.         //--檢測(cè)按鍵1--//
  99.         if (Key1==0)                //檢測(cè)按鍵K1是否按下
  100.         {
  101.                 Delay10uS(200);        //消除抖動(dòng)
  102.                 if (Key1==0)        //再次檢測(cè)按鍵是否按下
  103.                 {
  104.                    keyflag=1;        //將緊急情況標(biāo)志位置1
  105.                 }
  106.         }
  107.                 if (Key2==0)        //檢測(cè)按鍵K1是否按下
  108.         {
  109.                 Delay10uS(200);        //消除抖動(dòng)
  110.                 if (Key2==0)        //再次檢測(cè)按鍵是否按下
  111.                 {
  112.                    keyflag=0;        //將緊急情況標(biāo)志位置0
  113.                    flag=1;                //重新從南北方向開始
  114.                    t=EWTime;
  115.                 }
  116.         }
  117. }

  118. void main()                   //主函數(shù)
  119. {
  120.     Timer_Init();    //定時(shí)器初始化  
  121.     EA=1;            //打開全局中斷   
  122.     NS_GRE = OFF;    //所有的燈都滅   
  123.     NS_YEL = OFF;
  124.     NS_RED = OFF;   
  125.     EW_GRE = OFF;  
  126.     EW_YEL = OFF;  
  127.     EW_RED = OFF;   
  128.     P0 = 0xFF;      //數(shù)碼管顯示滅
  129.         while(1)
  130.         {
  131.                  Key_Scan();
  132.                 if(flag==1)          //南北方向先開始
  133.                 {
  134.                    display1(t/10, t%10);      //東西方向顯示時(shí)間
  135.                    display2(t/10, t%10);      //南北方向顯示時(shí)間
  136.            EW_RED_ON();               //東西方向保持紅燈
  137.                    if(t>4)        //綠燈時(shí)間
  138.                    {
  139.                              NS_GRE_ON();            //南北方向保持綠燈        
  140.                    }
  141.                    if(t>=0&&t<5)        NS_YEL_ON();   //南北方向保持黃燈
  142.                    if(t==0)         //時(shí)間為0
  143.                    {
  144.                      flag=0;        //南北方向結(jié)束,flag=0,開始東西方向
  145.                          t=NSTime;  //加載南北方向紅燈時(shí)間
  146.                    }
  147.                 }
  148.                 if(flag==0)
  149.                 {
  150.                    display1(t/10, t%10);      //東西方向顯示時(shí)間
  151.                    display2(t/10, t%10);      //南北方向顯示時(shí)間
  152.            NS_RED_ON();               //南北方向保持紅燈
  153.                    if(t>4)
  154.                    {
  155.                             EW_GRE_ON();           //東西方向保持綠燈        
  156.                    }
  157.                    if(t>=0&&t<5)        EW_YEL_ON();//東西方向保持黃燈
  158.                    if(t==0)
  159.                    {
  160.                      flag=1;         //東西方向結(jié)束,flag=1,開始南北方向
  161.                          t=EWTime;         //加載東西方向紅燈時(shí)間
  162.                    }
  163.             }
  164.                 if(keyflag == 1)   //如果急停按鍵按下 紅燈全亮 數(shù)碼管顯示關(guān)閉
  165.                 {      
  166.            P0 = 0xFF;           //數(shù)碼管顯示滅
  167.            EW_RED_ON();         //東西方向紅燈
  168.            NS_RED_ON();         //南北方向紅燈
  169.                flag=2;                                //標(biāo)志位flag=2,即東西、南北方向的其他操作停止
  170.          }
  171.    }
  172. }
  173. void timer1(void) interrupt 1
  174. {               
  175.     TH0=(65536-50000)/256;  //重新裝入初值
  176.     TL0=(65536-50000)%256;
  177.         tt++;
  178.         if(tt==20)        //表示1S時(shí)間到了
  179.         {
  180.          tt=0;
  181.          t--;          //數(shù)碼管顯示時(shí)間減一
  182.         }   
  183. }           
復(fù)制代碼

所有資料51hei提供下載:
交通燈pcb原理圖.zip (8.55 MB, 下載次數(shù): 234)


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

使用道具 舉報(bào)

沙發(fā)
ID:624872 發(fā)表于 2019-10-28 08:10 | 只看該作者
這個(gè)正是我需要的 感謝樓主的共享
回復(fù)

使用道具 舉報(bào)

板凳
ID:426861 發(fā)表于 2019-10-28 10:24 | 只看該作者
感謝分享            
回復(fù)

使用道具 舉報(bào)

地板
ID:320566 發(fā)表于 2019-10-28 19:27 | 只看該作者
感謝分享            
回復(fù)

使用道具 舉報(bào)

5#
ID:964399 發(fā)表于 2021-9-6 16:29 | 只看該作者
麻煩問一下,這個(gè)是單層板還是雙層板
回復(fù)

使用道具 舉報(bào)

6#
ID:961087 發(fā)表于 2021-9-14 14:16 | 只看該作者
你好,借鑒你的程序,我發(fā)現(xiàn)我燒到板子上之后發(fā)現(xiàn)數(shù)碼管顯示有問題,有時(shí)候好像顯示不出來,有時(shí)候亂碼。不知道什么原因。
#include <REGX52.H>
#define uchar  unsigned char
#define uint  unsigned int
#define ON   0
#define OFF  1
sbit dula=P2^6;
sbit wela=P2^7;
sbit NS_GRE = P1^5;     
sbit NS_YEL = P1^4;
sbit NS_RED = P1^3;   
sbit EW_GRE = P1^2;  
sbit EW_YEL = P1^1;  
sbit EW_RED = P1^0;
uchar flag=1;
#define YELTime 4   
#define EWTime  28+YELTime  
#define NSTime  16+YELTime  
uchar t=EWTime;
uchar tt=0;
sbit Key1=P3^4;  
sbit Key2=P3^5;
uchar keyflag=0;  
uchar table[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
#define EW_RED_ON()   do { EW_RED=ON;EW_GRE=OFF;EW_YEL=OFF; } while (0)
#define EW_YEL_ON()   do { EW_RED=OFF;EW_GRE=OFF;EW_YEL=ON; } while (0)
#define EW_GRE_ON()   do { EW_RED=OFF;EW_GRE=ON;EW_YEL=OFF; } while (0)
#define NS_RED_ON()   do { NS_RED=ON;NS_GRE=OFF;NS_YEL=OFF; } while (0)
#define NS_YEL_ON()   do { NS_RED=OFF;NS_GRE=OFF;NS_YEL=ON; } while (0)
#define NS_GRE_ON()   do { NS_RED=OFF;NS_GRE=ON;NS_YEL=OFF; } while (0)
void delayms(uint xms)
{
        uint i,j;
        for(i=xms;i>0;i--)
        for(j=110;j>0;j--);
}
void display1(uchar num1,uchar num2)
{     
                P0=0xff;
                wela=1;
                P0=0xfc;
                wela=0;
               
                P0=0x00;
                dula=1;
                P0=table[num1];
                dula=0;
                delayms(3);
               
                P0=0xff;
                wela=1;
                P0=0xfd;
                wela=0;
               
                P0=0x00;
                dula=1;
                P0=table[num2];
                dula=0;
                delayms(3);
}

void display2(uchar num3,uchar num4)
{   
         P0=0xff;
         wela=1;
         P0=0xef;
         wela=0;
         
         P0=0x00;
         dula=1;
         P0=table[num3];
         dula=0;
         delayms(3);
         
         P0=0xff;
         wela=1;
         P0=0xdf;
         wela=0;
         
         P0=0x00;
         dula=1;
         P0=table[num4];
         dula=0;
         delayms(3);
}

void INIT(void)
{
        TMOD=0x01;            
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        ET0=1;                 
        TR0=1;
}

void KeyScan()
{        
        if (Key1==0)               
        {
                delayms(10);         
                if (Key1==0)      
                {
                        keyflag=1;      
                }
        }
        if (Key2==0)//¸′λ°′¼ü »Øμ½3õê¼×′쬠  
        {
                delayms(10);
                if (Key2==0)
                {
                        keyflag=0;        
                        flag=1;               
                        t=EWTime;
                }
        }
}

void main()                  
{
        INIT();      
        EA=1;               
        NS_GRE = OFF;        
        NS_YEL = OFF;
        NS_RED = OFF;   
        EW_GRE = OFF;  
        EW_YEL = OFF;  
        EW_RED = OFF;   
        P0 = 0xFF;      
  while(1)
  {
                KeyScan();
                if(flag==1)         
                {
                        display1(t/10, t%10);      
                        display2(t/10, t%10);      
                        EW_RED_ON();
                        NS_GRE_ON();
                if(t>4)        
                {
                        NS_GRE_ON();                    
                }
                if(t>=0&&t<5)    NS_YEL_ON();   
                if(t==0)        
                {
                        flag=0;        
                        t=NSTime;  
                }
                }
                if(flag==0)
                {
                        display1(t/10, t%10);      
                        display2(t/10, t%10);      
                        NS_RED_ON();               
                        if(t>4)
                        {
                                EW_GRE_ON();                  
                        }
                        if(t>=0&&t<5)        EW_YEL_ON();
                        if(t==0)
                        {
                                flag=1;
                                t=EWTime;         
                        }
                }
                if(keyflag == 1)
                {      
                        P0 = 0xFF;           
                        EW_RED_ON();        
                        NS_RED_ON();         
                        flag=2;                              
                }
        }
}
void timer1(void) interrupt 1
{               
        TH0=(65536-50000)/256;  
        TL0=(65536-50000)%256;
        tt++;
        if(tt==20)        
        {
                tt=0;
                t--;         
        }   
}           
回復(fù)

使用道具 舉報(bào)

7#
ID:961087 發(fā)表于 2021-9-14 17:12 | 只看該作者
王披風(fēng) 發(fā)表于 2021-9-14 14:16
你好,借鑒你的程序,我發(fā)現(xiàn)我燒到板子上之后發(fā)現(xiàn)數(shù)碼管顯示有問題,有時(shí)候好像顯示不出來,有時(shí)候亂碼。不 ...

已經(jīng)解決了,我用數(shù)組顯示的位選,成功了,感謝。
回復(fù)

使用道具 舉報(bào)

8#
ID:1059607 發(fā)表于 2022-12-29 14:38 | 只看該作者
樓主有封裝跟庫沒
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: av中文字幕在线 | 天天天堂| 久久久久国产一区二区三区四区 | 99re热精品视频 | 中文字幕第一页在线 | 在线观看一区 | 日韩av一二三区 | 中国一级特黄真人毛片 | 欧美日韩综合视频 | 久久一日本道色综合久久 | 美国十次成人欧美色导视频 | 中文字幕一区二区三区精彩视频 | 色综合天天综合网国产成人网 | 成人精品一区亚洲午夜久久久 | 超碰97免费在线 | 精品国产欧美 | 精品免费国产视频 | 国产高清精品一区二区三区 | 伊人一区 | 91在线视频 | 天天操一操 | 亚洲视频在线一区 | av一级| 亚洲视频不卡 | 一级毛片视频 | 国产婷婷精品 | 国产操操操 | 国产精品1区 | 亚洲高清在线 | 国产成人综合久久 | 精品久久久久久久久久久久久久久久久 | 午夜影院在线观看免费 | 国产综合精品 | 操一草| 美女一级毛片 | 在线中文字幕av | 欧美成人影院在线 | 亚洲一区二区三区免费在线观看 | 97视频在线免费 | 久久爱黑人激情av摘花 | 日韩在线小视频 |