|
第一次自己做無流量監控的交通燈系統設計,基于51單片機做的,自己發帖,求鼓勵。
這個是老師讓做的交通燈仿真系統,無流量監控
一共橫向豎向兩路,紅綠黃燈,紅燈30S 綠燈加黃燈30秒,綠燈25秒。
人行道紅綠燈個8個,共16個。
采用定時器中斷。
每個路口兩位數碼管。
程序比較傻瓜,
如果有好的想法,求指點。
單片機仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載):
jiaotongdeng.png (220.63 KB, 下載次數: 127)
下載附件
仿真圖
2017-5-17 19:28 上傳
交通燈cx.jpg (95.74 KB, 下載次數: 129)
下載附件
程序圖
2017-5-17 19:22 上傳
0.png (65.84 KB, 下載次數: 123)
下載附件
2017-5-17 22:28 上傳
單片機源程序如下:
- #include<reg52.h>
- #define uint unsigned int
- #define uchar unsigned char
- sbit shen_lu1=P1^2;
- sbit shen_lu2=P1^3;
- sbit sheng_lu1=P1^4;
- sbit sheng_lu2=P1^5;
- //紅綠燈口定義
- sbit sheng_red=P2^2;
- sbit shen_green=P2^3;
- sbit sheng_green=P2^0;
- sbit shen_red=P2^5;
- sbit shang_red=P1^0;
- sbit xia_red=P2^6;
- sbit zuo_red=P2^7;
- sbit you_red=P1^1;
- sbit shen_yellow=P2^4;
- sbit sheng_yellow=P2^1;
- //定義全局變量
- uchar code digcode[10] = {
- 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- uchar DisplayData[8];
- uint Second,Time;
- //申明全局函數
- void DigDisplay(); //動態顯示函數
- void Timer0Cofig();
- void Delay(uint z);
- void main()
- {
- P2=0X00;
- P1=0X00;
- P0=0X00;
- P3=0X00;
- Timer0Cofig();
- while(1)
- {
- if(Second>60)
- {
- Second=0;
- }
- if(Second < 25)
- {
- shen_green=0;
- sheng_red=0;
- shang_red=0;
- xia_red=0;
- shen_yellow=0;
- //升路通行
- sheng_green=1; //升路綠燈亮
- shen_red=1; //申路紅燈亮 上下綠燈亮
- zuo_red=1; //左紅燈亮
- you_red=1; //右紅燈亮
- }
- else if (Second < 30) //黃燈等待切換時間5s
- {
- sheng_green=0;
- shen_red=1;
- sheng_yellow=1;
- zuo_red=1;
- you_red=1;
- }
- else if (Second < 55)
- {
- //申路通行
- sheng_green=0;
- shen_red=0;
- sheng_yellow=0;
- zuo_red=0;
- you_red=0;
-
- shen_green=1;
- sheng_red=1;
- shang_red=1;
- xia_red=1;
- }
- else
- {
- sheng_green=0;
- shen_red=0;
- shen_yellow=0;
- zuo_red=0;
- you_red=0;
- shen_green=0;
- sheng_red=1;
- shang_red=1;
- xia_red=1;
- shen_yellow=1;
- }
- DigDisplay();
-
- }
- }
- void Timer0Cofig()
- {
- TMOD = 0x01; //定時器0選擇工作方式1
- TH0 = (65536-50000)/256; //設置初始值,定時50MS
- TL0 = (65536-50000)%256;
- EA = 1; //打開總中斷
- ET0 = 1; //打開定時器0中斷
- TR0 = 1; //啟動定時器0
- }
- void Timer0() interrupt 1
- {
- TH0 = (65536-50000)/256; //設置初始值
- TL0 = (65536-50000)%256;
- Time++;
- if(Time == 10)
- {
- Second ++;
-
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
紅綠燈.rar
(26.56 KB, 下載次數: 17)
2017-5-17 19:36 上傳
點擊文件名下載附件
含源代碼,仿真proteus 下載積分: 黑幣 -5
|
評分
-
查看全部評分
|