標題: 單片機節(jié)日彩燈控制器的設(shè)計Proteus仿真+代碼 [打印本頁]
作者: 1528053695 時間: 2018-12-17 14:31
標題: 單片機節(jié)日彩燈控制器的設(shè)計Proteus仿真+代碼
節(jié)日彩燈控制器的設(shè)計
一、設(shè)計要求:
以單片機為核心,設(shè)計一個節(jié)日彩燈控制器:
- K1—開始,按此鍵則燈開始流動(由上而下)。
- K2—停止,按此鍵則停止流動,所有燈為暗。
- K3—下,按此鍵則燈由下向上流動。
- K4—交替閃爍,按此鍵則奇數(shù)序號燈與偶數(shù)序號燈交替閃爍。
二、方案論證:
通過查閱大量相關(guān)技術(shù)資料,并結(jié)合自己的實際知識,我提出課兩種技術(shù)方案來實現(xiàn)該公能。下面我將首先對這兩種方案的組成框圖和實現(xiàn)原理分別進行說明,并分析比較它們的特點,然后闡述我最終選擇方案的原因。
1 方案比較
彩燈控制器課分為兩種方案實現(xiàn)。一種是利用數(shù)字邏輯電路裝置控制,另一種是采用單片機控制。
1.1 方案一
根據(jù)任務要求介紹的彩燈控制電路的基本組成,可以確定彩燈控制器應由振蕩器、計數(shù)/時序分配電路、移位寄存器和彩燈顯示五部分組成。其框圖如圖所示。
1.2 方案二
本方案主要是通過對基于單片機的多控制、多閃爍方式的LED彩燈循環(huán)系統(tǒng)的設(shè)計,來達到本設(shè)計的要求、其硬件構(gòu)成框圖如圖所示,以單片機為核心控制,由單片機最小系統(tǒng)(時鐘電路、復位電路、電源)、按鍵控制電路、LED發(fā)光二極管和5V直流電源組成。
2 方案論證
如果采用方案一,利用數(shù)字邏輯電路裝置控制,其電路不是很復雜,制作相對較容易,成本也相對較低,但可調(diào)性差,亮燈模式少而且樣式單調(diào),達不到設(shè)計任務要求或?qū)崿F(xiàn)困難。而采用方案二,以單片機控制其優(yōu)點是電路集成度高,工作原理簡單,清晰明了,自定義編程,控制的圖案花樣多,移植性好等。
3 方案選擇
綜上,顯然方案二各方面優(yōu)于方案一,以及為了體現(xiàn)專業(yè)優(yōu)勢,本次設(shè)計采用方案二。
三、理論設(shè)計:
1、主程序設(shè)計
程序啟動時跳轉(zhuǎn)到鍵盤判斷模塊程序中,此程序里面包含K1—K4的按鍵情況判斷,循環(huán)檢測直到有按鍵按下的時候,程序轉(zhuǎn)去相對應的按鍵的彩燈顯示的模塊。
2、鍵盤掃描程序
四、電路仿真和仿真結(jié)果分析:
1 仿真電路
1.1 時鐘電路和復位電路
1.2 按鍵控制電路
1.3 LED顯示電路
2 仿真結(jié)果分析:
此次系統(tǒng)設(shè)計結(jié)果較好,經(jīng)Proteus軟件仿真系統(tǒng)的調(diào)試,可檢測出仿真電路正常;對應按鍵按下,彩燈出現(xiàn)不同花型,實現(xiàn)了多控制、多閃爍的LED彩燈循環(huán);經(jīng)以上仿真測試證實,本設(shè)計能實現(xiàn)設(shè)計系統(tǒng)要求的預期功能。
五、心得體會:
本次作業(yè)設(shè)計以C51單片機為核心,控制電路、LED顯示電路、以及單片機最小系統(tǒng)等模塊組成的核心主控制電路,實現(xiàn)了由單片機對LED燈的控制。
通過對軟件的仿真調(diào)試,對彩燈控制器的運行成果滿意,實現(xiàn)了題目的要求,同時此設(shè)計具有電路簡單、易操作、成本小、體積小、耗能低等優(yōu)點。
但是在設(shè)計中也出現(xiàn)了一些問題,在程序編寫過程中發(fā)現(xiàn)自己有的知識模塊模糊,導致實驗速度減緩,通過c程序的編寫實驗就發(fā)現(xiàn)自己很多地方的不足,在查閱資料和同學的幫助下才解決了困難,這都是以后要多學習的地方。
單片機源程序如下:
- #include <reg52.h>
- #define uchar unsigned char //宏定義
- #define uint unsigned int
- sbit k1=P1^2; //位定義
- sbit k2=P1^3;
- sbit k3=P1^4;
- sbit k4=P1^5;
- uchar a=0; //定義所需變量
- uchar b;
- uchar code table1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //從上到下流水數(shù)組
- uchar code table2[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //從下到上流水數(shù)組
- void delay_ms(uint xms) //延時函數(shù)
- {
- uint i,j;
- for(i=xms;i>0;i--)
- for(j=110;j>0;j--);
- }
- void key_scan(uchar b) //按鍵掃描
- {
- if(b==1) //若K1按下
- {
- while(k2==1&&k3==1&&k4==1)
- {
- for(a=0;a<8;a++) //執(zhí)行從上到下流水操作
- {
- P0=table1[a];
- delay_ms(100);
- }
- a=0;
- }
- }
- if(b==2) //若K2按下
- {
- while(k1==1&&k3==1&&k4==1)
- { //P0全部輸出高電平,關(guān)閉LED
- P0=0xff;
- }
- }
- if(b==3) //若K3按下
- {
- while(k1==1&&k2==1&&k4==1)
- {
- for(a=0;a<8;a++) //執(zhí)行從下到上流水操作
- {
- P0=table2[a];
- delay_ms(100);
- }
- a=0;
- }
- }
- if(b==4) //若K4按下
- {
- while(k1==1&&k2==1&&k3==1)
- {
- P0=0xaa; //奇偶位分別點亮
- delay_ms(100);
- P0=0x55;
- delay_ms(100);
- }
- }
- }
- void main(void) //主函數(shù)
- {
- TMOD=0X01; //定時器中斷初始化
- TH0=(65536-1000)/256;
- TL0=(65536-1000)%256;
- EA=1;
- ET0=1;
- TR0=1;
- while(1);
-
- }
- void T0_time() interrupt 1 //中斷服務函數(shù)
- {
- TH0=(65536-1000)/256;
- TL0=(65536-1000)%256;
- if(k1==0)b=1;
- if(k2==0)b=2;
- if(k3==0)b=3;
- if(k4==0)b=4;
- key_scan(b);
- }
復制代碼
0.png (43.19 KB, 下載次數(shù): 135)
下載附件
2018-12-17 17:56 上傳
所有資料51hei提供下載:
2016111301節(jié)日彩燈控制器的設(shè)計.zip
(138.16 KB, 下載次數(shù): 403)
2018-12-17 14:30 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者: jmy11 時間: 2018-12-20 17:05
好的東西,謝謝分享
作者: s717626120 時間: 2018-12-20 18:43
是好東西,值得收獲。謝謝大佬
作者: hinney 時間: 2018-12-28 22:59
感謝大佬。。。。!
作者: 月幽桜 時間: 2019-3-22 22:46
好的東西,謝謝分享
作者: 無低調(diào) 時間: 2019-7-1 14:08
程序出錯
作者: 256358539 時間: 2019-9-29 10:36
好的東西,謝謝分享
作者: MASAYOME 時間: 2019-10-9 09:15
好東西,謝謝分享
作者: xiongjiancun 時間: 2019-10-12 10:34
程序出錯了兄弟
作者: 啊llllll 時間: 2019-11-16 18:08
好東西,謝謝分享
作者: we2619218 時間: 2020-3-23 21:29
請問樓主,為什么要用到定時器的中斷呢?我是個新手,只做過簡單的流水燈,能不能給我簡單講一講原理。?十分感謝
作者: 2248662343 時間: 2020-4-25 12:51
有開關(guān)控制的嗎
作者: 新爺v 時間: 2020-6-1 14:39
樓主,請問為什么我復制你的keil程序后,在proteus里仿真,點開關(guān)是完全沒有反應的
作者: 王陽陽 時間: 2020-6-9 20:36
代碼打錯了應該是
作者: 青斑qqqbbb 時間: 2020-6-18 09:50
復制的代碼 但是proteus上按開關(guān)led沒有反應 555-
作者: 青斑qqqbbb 時間: 2020-6-18 09:58
感謝大佬! 剛才圖畫錯了!
作者: 1252490887 時間: 2020-6-21 13:59
這學期的單片機就做過這個,但是感覺這個更好一點
作者: 瓦斯彈222 時間: 2020-9-27 12:41
現(xiàn)在改好了嗎
作者: 白馬義從 時間: 2020-10-25 09:57
感謝,幫助很大
作者: howe130 時間: 2020-12-8 20:14
他這個為什么是reg52.h
作者: 。。。。。。123 時間: 2021-6-18 11:58
真的是好,感謝
作者: 此用戶不存在 時間: 2021-6-21 22:59
很詳細,感謝大佬的資料分享,
作者: 可樂小弟 時間: 2023-6-27 19:02
是好東西,值得收獲。謝謝大佬
作者: Eiddam 時間: 2024-9-22 22:05
好的東西,謝謝分享
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |