51單片機系統(tǒng)實驗報告--計數(shù)器、交通燈_第1頁
51單片機系統(tǒng)實驗報告--計數(shù)器、交通燈_第2頁
51單片機系統(tǒng)實驗報告--計數(shù)器、交通燈_第3頁
51單片機系統(tǒng)實驗報告--計數(shù)器、交通燈_第4頁
51單片機系統(tǒng)實驗報告--計數(shù)器、交通燈_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、系 統(tǒng) 實 驗 報 告學(xué)院 XXXXXXXXX專業(yè) XXXXXX 姓名 XXXXX 學(xué)號 XXXXXXX 一、本設(shè)計擬實現(xiàn)的功能1時鐘:四只數(shù)碼管低二位059計數(shù)后給高二位059計數(shù)(即分秒計時),一只按鍵控制開始、結(jié)束;2.交通燈:燈和數(shù)碼管結(jié)合,模擬十字路口的交通燈的點亮與熄滅,數(shù)碼管倒計時顯示時間。二、所用器件的功能、引腳圖1.所用器件:AT89S51、74LS47、LM70852.所用器件功能、引腳圖a)AT89S51AT89S51引腳圖AT89S51是一個低功耗,高性能CMOS 8位單片機,片內(nèi)含4k Bytes ISP(In-system programmabl

2、e)的可反復(fù)擦寫1000次的Flash只讀程序存儲器,器件采用ATMEL公司的高密度、非易失性存儲技術(shù)制造,兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng)及80C51引腳結(jié)構(gòu),芯片內(nèi)集成了通用8位中央處理器和ISP Flash存儲單元,AT89S51在眾多嵌入式控制應(yīng)用系統(tǒng)中得到廣泛應(yīng)用。主要性能特點1、4k Bytes Flash片內(nèi)程序存儲器;2、128 bytes的隨機存取數(shù)據(jù)存儲器(RAM);3、32個外部雙向輸入/輸出(I/O)口;4、5個中斷優(yōu)先級、2層中斷嵌套中斷;5、6個中斷源;6、2個16位可編程定時器/計數(shù)器;7、2個全雙工串行通信口;8、看門狗(WDT)電路;9、片內(nèi)振蕩器和時鐘電路;10

3、、與MCS-51兼容;11、全靜態(tài)工作:0Hz-33MHz;12、三級程序存儲器保密鎖定;13、可編程串行通道;14、低功耗的閑置和掉電模式。b) 74LS4774LS47引腳圖74LS47真值表74LS47是一種常用的BCD-七段數(shù)碼管譯碼器驅(qū)動器,74LS47的輸入端是四位二進制信號(8421BCD碼),a、b、c、d、e、f、g是七段譯碼器的輸出驅(qū)動信號,低電平有效??芍苯域?qū)動共陰極七段數(shù)碼管, 是使能端,起輔助控制作用。使能端的作用如下:(1) LT是試燈輸入端,當(dāng) LT=0, BI=1時,不管其它輸入是什么狀態(tài),ag七段全亮;(2)BI靜態(tài)滅燈輸入 ,當(dāng) BI=0,不論其它輸入狀態(tài)如

4、何,ag均為0,顯示管熄滅;(3)RBI動態(tài)滅零輸入 ,當(dāng) LT=1, RBI=0時,如果 A3A2A1A0(ABCD)=0000時,ag均為各段熄滅;(4) RBO動態(tài)滅零輸出 ,它與滅燈輸入BI 共用一個引出端。當(dāng) 在動態(tài)滅零時輸出才為0。片間與 RBI配合,可用于熄滅多位數(shù)字前后所不需要顯示的零。c) LM7805LM7085引腳圖7805是常用到的穩(wěn)壓芯片,外圍電路簡單,輸出電壓為5V,可為51單片機提供工作電壓。三、軟件設(shè)計流程圖開始初始化按鍵掃描判斷按鍵決定執(zhí)行相應(yīng)按鍵程序不同按鍵的執(zhí)行函數(shù)定時器數(shù)碼管及交通燈輸出函數(shù)結(jié)束四、源程序#include <reg51.h>#

5、define uchar unsigned char#define uint unsigned int#define TH_SET 0x4C#define TL_SET 0x00/定時50ms的初始值#define RTime 24 / 紅燈時間20s#define GTime 24 /綠燈時間20s#define YTime 3 /黃燈時間5ssbit KEY_A=P10;sbit KEY_B=P11;sbit GREEN1=P20; sbit GREEN2=P23;sbit RED1=P21; sbit RED2=P24; sbit YELLOW1=P22;sbit YELLOW2=P25

6、;/位定義bit key1=0,key2=0;/四個按鍵狀態(tài)標(biāo)志uint time1,time2;/time1,time2分別為鍵1、鍵2功能實現(xiàn)的時間變量uchar acount,keyflag,Status=1,yellow=0;/acount定時一秒標(biāo)志/Status交通燈狀態(tài)顯示標(biāo)志,keyflag按鍵選擇標(biāo)志,P黃燈閃爍定時標(biāo)志void Delay(int n) /延時程序 uint i; uint j; for(i=0;i<n;i+)for(j=0;j<200;j+);/定時器0void Timer0_SVR() interrupt 1 TH0=TH_SET; TL0=

7、TL_SET; acount+; if(KEY_A=0)/按鍵掃描實現(xiàn)暫停和按鍵切換 Delay(2); if(KEY_A=0) key1=key1 ; keyflag=1; while(!KEY_A); if(KEY_B=0) Delay(2); if(KEY_B=0) key2=key2 ; keyflag=2; while(!KEY_B); if(acount=20)/IntCount=20定時一秒 acount=0; /定時一秒恢復(fù) if(keyflag=1) if(key1=1)/按下鍵1使交通燈顯示時間自減time1-;if(time1=0) Status+;/顯示時間為零時,切換

8、交通燈狀態(tài) if(Status=5) Status=1; if(keyflag=2) if(key2=1) time2+; /按下鍵2時計時器時間自增 if(time2=3600)/計時滿一小時時歸零 time2=0; EA=1; /計時器數(shù)碼管顯示函數(shù)void xianshi1(void) P0=time2/600+0x10;Delay(2); /分的十位 P0=(time2/60%10)+0x20;Delay(2); /分的個位 P0=(time2%60)/10)+0x40;Delay(2); /秒的十位 P0=(time2%60%10)+0x80;Delay(2); /秒的個位 /交通燈

9、數(shù)碼管顯示函數(shù)void xianshi2(void) P0=(time1/10)+0x50;Delay(2); /秒的十位 P0=(time1%10)+0xA0;Delay(2); /秒的個位 yellow+; /計數(shù)器狀態(tài)函數(shù)void Count()time2=0; key2=1; P2=0x80;while(1)if(keyflag=2) xianshi1();else break; /交通燈狀態(tài)函數(shù)void TraLight(void) key1=1; time1=0; P2=0x80; while(1) if(Status=1&&time1=0)/Status=1時南北

10、向紅綠燈亮 RED1=0;RED2=1;YELLOW1=0;YELLOW2=0;GREEN1=1;GREEN2=0;time1=GTime; if(Status=2&&time1=0)/Status=2時黃燈閃爍 RED1=0;RED2=0;YELLOW1=1;YELLOW2=1;GREEN1=0;GREEN2=0;time1=YTime; if(Status=3&&time1=0)/Status=3時東西向紅綠燈亮 RED1=1;RED2=0;YELLOW1=0;YELLOW2=0;GREEN1=0;GREEN2=1;time1=RTime; if(Statu

11、s=4&&time1=0)/Status=4時黃燈閃爍 RED1=0;RED2=0;YELLOW1=1;YELLOW2=1;GREEN1=0;GREEN2=0;time1=YTime; if(yellow=50&&key1)/Status=2或4時為黃燈,實現(xiàn)閃爍 if(Status=2|Status=4) yellow=0; YELLOW1=YELLOW1; YELLOW2=YELLOW2; if(keyflag=1) xianshi2(); else break; void choose(void) switch(keyflag) case 1:TraLig

12、ht();break;/ 按鍵1 case 2:Count();break; / 按鍵2 default: break; /主函數(shù)void main()/初始化定時器0 EA=1; ET0=1; TMOD=0x01; TH0=0x4c; TL0=0x00; P2=0x80; if(KEY_A=0) /按鍵掃描實現(xiàn)暫停和切換 Delay(5); if(KEY_A=0) key1=key1 ; keyflag=1; while(!KEY_A); if(KEY_B=0) Delay(5); if(KEY_B=0) key2=key2 ; keyflag=2; while(!KEY_B); TR0=1

13、; while(1) choose(); 六、已實現(xiàn)的功能 1.KEYA:交通燈燈和數(shù)碼管結(jié)合,模擬十字路口的交通燈的點亮與熄滅,數(shù)碼管倒計時顯示時間。 亮燈方式:紅(20s) 黃(閃爍5s) 綠(20s) 黃(閃爍5s) 紅(20s) 數(shù)碼管顯示方式:南北向紅綠燈20s 黃燈閃爍5s 東西向紅綠燈20s 黃燈閃爍5s 南北向紅綠燈20s 按下KEYA可實現(xiàn)計時與紅綠燈暫停 2.KEYB:計時器 四只數(shù)碼管低二位059計數(shù)后給高二位059計數(shù)(即分秒計時) 按下KEYB可實現(xiàn)計時器暫停七、調(diào)試過程步驟1:運行Keil uVision3新建工程并將程序代碼輸入,編譯無錯誤后生成HEX文件。步驟2:將HEX文件通過專業(yè)燒錄軟件燒錄到AT89S51芯片中。步驟3:上電按鍵操作,看是否符合設(shè)計要求。步驟4:根據(jù)上電操作結(jié)果修改程序,并再次燒錄調(diào)試,直至滿足設(shè)計要求為止。八、心得小結(jié)在焊接電路板的時候需要認(rèn)真仔細,焊接時要先焊接體積較小的元器件,再焊接較大的元器件,這樣比較方便,同時要看清三極管,排阻,二極管等帶有方向性元器件,不要搞錯方向,對于焊錫的把握適量即可,太多或太少都會導(dǎo)致虛焊。在編寫程序的過程中,最重要的是想好框架,然后從小處入手

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論