標題: 求AT89C51單片機交通燈仿真+程序 [打印本頁]
作者: paomocha 時間: 2016-12-7 15:49
標題: 求AT89C51單片機交通燈仿真+程序
本帖最后由 paomocha 于 2016-12-7 16:21 編輯
求兩份交通燈設計 全套內容,重金獎勵,急!!!在線等!(兩份可以相似,但不能完全一樣)
設計基本要求:
(1)車輛通行繁忙的十字交叉路口,設計一交通燈控制器,設東西方向通行時間為30秒,當剩余3秒時黃燈亮,南北方向通行時間為20秒,當剩余3秒時黃燈亮。
(2)東西、南北方向各用三個(綠、黃、紅)LED表示,并用數碼管顯示東西、南北方向的剩余時間。
(3)需要南北方向設置一個人行道專用交通燈和按鈕,當該按鈕被按下的時候,3秒內東西方向變黃燈,再過3秒后東西方向變紅燈,此時南北方向行人路燈變綠。
只能用以下元器件:
AT89C51型號單片機
其他隨意
要用到數碼管
程序可以簡單一點,不要太難。注釋的詳細一點(完全不會的學渣。。。)
用proteus仿真好,連同單片機的程序在一個文件夾里
打包壓縮發我郵箱543844668
@qq.com
滿意的再加100-300!!黑幣!
發的時候附上ID
急求,謝謝了!
作者: zl2168 時間: 2016-12-7 20:01
本帖最后由 zl2168 于 2016-12-7 20:19 編輯
給你相似參考案例,不要你黑幣!
模擬交通燈
交通燈模擬控制要求:相反方向相同顏色的燈顯示相同,垂直方向相同顏色的紅綠燈顯示相反。橫向綠燈先亮4秒(為便于觀察運行效果而縮短時間),再快閃1秒(亮暗各0.1秒,閃爍5次);然后黃燈亮2秒;橫向綠燈黃燈亮閃期間,縱向紅燈保持亮狀態(共7秒);再然后縱向綠燈黃燈重復上述橫向綠燈黃燈亮閃過程,縱向與橫向交替不斷。
縮短亮燈時間,是為了仿真演示,便于觀看,否則,你等得不耐煩了,實際應用時,可可修改延長。
⒈ 電路設計 …
⒉ 程序設計 …
⒊ Keil調試 …
⒋Proteus仿真 …
先Proteus仿真一下,確認有效。
實例29 模擬交通燈.rar
(35.12 KB, 下載次數: 590)
2016-12-7 20:05 上傳
點擊文件名下載附件
模擬交通燈.jpg (117.88 KB, 下載次數: 207)
下載附件
2016-12-7 20:05 上傳
以上摘自張志良編著《80C51單片機仿真設計實例教程——基于Keil C和Proteus》清華大學出版社ISBN 978-7-302-41682-1,內有常用的單片機應用100案例,用于仿真實驗操作,電路與程序真實可靠可信可行。書中電路和程序設計有詳細說明,程序語句條條有注解。
作者: zl2168 時間: 2016-12-7 20:20
本帖最后由 zl2168 于 2016-12-7 20:22 編輯
帶限行時間顯示的模擬交通燈
在上例基礎上,綠燈加上限行時間顯示,原換燈時間分別改為:綠燈9秒(最后2秒快閃),黃燈3秒,紅燈12秒,反復循環。縮短亮燈時間,是為了仿真演示,便于觀看,否則,你等得不耐煩了,實際應用時,可可修改延長。
⒈ 電路設計 …
⒉ 程序設計 …
⒊ Keil調試 …
⒋Proteus仿真 …
先Proteus仿真一下,確認有效。
帶限行時間顯示模擬交通燈.jpg (120.42 KB, 下載次數: 183)
下載附件
2016-12-7 20:22 上傳
以上摘自張志良編著《80C51單片機仿真設計實例教程——基于Keil C和Proteus》清華大學出版社ISBN 978-7-302-41682-1,內有常用的單片機應用100案例,用于仿真實驗操作,電路與程序真實可靠可信可行。書中電路和程序設計有詳細說明,程序語句條條有注解。
作者: smail 時間: 2016-12-8 22:33
淘寶賣家提供的程序實例
-
-
8、交通燈.rar
2016-12-8 22:32 上傳
點擊文件名下載附件
261.27 KB, 下載次數: 451
作者: liuzhaoxin1020 時間: 2016-12-16 17:30
本網站就有
作者: 葉知秋gff 時間: 2016-12-16 17:44
交通燈模擬控制要求:相反方向相同顏色的燈顯示相同,垂直方向相同顏色的紅綠燈顯示相反。橫向綠燈先亮4秒(為便于觀察運行效果而縮短時間),再快閃1秒(亮暗各0.1秒,閃爍5次);然后黃燈亮2秒;橫向綠燈黃燈亮閃期間,縱向紅燈保持亮狀態(共7秒);再然后縱向綠燈黃燈重復上述橫向綠燈黃燈亮閃過程,縱向與橫向交替不斷。
作者: lehigh 時間: 2017-6-24 18:52
你這,沒有C語言源代碼啊
作者: 694073644 時間: 2018-6-20 14:53
AT89C51型號單片機
作者: 694073644 時間: 2018-6-20 15:37
有C語音程序嗎
作者: wjn0103 時間: 2018-6-20 15:44
這個簡單,不過我沒有現成的程序。
作者: zl2168 時間: 2018-6-21 07:24
仿真電路和Hex文件能在清華出版社網站免費下載,程序源代碼只能到書上看了。到圖書館借,或到新華書店翻閱,或到網上書店打折購買。
作者: zl2168 時間: 2018-6-21 07:24
仿真電路和Hex文件能在清華出版社網站免費下載,程序源代碼只能到書上看了。到圖書館借,或到新華書店翻閱,或到網上書店打折購買。
作者: delaynomore 時間: 2018-11-18 19:31
有C語言嗎,跪求,不做商業用途
作者: yeyuan 時間: 2018-11-19 13:22
交通燈倒計時30秒程序 使用匯編編寫
-
-
交通燈.docx
2018-11-19 13:21 上傳
點擊文件名下載附件
12.63 KB, 下載次數: 96
作者: 萌新小魚 時間: 2018-11-19 16:59
還沒解決嗎,萌新瑟瑟發抖,希望上面的大佬能幫到你
作者: EFDGHHJ 時間: 2018-12-19 09:31
那個壓縮包的能不能把程序提取出來
作者: 宋孑懌 時間: 2019-6-24 13:26
有源代碼嗎?
作者: xianfajushi 時間: 2019-6-24 19:22
https://blog.csdn.net/xianfajushi/article/details/80553964
作者: junya 時間: 2020-4-2 13:12
代碼是什么
作者: gqzjl 時間: 2020-6-20 20:31
- #include <reg52.h> //調用單片機頭文件
- #define uchar unsigned char //宏定義"uchar"代替"unsigned char"。
- #define uint unsigned int //宏定義"uint"用來定義無符號整型數。
- //數碼管段選定義 0 1 2 3 4 5 6 7 8 9
- uchar code smg_du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
- // A B C D E F 不顯示
- 0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff}; //斷碼
- uchar dis_smg[8] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};
- uchar smg_i = 4; //顯示數碼管的個位數
- //數碼管位選定義
- sbit smg_we1 = P2^0; //數碼管位選定義
- sbit smg_we2 = P2^1;
- sbit smg_we3 = P3^6;
- sbit smg_we4 = P3^7;
- char dx_s = 0; //東西 南北 倒計時變量
- sbit dx_red = P2^4; //東西紅燈
- sbit dx_green = P2^3; //東西綠燈
- sbit dx_yellow = P2^2; //東西黃燈
- sbit nb_red = P2^7; //南北紅燈
- sbit nb_green = P2^6; //南北綠燈
- sbit nb_yellow = P2^5; //南北黃燈
- uchar flag_jtd_mode; //交通燈的模式 根據時間
- bit flag_1s = 0;
- bit flag_500ms;
- bit flag_dx_nb; //東西南北模式
- uchar flag_5m_value;
- uchar i;
- uchar flag_alarm; //模式
- uchar dx_time = 30,nb_time = 20; //東西、南北的時間
- uchar flag_jdgz ; //交通管制
- /***********************數碼位選函數*****************************/
- void smg_we_switch(uchar i)
- {
- switch(i)
- {
- case 0: smg_we1 = 0; smg_we2 = 1; smg_we3 = 1; smg_we4 = 1; break;
- case 1: smg_we1 = 1; smg_we2 = 0; smg_we3 = 1; smg_we4 = 1; break;
- case 2: smg_we1 = 1; smg_we2 = 1; smg_we3 = 0; smg_we4 = 1; break;
- case 3: smg_we1 = 1; smg_we2 = 1; smg_we3 = 1; smg_we4 = 0; break;
- }
- }
- /********************************************************************
- * 名稱 : delay_1ms()
- * 功能 : 延時1ms函數
- * 輸入 : q
- * 輸出 : 無
- ***********************************************************************/
- void delay_1ms(uint q)
- {
- uint i,j;
- for(i=0;i<q;i++)
- for(j=0;j<110;j++);
- }
- /********************************************************************
- * 名稱 : display()
- * 功能 : 數碼管顯示
- * 輸入 : 無
- * 輸出 : 無
- ***********************************************************************/
- void display()
- {
- uchar i;
- for(i=0;i<smg_i;i++)
- {
- P0 = 0xff; //消隱
- smg_we_switch(i); //位選
- P0 = dis_smg[i]; //段選
- delay_1ms(3);
- }
- }
- /*********************定時器0、定時器1初始化******************/
- void time0_init()
- {
- EA = 1; //開總中斷
- TMOD = 0X11; //定時器0、定時器1工作方式1
- ET0 = 1; //開定時器0中斷
- TR0 = 1; //允許定時器0定時
- // ET1 = 1; //開定時器1中斷
- // TR1 = 1; //允許定時器1定時
- }
- /*********************交通燈處理函數*********************************/
- void jiaotongdeng_dis()
- {
- if(flag_1s == 1)
- {
- flag_1s = 0;
- if(dx_s == 0)
- {
- if(flag_dx_nb == 1)
- dx_s = nb_time; //南北時間
- else
- dx_s = dx_time; //東西時間
- flag_dx_nb = ~flag_dx_nb;
- }
- dx_s --;
- }
- dis_smg[0] = smg_du[dx_s % 10] ;
- dis_smg[1] = smg_du[dx_s / 10] ;
- dis_smg[2] = smg_du[dx_s % 10] ;
- dis_smg[3] = smg_du[dx_s / 10] ;
- /***********************南北時間*********************************/
- if(flag_dx_nb == 0)
- {
- if(dx_s > 5)
- {
- dx_red = 1; //滅
- dx_green = 0; //亮
- dx_yellow = 1; //滅
- nb_red = 0; //亮
- nb_green = 1; //滅
- nb_yellow = 1; //滅
- flag_5m_value = 0;
- }else if(dx_s <= 5) //當小于5秒時 黃燈要閃了
- {
- dx_red = 1; //滅
- dx_green = 1; //滅
- nb_red = 0; //亮
- nb_green = 1; //滅
- nb_yellow = 1; //滅
- if(flag_500ms == 0)
- {
- dx_yellow = 0;//亮
- }
- else
- {
- dx_yellow = 1;//滅
- }
- }
- }
- /***********************東西時間*********************************/
- if(flag_dx_nb == 1)
- {
- if(dx_s > 5)
- {
- dx_red = 0; //亮
- dx_green = 1; //滅
- dx_yellow = 1; //滅
- nb_red = 1; //滅
- nb_green = 0; //亮
- nb_yellow = 1; //滅
- flag_5m_value = 0;
- }else if(dx_s <= 5) //當小于5秒時 黃燈要閃了
- {
- dx_red = 0; //滅
- dx_green = 1; //滅
- dx_yellow = 1; //滅
- nb_red = 1; //滅
- nb_green = 1; //滅
- if(flag_500ms == 0) //黃燈閃爍
- {
- nb_yellow = 0; //亮
- }
- else
- {
- nb_yellow = 1; //滅
- }
- }
- }
- }
- /********************獨立按鍵程序*****************/
- uchar key_can; //按鍵值
- void key() //獨立按鍵程序
- {
- static uchar key_new;
- key_can = 20; //按鍵值還原
- P1 |= 0x1f;
- if((P1 & 0x1f) != 0x1f) //按鍵按下
- {
- delay_1ms(1); //按鍵消抖動
- if(((P1 & 0x1f) != 0x1f) && (key_new == 1))
- { //確認是按鍵按下
- key_new = 0;
- switch(P1 & 0x1f)
- {
- case 0x1e: key_can = 1; break; //得到按鍵值
- case 0x1d: key_can = 2; break; //得到按鍵值
- case 0x1b: key_can = 3; break; //得到按鍵值
- case 0x17: key_can = 4; break; //得到按鍵值
- }
- }
- }
- else
- key_new = 1;
- }
- uchar menu_1,flag_s;
- /********************設置函數*****************/
- void key_with()
- {
- if(key_can == 4) //交通管制按鍵
- {
- flag_jdgz ++;
- if(flag_jdgz > 5)
- flag_jdgz = 0;
- if(flag_jdgz == 1) // 全部亮紅燈
- {
- dx_red = 0; //亮
- dx_green = 1; //滅
- dx_yellow = 1; //滅
- nb_red = 0; //亮
- nb_green = 1; //滅
- nb_yellow = 1; //滅
- }
- if(flag_jdgz == 2) // 東西紅燈 南北綠燈
- {
- dx_red = 0; //亮
- dx_green = 1; //滅
- dx_yellow = 1; //滅
- nb_red = 1; //滅
- nb_green = 0; //亮
- nb_yellow = 1; //滅
- }
- if(flag_jdgz == 3) // 南北紅燈 東西綠燈
- {
- dx_red = 1; //滅
- dx_green = 0; //亮
- dx_yellow = 1; //滅
- nb_red = 0; //亮
- nb_green = 1; //滅
- nb_yellow = 1; //滅
- }
- if(flag_jdgz == 4) // 南北綠燈 東西綠燈
- {
- dx_red = 1; //滅
- dx_green = 0; //亮
- dx_yellow = 1; //滅
- nb_red = 1; //滅
- nb_green = 0; //亮
- nb_yellow = 1; //滅
- }
- if(flag_jdgz == 5) // 南北黃燈 東西黃燈
- {
- dx_red = 1; //滅
- dx_green = 1; //滅
- dx_yellow = 0; //亮
- nb_red = 1; //滅
- nb_green = 1; //滅
- nb_yellow = 0; //亮
- }
- }
- if(key_can == 1) //設置鍵
- {
- menu_1 ++;
- if(menu_1 >= 3)
- {
- menu_1 = 0;
- }
- }
- if(menu_1 == 1) //設置東西的時間
- {
- if(key_can == 2)
- {
- dx_time ++ ; //加1
- if(dx_time > 99)
- dx_time = 99;
- }
- if(key_can == 3)
- {
- dx_time -- ; //減1
- if(dx_time <= 10)
- dx_time = 10;
- }
- dis_smg[0] = smg_du[10] ; //顯示為A
- dis_smg[1] = smg_du[10] ; //顯示為A
- dis_smg[2] = smg_du[dx_time % 10] ; //顯示東西設置的時候
- dis_smg[3] = smg_du[dx_time / 10] ;
- }
- if(menu_1 == 2) //設置南北的時間
- {
- if(key_can == 2)
- {
- nb_time ++ ; //加1
- if(nb_time > 99)
- nb_time = 99;
- }
- if(key_can == 3)
- {
- nb_time -- ; //減1
- if(nb_time <= 10)
- nb_time = 10;
- }
- dis_smg[0] = smg_du[11] ; //顯示為B
- dis_smg[1] = smg_du[11] ; //顯示為B
- dis_smg[2] = smg_du[nb_time % 10] ; //顯示東西設置的時候
- dis_smg[3] = smg_du[nb_time / 10] ;
- }
- }
- /********************************************************************
- * 名稱 : main()
- * 功能 : 實現燈的閃爍
- * 輸入 : 無
- * 輸出 : 無
- ***********************************************************************/
- void main()
- {
- time0_init();
- dx_s = nb_time; //東西時間
- while(1)
- {
- key();
- if(key_can < 20)
- key_with();
- // menu_dis();
- if((menu_1 == 0) && (flag_jdgz == 0))
- jiaotongdeng_dis();
- display();
- }
- }
- /*********************定時器0中斷服務程序************************/
- void time0_int() interrupt 1
- {
- static uchar value; //定時10ms中斷一次
- TH0 = 0x3c;
- TL0 = 0xb0; //50ms
- value ++;
- flag_5m_value++;
- if(flag_5m_value % 10 == 0)
- flag_500ms = ~flag_500ms;
- if(value >= 20)
- {
- value = 0;
- flag_1s = 1;
- }
- }
復制代碼
作者: 跟愛的感覺走 時間: 2020-9-7 08:30
網上不是很多這種資料嗎
作者: 圖銳工程 時間: 2020-9-7 08:39
我們這個論壇就有很多
| 歡迎光臨 (http://www.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |