單片機C語言程序的設(shè)計實訓(xùn)100例基于PROTEUS仿真設(shè)計_第1頁
單片機C語言程序的設(shè)計實訓(xùn)100例基于PROTEUS仿真設(shè)計_第2頁
單片機C語言程序的設(shè)計實訓(xùn)100例基于PROTEUS仿真設(shè)計_第3頁
單片機C語言程序的設(shè)計實訓(xùn)100例基于PROTEUS仿真設(shè)計_第4頁
單片機C語言程序的設(shè)計實訓(xùn)100例基于PROTEUS仿真設(shè)計_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 . 32 10s的秒表“按鍵部分有問題”/*名稱:10s的秒表說明:首次按鍵計時開始,再次按鍵暫停,第三次按鍵清零。*/#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,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/延時void DelayMS(uint ms)uchar t;while(ms-) for(t=0;t1

2、20;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=0;/主程序void main()P0=0x3f; /顯示00P2=0x3f;i=0;Second_Counts=0; Key_Flag_Idx=0; /按鍵次數(shù)(取值0,1,2,3)Key

3、_State=1; /按鍵狀態(tài)TMOD=0x01;/定時器0方式1TH0=(65536-50000)/256;/定時器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-50000)/256;/恢復(fù)定時器0初值TL0=(65536-50000)%256;if(+i=2)/50ms*2=0.1s轉(zhuǎn)換狀態(tài)i=0;Second_Counts+;P0=DSY_CODE

4、Second_Counts/10;P2=DSY_CODESecond_Counts%10;if(Second_Counts=100) Second_Counts=0;/滿100(10s)后顯示0033 用計數(shù)器中斷實現(xiàn)100以的按鍵計數(shù)/*名稱:用計數(shù)器中斷實現(xiàn)100以的按鍵計數(shù)說明:本例用T0計數(shù)器中斷實現(xiàn)按鍵技術(shù),由于計數(shù)寄存器初值為1,因此 P3.4引腳的每次負跳變都會觸發(fā)T0中斷,實現(xiàn)計數(shù)值累加。 計數(shù)器的清零用外部中斷0控制。*/#include#define uchar unsigned char#define uint unsigned int/段碼uchar code DSY_

5、CODE=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00;uchar Count=0;/主程序void main()P0=0x00; P2=0x00;TMOD=0x06;/計數(shù)器T0方式2TH0=TL0=256-1;/計數(shù)值為1ET0=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ù)器中斷函

6、數(shù)void Key_Counter() interrupt 1Count=(Count+1)%100;/因為只有兩位數(shù)碼管,計數(shù)控制在100以(0099)/INT0中斷函數(shù)void Clear_Counter() interrupt 0Count=0;34 100 000s以的計時程序/*名稱:100 000s以的計時程序說明:在6只數(shù)碼管上完成099 999.9s。*/#include#include#define uchar unsigned char#define uint unsigned int/段碼uchar code DSY_CODE=0x3f,0x06,0x5b,0x4f,0x

7、66,0x6d,0x7d,0x07,0x7f,0x6f;/6只數(shù)碼管上顯示的數(shù)字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;t120;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;TR0=1;/啟動T0whi

8、le(1)j=0x7f;/顯示Digits_of_6DSY5Digits_of_6DSY0的容/前面高位,后面低位,循環(huán)中i!=-1亦可寫成i!=0xfffor(i=5;i!=-1;i-)j=_crol_(j,1);P3=j;P0=DSY_CODEDigits_of_6DSYi;if(i=1) Dot=1;/加小數(shù)點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_6D

9、SY0+;/0.1s位累加for(i=0;i=5;i+)/進位處理if(Digits_of_6DSYi=10)Digits_of_6DSYi=0;if(i!=5) Digits_of_6DSYi+1+; /如果04位則分別向高一位進位else break;/若某低位沒有進位,怎循環(huán)提前結(jié)束35 定時器控制數(shù)碼管動態(tài)顯示/*名稱:定時器控制數(shù)碼管動態(tài)顯示說明:8個數(shù)碼管上分兩組動態(tài)顯示年月日與時分秒,本例的 位顯示延時用定時器實現(xiàn)。*/#include#include#define uchar unsigned char#define uint unsigned int/段碼,最后一位是“-”的

10、段碼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;/主程序void main()P3=0x80;/位碼初值TMOD=0x00;/計數(shù)器T0方式0TH0=(8192-4000)/32;/4ms定時TL0=(8192-4000)%32;IE=0x82;TR0=1;/

11、啟動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) return;/保持刷新一段時間t=0;i=(i+1)%2; /數(shù)組行i=0時顯示年月日,i=1時顯示時分秒36 8X8LED點陣顯示數(shù)字/*名稱:8X8LED點陣顯示數(shù)字說明:8X8LED點陣屏循環(huán)顯示數(shù)字0

12、9,刷新過程由定時器中斷完成。*/#include#include#define uchar unsigned char#define uint unsigned intuchar code Table_of_Digits=0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,0x00,/00x00,0x00,0x00,0x21,0x7f,0x01,0x00,0x00,/10x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00,/20x00,0x22,0x49,0x49,0x49,0x36,0x00,0x00,/30x00,0x0c,0x14,0x24,

13、0x7f,0x04,0x00,0x00,/40x00,0x72,0x51,0x51,0x51,0x4e,0x00,0x00,/50x00,0x3e,0x49,0x49,0x49,0x26,0x00,0x00,/60x00,0x40,0x40,0x40,0x4f,0x70,0x00,0x00,/70x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00,/80x00,0x32,0x49,0x49,0x49,0x3e,0x00,0x00/9;uchar i=0,t=0,Num_Index;/主程序void main()P3=0x80;Num_Index=0;/從0開始顯示TM

14、OD=0x00;/T0方式0TH0=(8192-2000)/32;/2ms定時TL0=(8192-2000)%32;IE=0x82;TR0=1;/啟動T0while(1);/T0中斷函數(shù)void LED_Screen_Display() interrupt 1TH0=(8192-2000)/32;/恢復(fù)初值TL0=(8192-2000)%32;P0=0xff;/輸出位碼和段碼P0=Table_of_DigitsNum_Index*8+i;P3=_crol_(P3,1);if(+i=8) i=0;/每屏一個數(shù)字由8個字節(jié)構(gòu)成if(+t=250)/每個數(shù)字刷新顯示一段時間t=0;if(+Num_I

15、ndex=10) Num_Index=0;/顯示下一個數(shù)字37 按鍵控制8X8LED點陣屏顯示圖形/*名稱:按鍵控制8X8LED點陣屏顯示圖形說明:每次按下K1時,會使8X8LED點陣屏循環(huán)顯示不同圖形。 本例同時使用外部中斷和定時中斷。*/#include#include#define uchar unsigned char#define uint unsigned int/待顯示圖形編碼uchar code M8=0x00,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x00,/圖10x00,0x38,0x44,0x54,0x44,0x38,0x00,0x00,/圖20x0

16、0,0x20,0x30,0x38,0x3c,0x3e,0x00,0x00/圖3;uchar i,j;/主程序void main()P0=0xff;P1=0xff;TMOD=0x01;/T0方式1TH0=(65536-2000)/256;/2ms定時TL0=(65536-2000)%256;IT0=1;/下降沿觸發(fā)IE=0x83;/允許定時器0、外部0中斷i=0xff;/i的初值設(shè)為0xff,加1后將從0開始while(1);/T0中斷控制點陣屏顯示void Show_Dot_Matrix() interrupt 1TH0=(65536-2000)/256;/恢復(fù)初值TL0=(65536-200

17、0)%256;P0=0xff;/輸出位碼和段碼P0=Mij;P1=_crol_(P1,1);j=(j+1)%8;/INT0中斷(定時器由鍵盤中斷啟動)void Key_Down() interrupt 0P0=0xff;P1=0x80;j=0;i=(i+1)%3;/i在0,1,2中取值,因為只要3個圖形TR0=1;38 用定時器設(shè)計的門鈴/*名稱:用定時器設(shè)計的門鈴說明:按下按鍵時蜂鳴器發(fā)出叮咚的門鈴聲。*/#include#define uchar unsigned char#define uint unsigned intsbit Key=P17;sbit DoorBell=P30;uin

18、t 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中斷控制點陣屏顯示void Timer0() interrupt 1DoorBell=DoorBell;p+;if(p400)/若需要拖長聲音,可以調(diào)整400和800TH0=(8192-700)/32;/700us定時TL0=(8192-700)%32;else if(p800)TH0=(8192-1

19、000)/32;/1ms定時TL0=(8192-1000)%32;elseTR0=0;p=0;39 演奏音階/*名稱:演奏音階說明:本例使用定時器演奏一段音階,播放由K1控制。*/#include#define uchar unsigned char#define uint unsigned intsbit K1=P10;sbit SPK=P34;uint i=0;/音符索引/14個音符放在方式2下的定時寄存器(TH0,TL0)uchar code HI_LIST=0,226,229,232,233,236,238,240,241,242,244,245,246,247,248;uchar c

20、ode LO_LIST=0,4,13,10,20,3,8,6,2,23,5,26,1,4,3;/定時器0中斷函數(shù)void T0_INT() interrupt 1TL0=LO_LISTi;TH0=HI_LISTi;SPK=SPK;/延時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;/播放一個音符DelayMS(5

21、00);/播放延時TR0=0;DelayMS(50);40 按鍵控制定時器選播多段音樂/*名稱:按鍵控制定時器選播多段音樂說明:本例置3段音樂,K1可啟動停止音樂播放,K2用于選擇音樂段。*/#include#include#define uchar unsigned char#define uint unsigned intsbit K1=P10; /播放和停止鍵sbit SPK=P37;/蜂鳴器uchar Song_Index=0,Tone_Index=0;/當前音樂段索引,音符索引/數(shù)碼管段碼表uchar code DSY_CODE=0xc0,0xf9,0xa4,0xb0,0x99,0x

22、92,0x82,0xf8,0x80,0x90;/標準音符頻率對應(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,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,

23、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,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 0T

24、R0=0;/播放結(jié)束或者播放中途切換歌曲時停止播放Song_Index=(Song_Index+1)%3;/跳到下一首的開頭Tone_Index=0;P2=DSY_CODESong_Index; /數(shù)碼管顯示當前音樂段號/定時器0中斷函數(shù)void T0_INT() interrupt 1TL0=LO_LISTSongSong_IndexTone_Index;TH0=HI_LISTSongSong_IndexTone_Index;SPK=SPK;/延時void DelayMS(uint ms)uchar t;while(ms-) for(t=0;t120;t+);/主程序void main()P

25、2=0xc0;SPK=0;TMOD=0x00;/T0方式0IE=0x83;IT0=1;IP=0x02;while(1)while(K1=1);/未按鍵等待while(K1=0);/等待釋放TR0=1;/開始播放Tone_Index=0;/從第0個音符開始/播放過程中按下K1可提前停止播放(K1=0)。/若切換音樂段會觸發(fā)外部中斷,導(dǎo)致TR0=0,播放也會停止while(SongSong_IndexTone_Index!=-1&K1=1&TR0=1)DelayMS(300*LenSong_IndexTone_Index);/播放延時(節(jié)拍)Tone_Index+;/當前音樂段的下一音符索引TR0

26、=0;/停止播放while(K1=0);/若提前停止播放,按鍵未釋放時等待41 定時器控制交通指示燈/*名稱:定時器控制交通指示燈說明:東西向綠燈亮5s后,黃燈閃爍,閃爍5次亮紅燈, 紅燈亮后,南北向由紅燈變成綠燈,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=P0

27、4;sbit GREEN_B=P05;/延時倍數(shù),閃爍次數(shù),操作類型變量uchar Time_Count=0,Flash_Count=0,Operation_Type=1;/定時器0中斷函數(shù)void T0_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

28、_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_B=0;YELLOW_B=0;GREEN_B=1;if(+Time_Count!=100) return; /

29、5s(100*50ms)切換Time_Count=0;Operation_Type=4;break;case 4:/南北向黃燈開始閃爍,綠燈關(guān)閉if(+Time_Count!=8) return;Time_Count=0;YELLOW_B=YELLOW_B;GREEN_A=0;if(+Flash_Count!=10) return;/閃爍Flash_Count=0;Operation_Type=1;break;/主程序void main()TMOD=0x01;/T0方式1IE=0x82;TR0=1;while(1);42 報警與旋轉(zhuǎn)燈/*名稱:報警與旋轉(zhuǎn)燈說明:定時器控制報警燈旋轉(zhuǎn)顯示,并發(fā)出

30、仿真警報聲。*/#include#include#define uchar unsigned char#define uint unsigned intsbit SPK=P37;uchar FRQ=0x00;/延時void DelayMS(uint ms)uchar i;while(ms-) for(i=0;i120;i+);/INT0中斷函數(shù)void EX0_INT() interrupt 0TR0=TR0;/開啟或停止兩定時器,分別控制報警器的聲音和LED旋轉(zhuǎn)TR1=TR1;if(P2=0x00)P2=0xe0;/開3個旋轉(zhuǎn)燈elseP2=0x00;/關(guān)閉所有LED/定時器0中斷void

31、T0_INT() interrupt 1TH0=0xfe;TL0=FRQ;SPK=SPK;/定時器1中斷void T1_INT() interrupt 3TH1=-45000/256;TL1=-45000%256;P2=_crol_(P2,1);/主程序void main()P2=0x00;SPK=0x00;TMOD=0x11;/T0、T1方式1TH0=0x00;TL0=0xff;IT0=1;IE=0x8b;/開啟0,1,3號中斷IP=0x01;/INT0設(shè)為最高優(yōu)先TR0=0;TR1=0;/定時器啟停由INT0控制,初始關(guān)閉while(1)FRQ+;DelayMS(1);43 串行數(shù)據(jù)轉(zhuǎn)換為

32、并行數(shù)據(jù)/*名稱:串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)據(jù)說明:串行數(shù)據(jù)由RXD發(fā)送給串并轉(zhuǎn)換芯片74164,TXD則用于輸出移位時鐘脈沖,74164將串行輸入的1字節(jié)轉(zhuǎn)換為并行數(shù)據(jù),并將轉(zhuǎn)換的數(shù)據(jù)通過8只LED顯示出來。本例串口工作模式0,即移位寄存器I/O模式。*/#include#include#define uchar unsigned char#define uint unsigned intsbit SPK=P37;uchar FRQ=0x00;/延時void DelayMS(uint ms)uchar i;while(ms-) for(i=0;i120;i+);/主程序void main()uch

33、ar c=0x80;SCON=0x00;/串口模式0,即移位寄存器輸入/輸出方式TI=1;while(1)c=_crol_(c,1);SBUF=c;while(TI=0);/等待發(fā)送結(jié)束TI=0; /TI軟件置位DelayMS(400);44 并行數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù)/*名稱:并行數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù)說明:切換連接到并串轉(zhuǎn)換芯片74LS165的撥碼開關(guān),該芯片將并行數(shù)據(jù)以串行方式發(fā)送到8051的RXD引腳,移位脈沖由TXD提供,顯示在P0口。*/#include#include#include#define uchar unsigned char#define uint unsigned ints

34、bit SPL=P25;/shift/load/延時void DelayMS(uint ms)uchar i;while(ms-) for(i=0;i120;i+);/主程序void main()SCON=0x10;/串口模式0,允許串口接收while(1)SPL=0;/置數(shù)(load),讀入并行輸入口的8位數(shù)據(jù)SPL=1;/移位(shift),并口輸入被封鎖,串行轉(zhuǎn)換開始while(RI=0);/未接收1字節(jié)時等待RI=0; /RI軟件置位P0=SBUF;/接收到的數(shù)據(jù)顯示在P0口,顯示撥碼開關(guān)的值DelayMS(20);45 甲機通過串口控制乙機LED/*名稱:甲機發(fā)送控制命令字符說明:甲

35、單片機負責向外發(fā)送控制命令字符“A”、“B”、“C”,或者停止發(fā)送,乙機根據(jù)所接收到的字符完成LED1閃爍、LED2閃爍、雙閃爍、或停止閃爍。*/#include#define uchar unsigned char#define uint unsigned intsbit LED1=P00;sbit LED2=P03;sbit K1=P10;/延時void DelayMS(uint ms)uchar i;while(ms-) for(i=0;i120;i+);/向串口發(fā)送字符void Putc_to_SerialPort(uchar c)SBUF=c;while(TI=0);TI=0;/主程

36、序void main()uchar Operation_No=0;SCON=0x40;/串口模式1TMOD=0x20;/T1工作模式2PCON=0x00;/波特率不倍增TH1=0xfd;TL1=0xfd;TI=0;TR1=1;while(1)if(K1=0)/按下K1時選擇操作代碼0,1,2,3while(K1=0);Operation_No=(Operation_No+1)%4;switch(Operation_No)/根據(jù)操作代碼發(fā)送A/B/C或停止發(fā)送case 0:LED1=LED2=1;break;case 1:Putc_to_SerialPort(A);LED1=LED1;LED2=

37、1;break;case 2:Putc_to_SerialPort(B);LED2=LED2;LED1=1;break;case 3:Putc_to_SerialPort(C);LED1=LED1;LED2=LED1;break;DelayMS(100);/*名稱:乙機程序接收甲機發(fā)送字符并完成相應(yīng)動作說明:乙機接收到甲機發(fā)送的信號后,根據(jù)相應(yīng)信號控制LED完成不同閃爍動作。*/#include#define uchar unsigned char#define uint unsigned intsbit LED1=P00;sbit LED2=P03;/延時void DelayMS(uint

38、ms)uchar i;while(ms-) for(i=0;i120;i+);/主程序void main()SCON=0x50;/串口模式1,允許接收TMOD=0x20;/T1工作模式2PCON=0x00;/波特率不倍增TH1=0xfd;/波特率9600TL1=0xfd;RI=0;TR1=1;LED1=LED2=1;while(1)if(RI)/如收到則LED閃爍RI=0;switch(SBUF)/根據(jù)所收到的不同命令字符完成不同動作case A:LED1=LED1;LED2=1;break;/LED1閃爍case B:LED2=LED2;LED1=1;break;/LED2閃爍case C:

39、LED1=LED1;LED2=LED1;/雙閃爍else LED1=LED2=1;/關(guān)閉LEDDelayMS(100);46 單片機之間雙向通信/*名稱:甲機串口程序說明:甲機向乙機發(fā)送控制命令字符,甲機同時接收乙機發(fā)送的數(shù)字,并顯示在數(shù)碼管上。*/#include#define uchar unsigned char#define uint unsigned intsbit LED1=P10;sbit LED2=P13;sbit K1=P17;uchar Operation_No=0;/操作代碼/數(shù)碼管代碼uchar code DSY_CODE=0x3f,0x06,0x5b,0x4f,0x6

40、6,0x6d,0x7d,0x07,0x7f,0x6f;/延時void DelayMS(uint ms)uchar i;while(ms-) for(i=0;i=0&SBUF=9) P0=DSY_CODESBUF;else P0=0x00;/*名稱:乙機程序接收甲機發(fā)送字符并完成相應(yīng)動作說明:乙機接收到甲機發(fā)送的信號后,根據(jù)相應(yīng)信號控制LED完成不同閃爍動作。*/#include#define uchar unsigned char#define uint unsigned intsbit LED1=P10;sbit LED2=P13;sbit K2=P17;uchar NumX=-1;/延時v

41、oid DelayMS(uint ms)uchar i;while(ms-) for(i=0;i120;i+);/主程序void main()LED1=LED2=1;SCON=0x50;/串口模式1,允許接收TMOD=0x20;/T1工作模式2TH1=0xfd;/波特率9600TL1=0xfd;PCON=0x00;/波特率不倍增RI=TI=0;TR1=1;IE=0x90;while(1)DelayMS(100);if(K2=0)while(K2=0);NumX=+NumX%11;/產(chǎn)生010圍的數(shù)字,其中10表示關(guān)閉SBUF=NumX;while(TI=0);TI=0;void Serial_

42、INT() interrupt 4if(RI)/如收到則LED則動作RI=0;switch(SBUF)/根據(jù)所收到的不同命令字符完成不同動作case X:LED1=LED2=1;break;/全滅case A:LED1=0;LED2=1;break;/LED1亮case B:LED2=0;LED1=1;break;/LED2亮case C:LED1=LED2=0;/全亮47 單片機向主機發(fā)送字符串/*名稱:單片機向主機發(fā)送字符串說明:單片機按一定的時間間隔向主機發(fā)送字符串,發(fā)送容在虛擬終端顯示。*/#include#define uchar unsigned char#define uint unsigned int/延時void DelayMS(uint ms)uchar i;while(ms-) for(i=0;i120;i+);/向串口發(fā)送字符void Putc_to_SerialPort(uchar c)SBUF=c;while(TI=0);TI=0;/向串口發(fā)送字符串void Puts_to_SerialPort(uchar *s)while(*s!=0)Putc_to_SerialPort(*s);s+;DelayMS(5);/主程序void main()uchar c=0;SCON=0x40;

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論