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

QQ登錄

只需一步,快速開始

搜索
查看: 2874|回復(fù): 4
收起左側(cè)

基于51單片機(jī)的交通燈設(shè)計(jì)(源碼+原理圖+proteus仿真)

[復(fù)制鏈接]
ID:818537 發(fā)表于 2024-6-11 03:39 | 顯示全部樓層 |閱讀模式
基于51單片機(jī)的交通燈設(shè)計(jì)
用的芯片是:STC89C51
一、基本要求:
1、可以通過按鍵修改模式
2、默認(rèn)情況下進(jìn)入交通燈模式
3、模式一為夜間模式,黃燈閃爍
4、模式二禁止通行,紅燈閃爍
5、可以方便的修改倒計(jì)時(shí)時(shí)間和黃燈時(shí)間

仿真照片.png


更多源代碼和工程見附件
S001基于51單片機(jī)的十字路口交通燈設(shè)計(jì).7z (1.88 MB, 下載次數(shù): 74)

  1. #include <MAIN.H>
  2. u8 yeltime;//黃燈時(shí)間
  3. u8 sflag=0;//秒標(biāo)志位
  4. u8 shiftflag=0;//哪個(gè)方向上有黃燈結(jié)束0是東西1是南北
  5. u8 time;//一共的倒計(jì)時(shí),基準(zhǔn)時(shí)間為南北
  6. //此時(shí),南北(綠黃紅)20秒,另外還要加黃燈三秒,東西23秒到0(紅綠黃)
  7. u8 NStime ;//南北方向的燈
  8. u8 WEtime ;//東西和黃燈
  9. u8 mode =0;//0是正常模式,1是夜間模式,2是禁止通行模式

  10. #define otime 30    //設(shè)置初始燈時(shí)間
  11. #define oyeltime 3 //設(shè)置黃燈時(shí)間

  12. sbit key = P2^5;
  13. sbit mode0led = P2^0;
  14. sbit mode1led = P2^1;
  15. sbit mode2led = P2^2;


  16. void InitTimer0(void)
  17. {
  18.     TMOD = 0x01;
  19.     TH0 = 0x0D8;
  20.     TL0 = 0x0F0;
  21.     EA = 1;
  22.     ET0 = 1;
  23.     TR0 = 1;
  24. }



  25. void main(void)
  26. {
  27.         
  28.   InitTimer0(); //初始化定時(shí)器0,開中斷10ms
  29.         time=otime; //使用初始時(shí)間賦值給計(jì)時(shí)器
  30.         yeltime=oyeltime; //使用初始黃燈時(shí)間賦值給黃燈計(jì)時(shí)器
  31.         NStime=time;//設(shè)置南北計(jì)時(shí)器為初始時(shí)間加黃燈時(shí)間
  32.         WEtime=time+yeltime;//設(shè)置東西計(jì)時(shí)器
  33.         NSLedGre=1;NSLedYel=1;NSLedRed=0;//打開南北綠燈
  34.         WELedGre=0;WELedYel=1;WELedRed=1;//打開東西黃燈
  35.         key=1;
  36.         while(1)
  37.         {
  38.                 if(mode==0)
  39.                 {
  40.                         mode0led=0;mode1led=1;mode2led=1;
  41.                         if(sflag==1)//如果秒計(jì)時(shí)器溢出
  42.                 {
  43.                         sflag=0; //清除標(biāo)記
  44.                         NStime--;WEtime--;//時(shí)間減一
  45.                         
  46.                         if(NStime!=0&&WEtime==0) //此時(shí)東西時(shí)間歸零但是南北還有殘余秒數(shù),并開始轉(zhuǎn)入黃燈
  47.                         {
  48.                                 WEtime=yeltime;//把黃燈時(shí)間賦值給南北
  49.                                 NSLedGre=1;NSLedYel=0;NSLedRed=1;//南北黃燈亮起
  50.                                 WELedGre=1;WELedYel=1;WELedRed=0;        //東西紅燈亮起
  51.                         }
  52.                         else if(NStime==0&&WEtime==0) //四個(gè)方向時(shí)間都?xì)w零
  53.                         {
  54.                                 if(shiftflag==1)//標(biāo)記現(xiàn)在哪個(gè)黃燈結(jié)束,選擇通行
  55.                                 {
  56.                                         shiftflag=0;//恢復(fù)標(biāo)志位,此時(shí)東西通行
  57.                                         NStime=time;
  58.                                         WEtime=time+yeltime;
  59.                                         NSLedGre=1;NSLedYel=1;NSLedRed=0;
  60.                                         WELedGre=0;WELedYel=1;WELedRed=1;        
  61.                                 }
  62.                                 else
  63.                                 {
  64.                                         shiftflag=1;//恢復(fù)標(biāo)志位,此時(shí)南北通行
  65.                                         NStime=time+yeltime;
  66.                                         WEtime=time;
  67.                                         NSLedGre=0;NSLedYel=1;NSLedRed=1;
  68.                                   WELedGre=1;WELedYel=1;WELedRed=0;        
  69.                                 }
  70.                         }
  71.                         else if(NStime==0&&WEtime!=0)////此時(shí)南北時(shí)間歸零但是東西還有殘余秒數(shù),并開始轉(zhuǎn)入黃燈
  72.                         {
  73.                                 NStime=yeltime;//把黃燈時(shí)間賦值給南北
  74.                                 NSLedGre=1;NSLedYel=1;NSLedRed=0;//南北紅燈亮起
  75.                                 WELedGre=1;WELedYel=0;WELedRed=1;//東西黃燈亮起
  76.                         }
  77.                         
  78.                 }
  79.         }
  80.                 else if(mode==1)
  81.                 {
  82.                         mode0led=1;mode1led=0;mode2led=1;
  83.                         if(sflag==1)//如果秒計(jì)時(shí)器溢出
  84.                         {

  85.                                 P0=0xFF;
  86.                                 sflag=0; //清除標(biāo)記
  87.                                 NSLedGre=1;NSLedYel=~NSLedYel;NSLedRed=1;//南北紅燈亮起
  88.                                 WELedGre=1;WELedYel=~WELedYel;WELedRed=1;//東西黃燈亮起
  89.                         }
  90.                 }
  91.                 else if(mode==2)
  92.                 {
  93.                         mode0led=1;mode1led=1;mode2led=0;
  94.                         if(sflag==1)//如果秒計(jì)時(shí)器溢出
  95.                         {

  96.                                 P0=0xFF;
  97.                                 sflag=0; //清除標(biāo)記
  98.                                 NSLedGre=1;NSLedYel=1;NSLedRed=~NSLedRed;//南北紅燈亮起
  99.                                 WELedGre=1;WELedYel=1;WELedRed=~WELedRed;//東西黃燈亮起
  100.                         }
  101.                 }
  102.                 //
  103.                
  104.         }
  105. }

  106. void Timer0Interrupt(void) interrupt 1 //12T@10ms
  107. {
  108.         static u8 timecount=0;
  109.         static u8 keycount=0;
  110.         TH0 = 0x0D8;
  111.         TL0 = 0x0F0;
  112.         timecount++;
  113.         keycount++;
  114.         
  115.         if(keycount==25)
  116.         {
  117.                 keycount=0;
  118.                 if(key==0)
  119.         {
  120.                 mode++;
  121.                 if(mode==3)
  122.                 {
  123.                         mode=0;
  124.                 }
  125.         }
  126.         }
  127.         if(timecount==100)
  128.         {
  129.                 timecount=0;
  130.                 sflag=1;
  131.         }
  132.         if(mode==0)
  133.         {
  134.                 showtube(NStime,WEtime);
  135.         }
  136.   //add your code here!
  137. }
復(fù)制代碼



評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:1125032 發(fā)表于 2024-6-17 08:52 來自手機(jī) | 顯示全部樓層
數(shù)碼管不亮是什么原因啊
回復(fù)

使用道具 舉報(bào)

ID:818537 發(fā)表于 2024-6-30 06:08 | 顯示全部樓層
1662136574 發(fā)表于 2024-6-17 08:52
數(shù)碼管不亮是什么原因啊

看下你什么版本,我這個(gè)8.13版本ok的
回復(fù)

使用道具 舉報(bào)

ID:1126459 發(fā)表于 2024-7-1 12:08 | 顯示全部樓層
這個(gè)原理圖是可以直接打pcb板嗎
回復(fù)

使用道具 舉報(bào)

ID:818537 發(fā)表于 2024-9-26 00:13 | 顯示全部樓層
swy1232 發(fā)表于 2024-7-1 12:08
這個(gè)原理圖是可以直接打pcb板嗎

不行,還需要修改
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表