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

下載本文檔

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

文檔簡介

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

2、;/T0 中斷函數(shù)void LED_Flash() interrupt 1 TH0=(8192-5000)/32; /TL0=(8192-5000)%32;恢復(fù)初值if(+T_Count=100) / 開關(guān)一次 LEDLED=LED;T_Count=0;二、 TIMER0 控制流水燈/* 名稱: TIMER0 控制流水燈說明:定時器控制 P0、 P2*/#include<>#include<>#define uchar unsigned char#define uint unsigned int/ 主程序void main()uchar T_Count=0;P0=0xf

3、e;P2=0xfe;TMOD=0x01;TH0=(65536-40000)/256;TL0=(65536-40000)%256;TR0=1;while(1)if(TF0=1)口的 LED滾動顯示,本例未使用中斷函數(shù)。/ 定時器 0 工作方式 1/40ms 定時/ 啟動定時器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;三、 定時器控制 4個 LED滾動閃爍/* 名稱:定時器控制 4個 LED滾動閃爍說明: 4 只 L

4、ED在定時器控制下滾動閃爍。*/#include<>#define uchar unsigned char#define uint 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;/ 定時器 0 工作方式 2TH0=256-200;/200us 定時TL0=256-200;IE=0x82;TR0=1;/ 啟動定時器while(1);/T0中斷函數(shù)void LED_Flash_and_Scroll() int

5、errupt 1if(+k<35) return; / 定時中斷若干次后執(zhí)行閃爍 k=0;switch(i)case 0: B1=B1;break;case 1: G1=G1;break;case 2: R1=R1;break;case 3: Y1=Y1;break;default:i=0;if(+j<300) return; / 每次閃爍持續(xù)一段時間 j=0;P0=0xff; / 關(guān)閉顯示i+;/ 切換到下一個 LED四、 T0 控制 LED實(shí)現(xiàn)二進(jìn)制計數(shù)/* 名稱: T0 控制 LED實(shí)現(xiàn)二進(jìn)制計數(shù) 說明:本例對按鍵的計數(shù)沒有使用查詢法,沒有使用外部中斷函數(shù),沒有使用 定時或計

6、數(shù)中斷函數(shù)。而是啟用了計數(shù) 器,連接在 T0 引腳的按鍵每次按下時, 會使計數(shù)寄存器的值遞增,其值通過 LED 以二進(jìn)制形式顯示*/ #include<>/ 主程序void main()TMOD=0x05; / 定時器 0 為計數(shù)器,工作方式 1,最大計數(shù)值 65535TH0=0; / 初值為 0TL0=0;TR0=1; / 啟動定時器while(1)P1=TH0;P2=TL0;五、TIMER0 與 TIMER1控制條形 LED /* 名稱: TIMER0與 TIMER1控制條形 LED說明:定時器 T0 定時控制上一組條形 LED,滾動速度較快定時器 T1 定時控制下一組條形 L

7、ED,滾動速度較慢*/#include<>#include<>#define uchar unsigned char#define uint unsigned int uchar tc0=0,tc1=0;/ 主程序void main()P0=0xfe;P2=0xfe;TMOD=0x11; / 定時器 0、定時器 1 均工作于方式 1 TH0=(65536-15000)/256;/ 定時器 0: 15msTL0=(65536-15000)%256;TH1=(65536-50000)/256;/ 定時器 1: 50msTL1=(65536-50000)%256;IE=0x8

8、a;TR0=1;/ 啟動定時器TR1=1;while(1);/T0 中斷函數(shù)void Time0() interrupt 1 TH0=(65536-15000)/256;/ 恢復(fù)定時器 0 初值TL0=(65536-15000)%256;tc0=0;P0=_crol_(P0,1);/T1 中斷函數(shù)void Time1() interrupt 3TH0=(65536-50000)/256;TL0=(65536-50000)%256;if(+tc1=10)tc1=0;P2=_crol_(P2,1);六、10s 的秒表/* 名稱: 10s 的秒表說明:首次按鍵計時開始,再次按鍵暫停, 第三次按鍵清零

9、。*/#include<>#define uchar unsigned char#define uint unsigned int/ 恢復(fù)定時器 1 初值/500ms 轉(zhuǎn)換狀態(tài)sbit K1=P37;uchar i,Second_Counts,Key_Flag_Idx;bit Key_State;uchar DSY_CODE=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; / 延時void DelayMS(uint ms)uchar t;while(ms-) for(t=0;t<120;t+);/ 處理按鍵事件void K

10、ey_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=0;/ 主程序void main()P2=0x3f;i=0;Second_Counts=0;Key_Flag_Idx=0;Key_State=1;TMOD=0x01;TH0=(65536-50000)/256;TL0=(65

11、536-50000)%256;while(1)if(Key_State!=K1)DelayMS(10);Key_State=K1;Key_Event_Handle();/T0 中斷函數(shù)void DSY_Refresh() interrupt 1TH0=(65536-50000)/256;TL0=(65536-50000)%256;if(+i=2)i=0;Second_Counts+;P0=DSY_CODESecondP2=DSY_CODESecond/ 按鍵次數(shù)(取值 0, 1,2,3)/ 按鍵狀態(tài)/ 定時器 0 方式 1/ 定時器 0: 15ms/ 恢復(fù)定時器 0 初值/50ms*2= 轉(zhuǎn)換

12、狀態(tài)Counts/10;Counts%10;七、用計數(shù)器中斷實(shí)現(xiàn) 100 以內(nèi)的按鍵計數(shù)/* 名稱:用計數(shù)器中斷實(shí)現(xiàn) 100 以內(nèi)的按鍵計數(shù)說明:本例用 T0 計數(shù)器中斷實(shí)現(xiàn)按鍵技術(shù),由于計數(shù)寄存器初值為 引腳的每次負(fù)跳變都會觸發(fā) T0 中斷,實(shí)現(xiàn)計數(shù)值累加。 計數(shù)器的清零用外部中斷 0 控制。*/#include<>#define uchar unsigned char#define uint unsigned int/ 段碼ucharcode因此DSY_CODE=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00;uch

13、ar Count=0;/ 主程序void main()P0=0x00;/ 計數(shù)器 T0 方式 2P2=0x00;TMOD=0x06;ET0=1;/ 允許 T0 中斷EX0=1;/允許INT0 中斷EA=1;/允許CPU中斷IP=0x02; / 設(shè)置優(yōu)先級, T0 高于 INT0IT0=1;/INT0中斷觸發(fā)方式為下降沿觸發(fā)TR0=1;/啟動T0while(1)P0=DSY_CODECount/10;P2=DSY_CODECount%10;/T0 計數(shù)器中斷函數(shù)void Key_Counter() interrupt 1Count=(Count+1)%100; / 因?yàn)橹挥袃晌粩?shù)碼管,計數(shù)控制在

14、 /INT0 中斷函數(shù)void Clear_Counter() interrupt 0Count=0;八、 100 000s 以內(nèi)的計時程序/* 名稱: 100 000s 以內(nèi)的計時程序說明:在 6 只數(shù)碼管上完成 099 。*/100 以內(nèi)( 0099)#include<>#include<> #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ù)字

15、uchar Digits_of_6DSY=0,0,0,0,0,0;uchar Count;sbit Dot=P07;/ 延時void DelayMS(uint ms)uchar t;while(ms-) for(t=0;t<120;t+);/ 主程序void main()uchar i,j;P0=0x00;P3=0xff;Count=0;TMOD=0x01;/ 計數(shù)器 T0 方式 1TH0=(65536-50000)/256;/50ms 定時TL0=(65536-50000)%256;IE=0x82;while(1)的內(nèi)容i!=0xffj=0x7f;/ 顯示 Digits_of_6DSY

16、5Digits_of_6DSY0/ 前面高位,后面低位,循環(huán)中 i!=-1 亦可寫成for(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() interrupt 1uchar i;TH0=(65536-50000)/256; / 恢復(fù)初值TL0=(65536-50000)%256;if(+Count!=2) return;Count=0;Digits_of_6DSY0+;/ 位累加for(i=0;i<=5;i+)/

17、 進(jìn)位處理if(Digits_of_6DSYi=10)else break;/ 若某低位沒有進(jìn)位,怎循環(huán)提前結(jié)束九、 定時器控制數(shù)碼管動態(tài)顯示/* 名稱:定時器控制數(shù)碼管動態(tài) 顯示說明:8 個數(shù)碼管上分兩組動 態(tài)顯示年月日與時分秒,本例的 位顯示延時用定時器實(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

18、,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;/ 主程序void main()TMOD=0x00;/ 計數(shù)器 T0 方式 0TH0=(8192-4000)/32; /4ms 定時TL0=(8192-4000)%32;IE=0x82;TR0=1;/ 啟動 T0while(1);/T0 中斷函數(shù)控制數(shù)碼管刷新顯示void DSY_Show() interrupt 1TH0=(819

19、2-4000)/32; / 恢復(fù)初值TL0=(8192-4000)%32;P0=0xff; / 輸出位碼和段碼P0=DSY_CODETable_of_Digitsij;P3=_crol_(P3,1);j=(j+1)%8; if(+t!=350) return; t=0;i=(i+1)%2;/ 數(shù)組第 i 行的下一字節(jié)索引/ 保持刷新一段時間/ 數(shù)組行 i=0 時顯示年月日, i=1 時顯示時分秒十、 用定時器設(shè)計的門鈴/* 名稱:用定時器設(shè)計的門鈴 說明:按下按鍵時蜂鳴器發(fā)出叮咚的門鈴聲。*/#include<>#define uchar unsigned char#define

20、uint unsigned int sbit Key=P17; sbit DoorBell=P30; uint p=0;/ 主程序void main()DoorBell=0;TMOD=0x00;/T0 方式 0TH0=(8192-700)/32;/700us 定時TL0=(8192-700)%32;IE=0x82;while(1)if(Key=0)/ 按下按鍵啟動定時器TR0=1;while(Key=0);/T0 中斷控制點(diǎn)陣屏顯示void Timer0() interrupt 1 DoorBell=DoorBell;p+;if(p<400)/ 若需要拖長聲音,可以調(diào)整 400 和 80

21、0TH0=(8192-700)/32; /700us 定時TL0=(8192-700)%32;else if(p<800)TH0=(8192-1000)/32; /1ms 定時TL0=(8192-1000)%32;elseTR0=0;p=0;十一、 演奏音階/* 名稱:演奏音階說明:本例使用定時器演奏一段音階,播放由 K1 控制。*/#include<>#define uchar unsigned char#define uint unsigned intsbit K1=P10;sbit SPK=P34;uint i=0;/ 音符索引/14 個音符放在方式 2 下的定時寄存器

22、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;/ 定時器 0 中斷函數(shù)void T0_INT() interrupt 1 TL0=LO_LISTi;TH0=HI_LISTi;SPK=SPK;/ 延時void DelayMS(uint ms)uchar t;while(ms-) for(t=0;t<120;t+);/ 主程序void main()TMOD=0x0

23、0;IE=0x82;SPK=0;/T0 方式 0while(1)while(K1=1);while(K1=0);for(i=1;i<15;i+) TR0=1;/ 未按鍵等待/ 等待釋放/ 播放一個音符DelayMS(500); / 播放延時TR0=0;DelayMS(50);十二、 按鍵控制定時器選播多段音樂/* 名稱:按鍵控制定時器選播多段音樂說明:本例內(nèi)置 3 段音樂, K1 可啟動 停止音樂播放, K2 用于選擇音樂段。*/#include<>#include<>#define uchar unsigned char#define uint unsigned

24、 intsbit K1=P10;/ 播放和停止鍵sbit SPK=P37;/ 蜂鳴器uchar Song_Index=0,Tone_Index=0; / 當(dāng)前音樂段索引,音符索引/ 數(shù)碼管段碼表uchar code DSY_CODE=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/ 標(biāo)準(zhǔn)音符頻率對應(yīng)的延時表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

25、,5,26,1,4,3;/ 三段音樂的音符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;/ 三段音樂的節(jié)拍uchar code Len50=1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,-1,1,

26、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é)束或者播放中途切換歌曲時停止播放Song_Index=(Song_Index+1)%3;/ 跳到下一首的開頭Tone_Index=0;P2=DSY_CODESong_Index;/ 數(shù)碼管顯示當(dāng)前音樂段號/ 定時器 0 中斷函數(shù)void T0_INT() interrupt 1

27、TL0=LO_LISTSongSong_IndexTone_Index;TH0=HI_LISTSongSong_IndexTone_Index;SPK=SPK; / 延時 void DelayMS(uint ms)uchar t;/T0 方式 0/ 未按鍵等待/ 等待釋放/ 開始播放/ 從第 0 個音符開始K1 可提前停止播放( K1=0)。while(ms-) for(t=0;t<120;t+);/ 主程序void main()P2=0xc0;SPK=0;TMOD=0x00;IE=0x83;IT0=1;IP=0x02;while(1)while(K1=1);while(K1=0);TR

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

29、亮后,南北向由紅燈變成綠燈, 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ù),操作類型變量uchar Time_Count=0,Flash_Count=0,Operation

30、_Type=1;/ 定時器 0 中斷函數(shù)void T0_INT() interrupt 1 TL0=-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: / 東西向黃燈開始閃爍,綠燈關(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: / 東西向紅燈與南北向綠燈亮 5sRED_A=1;YELLOW_A=0;GREEN_A=0;RED

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論