實(shí)驗(yàn):8051+Proteus定時(shí)計(jì)數(shù)器仿真_第1頁(yè)
實(shí)驗(yàn):8051+Proteus定時(shí)計(jì)數(shù)器仿真_第2頁(yè)
實(shí)驗(yàn):8051+Proteus定時(shí)計(jì)數(shù)器仿真_第3頁(yè)
實(shí)驗(yàn):8051+Proteus定時(shí)計(jì)數(shù)器仿真_第4頁(yè)
實(shí)驗(yàn):8051+Proteus定時(shí)計(jì)數(shù)器仿真_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、實(shí)驗(yàn):8051+Proteus定時(shí)/ 計(jì)數(shù)器仿真 一、 定時(shí)器控制單只LED/*名稱:定時(shí)器控制單只LED說(shuō)明:LED在定時(shí)器的中斷例程控制下不斷閃爍。*/#include#define uchar unsigned char#define uint unsigned intsbit LED=P00;uchar T_Count=0;/主程序void main()TMOD=0x00; /定時(shí)器0工作方式0TH0=(8192-5000)/32;/5ms定時(shí)TL0=(8192-5000)%32;IE=0x82;/允許T0中斷TR0=1;while(1);/T0中斷函數(shù)void LED_Flash()

2、 interrupt 1TH0=(8192-5000)/32;/恢復(fù)初值TL0=(8192-5000)%32;if(+T_Count=100)/0.5s開(kāi)關(guān)一次LEDLED=LED;T_Count=0; 二、 TIMER0控制流水燈/*名稱:TIMER0控制流水燈說(shuō)明:定時(shí)器控制P0、P2口的LED滾動(dòng)顯示,本例未使用中斷函數(shù)。*/#include#include#define uchar unsigned char#define uint unsigned int/主程序void main()uchar T_Count=0;P0=0xfe;P2=0xfe;TMOD=0x01; /定時(shí)器0工作

3、方式1TH0=(65536-40000)/256;/40ms定時(shí)TL0=(65536-40000)%256;TR0=1;/啟動(dòng)定時(shí)器while(1)if(TF0=1)TF0=0;TH0=(65536-40000)/256;/恢復(fù)初值TL0=(65536-40000)%256;if(+T_Count=5)P0=_crol_(P0,1);P2=_crol_(P2,1);T_Count=0;三、 定時(shí)器控制4個(gè)LED滾動(dòng)閃爍/*名稱:定時(shí)器控制4個(gè)LED滾動(dòng)閃爍說(shuō)明:4只LED在定時(shí)器控制下滾動(dòng)閃爍。*/#include#define uchar unsigned char#define uint

4、unsigned intsbit B1=P00;sbit G1=P01;sbit R1=P02;sbit Y1=P03;uint i,j,k;/主程序void main()i=j=k=0;P0=0xff;TMOD=0x02; /定時(shí)器0工作方式2TH0=256-200;/200us定時(shí)TL0=256-200;IE=0x82;TR0=1;/啟動(dòng)定時(shí)器while(1);/T0中斷函數(shù)void LED_Flash_and_Scroll() interrupt 1if(+k35)return; /定時(shí)中斷若干次后執(zhí)行閃爍k=0;switch(i)case 0:B1=B1;break;case 1:G1

5、=G1;break;case 2:R1=R1;break;case 3:Y1=Y1;break;default:i=0;if(+j300) return; /每次閃爍持續(xù)一段時(shí)間j=0;P0=0xff; /關(guān)閉顯示i+; /切換到下一個(gè)LED四、 T0控制LED實(shí)現(xiàn)二進(jìn)制計(jì)數(shù)/*名稱:T0控制LED實(shí)現(xiàn)二進(jìn)制計(jì)數(shù)說(shuō)明:本例對(duì)按鍵的計(jì)數(shù)沒(méi)有使用查詢法,沒(méi)有使用外部中斷函數(shù),沒(méi)有使用定時(shí)或計(jì)數(shù)中斷函數(shù)。而是啟用了計(jì)數(shù)器,連接在T0引腳的按鍵每次按下時(shí),會(huì)使計(jì)數(shù)寄存器的值遞增,其值通過(guò)LED以二進(jìn)制形式顯示*/#include/主程序void main()TMOD=0x05;/定時(shí)器0為計(jì)數(shù)器,工作

6、方式1,最大計(jì)數(shù)值65535TH0=0;/初值為0TL0=0;TR0=1;/啟動(dòng)定時(shí)器while(1)P1=TH0;P2=TL0;五、 TIMER0與TIMER1控制條形LED/*名稱:TIMER0與TIMER1控制條形LED說(shuō)明:定時(shí)器T0定時(shí)控制上一組條形LED,滾動(dòng)速度較快 定時(shí)器T1定時(shí)控制下一組條形LED,滾動(dòng)速度較慢*/#include#include#define uchar unsigned char#define uint unsigned intuchar tc0=0,tc1=0;/主程序void main()P0=0xfe;P2=0xfe;TMOD=0x11;/定時(shí)器0、

7、定時(shí)器1均工作于方式1TH0=(65536-15000)/256;/定時(shí)器0:15msTL0=(65536-15000)%256;TH1=(65536-50000)/256;/定時(shí)器1:50msTL1=(65536-50000)%256;IE=0x8a;TR0=1;/啟動(dòng)定時(shí)器TR1=1;while(1);/T0中斷函數(shù)void Time0() interrupt 1TH0=(65536-15000)/256;/恢復(fù)定時(shí)器0初值TL0=(65536-15000)%256;if(+tc0=10)/150ms轉(zhuǎn)換狀態(tài)tc0=0;P0=_crol_(P0,1);/T1中斷函數(shù)void Time1()

8、 interrupt 3TH0=(65536-50000)/256;/恢復(fù)定時(shí)器1初值TL0=(65536-50000)%256;if(+tc1=10)/500ms轉(zhuǎn)換狀態(tài)tc1=0;P2=_crol_(P2,1);六、 10s的秒表/*名稱:10s的秒表說(shuō)明:首次按鍵計(jì)時(shí)開(kāi)始,再次按鍵暫停,第三次按鍵清零。*/#include#define uchar unsigned char#define uint unsigned intsbit K1=P37;uchar i,Second_Counts,Key_Flag_Idx;bit Key_State;uchar DSY_CODE=0x3f,0x

9、06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/延時(shí)void DelayMS(uint ms)uchar t;while(ms-) for(t=0;t120;t+);/處理按鍵事件void Key_Event_Handle()if(Key_State=0)Key_Flag_Idx=(Key_Flag_Idx+1)%3;switch(Key_Flag_Idx)case 1:EA=1;ET0=1;TR0=1;break;case 2:EA=0;ET0=0;TR0=0;break;case 0:P0=0x3f;P2=0x3f;i=0;Second_Counts

10、=0;/主程序void main()P0=0x3f; /顯示00P2=0x3f;i=0;Second_Counts=0; Key_Flag_Idx=0; /按鍵次數(shù)(取值0,1,2,3)Key_State=1; /按鍵狀態(tài)TMOD=0x01;/定時(shí)器0方式1TH0=(65536-50000)/256;/定時(shí)器0:15msTL0=(65536-50000)%256;while(1)if(Key_State!=K1)DelayMS(10);Key_State=K1;Key_Event_Handle();/T0中斷函數(shù)void DSY_Refresh() interrupt 1TH0=(65536-

11、50000)/256;/恢復(fù)定時(shí)器0初值TL0=(65536-50000)%256;if(+i=2)/50ms*2=0.1s轉(zhuǎn)換狀態(tài)i=0;Second_Counts+;P0=DSY_CODESecond_Counts/10;P2=DSY_CODESecond_Counts%10;if(Second_Counts=100) Second_Counts=0;/滿100(10s)后顯示00七、 用計(jì)數(shù)器中斷實(shí)現(xiàn)100以內(nèi)的按鍵計(jì)數(shù)/*名稱:用計(jì)數(shù)器中斷實(shí)現(xiàn)100以內(nèi)的按鍵計(jì)數(shù)說(shuō)明:本例用T0計(jì)數(shù)器中斷實(shí)現(xiàn)按鍵技術(shù),由于計(jì)數(shù)寄存器初值為1,因此 P3.4引腳的每次負(fù)跳變都會(huì)觸發(fā)T0中斷,實(shí)現(xiàn)計(jì)數(shù)值累

12、加。 計(jì)數(shù)器的清零用外部中斷0控制。*/#include#define uchar unsigned char#define uint unsigned int/段碼uchar code DSY_CODE=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00;uchar Count=0;/主程序void main()P0=0x00; P2=0x00;TMOD=0x06;/計(jì)數(shù)器T0方式2TH0=TL0=256-1;/計(jì)數(shù)值為1ET0=1;/允許T0中斷EX0=1;/允許INT0中斷EA=1;/允許CPU中斷IP=0x02;/設(shè)置優(yōu)先級(jí),T

13、0高于INT0IT0=1;/INT0中斷觸發(fā)方式為下降沿觸發(fā)TR0=1;/啟動(dòng)T0while(1)P0=DSY_CODECount/10;P2=DSY_CODECount%10;/T0計(jì)數(shù)器中斷函數(shù)void Key_Counter() interrupt 1Count=(Count+1)%100;/因?yàn)橹挥袃晌粩?shù)碼管,計(jì)數(shù)控制在100以內(nèi)(0099)/INT0中斷函數(shù)void Clear_Counter() interrupt 0Count=0;八、 100 000s以內(nèi)的計(jì)時(shí)程序/*名稱:100 000s以內(nèi)的計(jì)時(shí)程序說(shuō)明:在6只數(shù)碼管上完成099 999.9s。*/#include#inc

14、lude#define uchar unsigned char#define uint unsigned int/段碼uchar code DSY_CODE=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/6只數(shù)碼管上顯示的數(shù)字uchar Digits_of_6DSY=0,0,0,0,0,0;uchar Count;sbit Dot=P07;/延時(shí)void DelayMS(uint ms)uchar t;while(ms-) for(t=0;t120;t+);/主程序void main()uchar i,j;P0=0x00; P3=0xff

15、;Count=0;TMOD=0x01;/計(jì)數(shù)器T0方式1TH0=(65536-50000)/256;/50ms定時(shí)TL0=(65536-50000)%256;IE=0x82;TR0=1;/啟動(dòng)T0while(1)j=0x7f;/顯示Digits_of_6DSY5Digits_of_6DSY0的內(nèi)容/前面高位,后面低位,循環(huán)中i!=-1亦可寫(xiě)成i!=0xfffor(i=5;i!=-1;i-)j=_crol_(j,1);P3=j;P0=DSY_CODEDigits_of_6DSYi;if(i=1) Dot=1;/加小數(shù)點(diǎn)DelayMS(2);/T0中斷函數(shù)void Timer0() interru

16、pt 1uchar i;TH0=(65536-50000)/256;/恢復(fù)初值TL0=(65536-50000)%256;if(+Count!=2) return;Count=0;Digits_of_6DSY0+;/0.1s位累加for(i=0;i=5;i+)/進(jìn)位處理if(Digits_of_6DSYi=10)Digits_of_6DSYi=0;if(i!=5) Digits_of_6DSYi+1+; /如果04位則分別向高一位進(jìn)位else break;/若某低位沒(méi)有進(jìn)位,怎循環(huán)提前結(jié)束九、 定時(shí)器控制數(shù)碼管動(dòng)態(tài)顯示/*名稱:定時(shí)器控制數(shù)碼管動(dòng)態(tài)顯示說(shuō)明:8個(gè)數(shù)碼管上分兩組動(dòng)態(tài)顯示年月日與時(shí)

17、分秒,本例的 位顯示延時(shí)用定時(shí)器實(shí)現(xiàn)。*/#include#include#define uchar unsigned char#define uint unsigned int/段碼,最后一位是“-”的段碼uchar code DSY_CODE=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf;/待顯示的數(shù)據(jù):09-12-25與23-59-58(分兩組顯示)uchar code Table_of_Digits8=0,9,10,1,2,10,2,5,2,3,10,5,9,10,5,8;uchar i,j=0;uint t=0;/主程序

18、void main()P3=0x80;/位碼初值TMOD=0x00;/計(jì)數(shù)器T0方式0TH0=(8192-4000)/32;/4ms定時(shí)TL0=(8192-4000)%32;IE=0x82;TR0=1;/啟動(dòng)T0while(1);/T0中斷函數(shù)控制數(shù)碼管刷新顯示void DSY_Show() interrupt 1TH0=(8192-4000)/32;/恢復(fù)初值TL0=(8192-4000)%32;P0=0xff;/輸出位碼和段碼P0=DSY_CODETable_of_Digitsij;P3=_crol_(P3,1);j=(j+1)%8;/數(shù)組第i行的下一字節(jié)索引if(+t!=350) ret

19、urn;/保持刷新一段時(shí)間t=0;i=(i+1)%2; /數(shù)組行i=0時(shí)顯示年月日,i=1時(shí)顯示時(shí)分秒十、 用定時(shí)器設(shè)計(jì)的門(mén)鈴/*名稱:用定時(shí)器設(shè)計(jì)的門(mén)鈴說(shuō)明:按下按鍵時(shí)蜂鳴器發(fā)出叮咚的門(mén)鈴聲。*/#include#define uchar unsigned char#define uint unsigned intsbit Key=P17;sbit DoorBell=P30;uint p=0;/主程序void main()DoorBell=0;TMOD=0x00;/T0方式0TH0=(8192-700)/32;/700us定時(shí)TL0=(8192-700)%32;IE=0x82;while(1

20、)if(Key=0)/按下按鍵啟動(dòng)定時(shí)器TR0=1;while(Key=0);/T0中斷控制點(diǎn)陣屏顯示void Timer0() interrupt 1DoorBell=DoorBell;p+;if(p400)/若需要拖長(zhǎng)聲音,可以調(diào)整400和800TH0=(8192-700)/32;/700us定時(shí)TL0=(8192-700)%32;else if(p800)TH0=(8192-1000)/32;/1ms定時(shí)TL0=(8192-1000)%32;elseTR0=0;p=0;十一、 演奏音階/*名稱:演奏音階說(shuō)明:本例使用定時(shí)器演奏一段音階,播放由K1控制。*/#include#define

21、uchar unsigned char#define uint unsigned intsbit K1=P10;sbit SPK=P34;uint i=0;/音符索引/14個(gè)音符放在方式2下的定時(shí)寄存器(TH0,TL0)uchar code HI_LIST=0,226,229,232,233,236,238,240,241,242,244,245,246,247,248;uchar code LO_LIST=0,4,13,10,20,3,8,6,2,23,5,26,1,4,3;/定時(shí)器0中斷函數(shù)void T0_INT() interrupt 1TL0=LO_LISTi;TH0=HI_LISTi

22、;SPK=SPK;/延時(shí)void DelayMS(uint ms)uchar t;while(ms-) for(t=0;t120;t+);/主程序void main()TMOD=0x00;/T0方式0IE=0x82;SPK=0;while(1)while(K1=1);/未按鍵等待while(K1=0);/等待釋放for(i=1;i15;i+)TR0=1;/播放一個(gè)音符DelayMS(500);/播放延時(shí)TR0=0;DelayMS(50);十二、 按鍵控制定時(shí)器選播多段音樂(lè)/*名稱:按鍵控制定時(shí)器選播多段音樂(lè)說(shuō)明:本例內(nèi)置3段音樂(lè),K1可啟動(dòng)停止音樂(lè)播放,K2用于選擇音樂(lè)段。*/#include

23、#include#define uchar unsigned char#define uint unsigned intsbit K1=P10; /播放和停止鍵sbit SPK=P37;/蜂鳴器uchar Song_Index=0,Tone_Index=0;/當(dāng)前音樂(lè)段索引,音符索引/數(shù)碼管段碼表uchar code DSY_CODE=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/標(biāo)準(zhǔn)音符頻率對(duì)應(yīng)的延時(shí)表uchar code HI_LIST=0,226,229,232,233,236,238,240,241,242,244,245,246

24、,247,248;uchar code LO_LIST=0,4,13,10,20,3,8,6,2,23,5,26,1,4,3;/三段音樂(lè)的音符uchar code Song50=1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,3,5,6,5,3,5,3,2,1,2,1,-1,3,3,3,4,5,5,5,5,6,5,3,5,3,2,1,5,6,53,3,2,1,1,-1,3,2,1,3,2,1,1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,3,5,3,2,1,3,2,1,1,-1;/三段音樂(lè)的節(jié)拍uchar code Len50=1,1,1,1,1,1,

25、1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,-1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,-1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,2,1,1,2,2,-1;/外部中斷0void EX0_INT() interrupt 0TR0=0;/播放結(jié)束或者播放中途切換歌曲時(shí)停止播放Song_Index=(Song_Index+1)%3;/跳到下一首的開(kāi)頭Tone_Index=0;P2=DSY_CODESong_Index; /數(shù)碼管顯示

26、當(dāng)前音樂(lè)段號(hào)/定時(shí)器0中斷函數(shù)void T0_INT() interrupt 1TL0=LO_LISTSongSong_IndexTone_Index;TH0=HI_LISTSongSong_IndexTone_Index;SPK=SPK;/延時(shí)void DelayMS(uint ms)uchar t;while(ms-) for(t=0;t120;t+);/主程序void main()P2=0xc0;SPK=0;TMOD=0x00;/T0方式0IE=0x83;IT0=1;IP=0x02;while(1)while(K1=1);/未按鍵等待while(K1=0);/等待釋放TR0=1;/開(kāi)始播

27、放Tone_Index=0;/從第0個(gè)音符開(kāi)始/播放過(guò)程中按下K1可提前停止播放(K1=0)。/若切換音樂(lè)段會(huì)觸發(fā)外部中斷,導(dǎo)致TR0=0,播放也會(huì)停止while(SongSong_IndexTone_Index!=-1&K1=1&TR0=1)DelayMS(300*LenSong_IndexTone_Index);/播放延時(shí)(節(jié)拍)Tone_Index+;/當(dāng)前音樂(lè)段的下一音符索引TR0=0;/停止播放while(K1=0);/若提前停止播放,按鍵未釋放時(shí)等待十三、 定時(shí)器控制交通指示燈/*名稱:定時(shí)器控制交通指示燈說(shuō)明:東西向綠燈亮5s后,黃燈閃爍,閃爍5次亮紅燈, 紅燈亮后,南北向由紅燈

28、變成綠燈,5s后南北向黃燈閃爍, 閃爍5次后亮紅燈,東西向綠燈亮,如此往復(fù)。*/#include#define uchar unsigned char#define uint unsigned intsbit RED_A=P00; /東西向指示燈sbit YELLOW_A=P01;sbit GREEN_A=P02;sbit RED_B=P03; /南北向指示燈sbit YELLOW_B=P04;sbit GREEN_B=P05;/延時(shí)倍數(shù),閃爍次數(shù),操作類型變量uchar Time_Count=0,Flash_Count=0,Operation_Type=1;/定時(shí)器0中斷函數(shù)void T0_

29、INT() interrupt 1TL0=-50000/256;TH0=-50000%256;switch(Operation_Type)case 1:/東西向綠燈與南北向紅燈亮5sRED_A=0;YELLOW_A=0;GREEN_A=1;RED_B=1;YELLOW_B=0;GREEN_B=0;if(+Time_Count!=100) return; /5s(100*50ms)切換Time_Count=0;Operation_Type=2;break;case 2:/東西向黃燈開(kāi)始閃爍,綠燈關(guān)閉if(+Time_Count!=8) return;Time_Count=0;YELLOW_A=YELLOW_A;GREEN_A=0;if(+Flash_Count!=10) return;/閃爍Flash_Count=0;Operation_Type=3;break; case 3:/東西向紅燈與南北向綠燈亮5sRE

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論