




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、單片機C語言程序設計實訓100例基于8051+Proteus仿真案例目錄第 一 篇 基礎程序設計101閃爍的LED102 從左到右的流水燈103 8只LED左右來回點亮204 花樣流水燈305 LED模擬交通燈406 單只數(shù)碼管循環(huán)顯示09607 8只數(shù)碼管滾動顯示單個數(shù)字608 8只數(shù)碼管動態(tài)顯示多個不同字符709 8只數(shù)碼管閃爍顯示數(shù)字串810 8只數(shù)碼管滾動顯示數(shù)字串911 K1-K4 控制LED移位1012 K1-K4 按鍵狀態(tài)顯示1113 K1-K4 分組控制LED1214 K1-K4 控制數(shù)碼管移位顯示1315 K1-K4 控制數(shù)碼管加減演示1516 4X4矩陣鍵盤控制條形LED顯
2、示1617 數(shù)碼管顯示4X4矩陣鍵盤按鍵號1818 開關控制LED2019 繼電器控制照明設備2020 數(shù)碼管顯示撥碼開關編碼2121 開關控制報警器2222 按鍵發(fā)音2323 播放音樂2424 INT0中斷計數(shù)2525 外部INT0中斷控制LED2626 INT0及INT1中斷計數(shù)2727 定時器控制單只LED2928 TIMER0控制流水燈3029 定時器控制4個LED滾動閃爍3030 T0控制LED實現(xiàn)二進制計數(shù)3131 TIMER0與TIMER1控制條形LED3232 10s的秒表3333 用計數(shù)器中斷實現(xiàn)100以內的按鍵計數(shù)3534 100 000s以內的計時程序3635 定時器控制
3、數(shù)碼管動態(tài)顯示3836 8X8LED點陣顯示數(shù)字3937 按鍵控制8X8LED點陣屏顯示圖形4038 用定時器設計的門鈴4139 演奏音階4240 按鍵控制定時器選播多段音樂4341 定時器控制交通指示燈4542 報警與旋轉燈4743 串行數(shù)據(jù)轉換為并行數(shù)據(jù)4844 并行數(shù)據(jù)轉換為串行數(shù)據(jù)4945 甲機通過串口控制乙機LED5046 單片機之間雙向通信5247 單片機向主機發(fā)送字符串5648 單片機與PC通信57第 二 篇 硬件應用5901 74LS138譯碼器應用5902 74HC154譯碼器應用5903 74HC595串入并出芯片應用6004 74LS148擴展中斷6106 24C04與數(shù)
4、碼管6507 用6264擴展內存6808 用8255實現(xiàn)接口擴展(仿真未成功)6809 555定時器實驗7010 BCD譯碼數(shù)碼管顯示數(shù)字7011 MAX7221控制數(shù)碼管動態(tài)顯示7112 LCD1602字符液晶滾動演示程序7219 用ADC0808控制PWM輸出7720 ADC0809數(shù)模轉換與顯示78第 一 篇 基礎程序設計01閃爍的LED/* 名稱:閃爍的LED說明:LED按設定的時間間隔閃爍*/#include#define uchar unsigned char#define uint unsigned intsbit LED=P10;/延時void DelayMS(uint x)u
5、char i;while(x-)for(i=0;i120;i+);/主程序void main()while(1)LED=LED;DelayMS(150);02 從左到右的流水燈/* 名稱:從左到右的流水燈說明:接在P0口的8個LED從左到右循環(huán)依次點亮,產生走馬燈效果*/#include#include#define uchar unsigned char#define uint unsigned int/延時void DelayMS(uint x)uchar i;while(x-)for(i=0;i120;i+);/主程序void main()P0=0xfe;while(1)P0=_crol
6、_(P0,1); /P0的值向左循環(huán)移動DelayMS(150);03 8只LED左右來回點亮/* 名稱:8只LED左右來回點亮說明:程序利用循環(huán)移位函數(shù)_crol_和_cror_形成來回滾動的效果*/#include#include#define uchar unsigned char#define uint unsigned int/延時void DelayMS(uint x)uchar i;while(x-)for(i=0;i120;i+);/主程序void main()uchar i;P2=0x01;while(1)for(i=0;i7;i+)P2=_crol_(P2,1); /P2的
7、值向左循環(huán)移動DelayMS(150);for(i=0;i7;i+)P2=_cror_(P2,1); /P2的值向右循環(huán)移動DelayMS(150);04 花樣流水燈/* 名稱:花樣流水燈說明:16只LED分兩組按預設的多種花樣變換顯示*/#include#define uchar unsigned char#define uint unsigned intuchar code Pattern_P0= 0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xe7,0xdb,0xbd,0
8、x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f, 0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff, 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xf
9、f,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe, 0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe, 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff;uchar cod
10、e Pattern_P2= 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0xff, 0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f, 0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xf
11、f,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f, 0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00, 0x00,0x80,0xc0,0xe0
12、,0xf0,0xf8,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff;/延時void DelayMS(uint x)uchar i;while(x-)for(i=0;i120;i+);/主程序void main()uchar i;while(1)/從數(shù)組中讀取數(shù)據(jù)送至P0和P2口顯示for(i=0;i136;i+)P0=Pattern_P0i;P2=Pattern_P2i;DelayMS(100);05 LED模擬交通燈/*名稱:LED模擬交通燈說明:東西向綠燈
13、亮若干秒,黃燈閃爍5次后紅燈亮, 紅燈亮后,南北向由紅燈變?yōu)榫G燈,若干秒后南北向黃燈閃爍5此后變紅燈,東西向變綠燈,如此重復。*/#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;uchar Flash_Count=0,Operation_Type=1; /閃爍次數(shù),操作類型變量/延時void Delay
14、MS(uint x)uchar i;while(x-) for(i=0;i120;i+);/交通燈切換void Traffic_Light()switch(Operation_Type)case 1:/東西向綠燈與南北向紅燈亮RED_A=1;YELLOW_A=1;GREEN_A=0;RED_B=0;YELLOW_B=1;GREEN_B=1;DelayMS(2000);Operation_Type=2;break;case 2:/東西向黃燈閃爍,綠燈關閉DelayMS(300);YELLOW_A=YELLOW_A;GREEN_A=1;if(+Flash_Count!=10) return; /閃
15、爍5次Flash_Count=0;Operation_Type=3;break;case 3:/東西向紅燈,南北向綠燈亮RED_A=0;YELLOW_A=1;GREEN_A=1;RED_B=1;YELLOW_B=1;GREEN_B=0;DelayMS(2000);Operation_Type=4;break;case 4:/南北向黃燈閃爍5次DelayMS(300);YELLOW_B=YELLOW_B;GREEN_B=1;if(+Flash_Count!=10) return;Flash_Count=0;Operation_Type=1;/主程序void main()while(1) Traf
16、fic_Light();06 單只數(shù)碼管循環(huán)顯示09/*名稱:單只數(shù)碼管循環(huán)顯示09說明:主程序中的循環(huán)語句反復將09的段碼送至P0口,使數(shù)字09循環(huán)顯示*/#include#include#define uchar unsigned char#define uint unsigned intuchar code DSY_CODE=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff;/延時void DelayMS(uint x)uchar t;while(x-) for(t=0;t120;t+);/主程序void main()uchar
17、 i=0;P0=0x00;while(1) /* for(;i11;i+) P0=DSY_CODEi; DelayMS(300); /注:另一方案 */P0=DSY_CODEi;i=(i+1)%10;DelayMS(300);07 8只數(shù)碼管滾動顯示單個數(shù)字/*名稱:8只數(shù)碼管滾動顯示單個數(shù)字說明:數(shù)碼管從左到右依次滾動顯示07,程序通過每次僅循環(huán)選通一只數(shù)碼管*/#include#include#define uchar unsigned char#define uint unsigned intuchar code DSY_CODE=0xc0,0xf9,0xa4,0xb0,0x99,0x9
18、2,0x82,0xf8,0x80,0x90;/延時void DelayMS(uint x)uchar t;while(x-) for(t=0;t120;t+);/主程序void main()uchar i,wei=0x80;while(1)for(i=0;i8;i+)P2=0xff; /關閉顯示wei=_crol_(wei,1);P0=DSY_CODEi; /發(fā)送數(shù)字段碼P2=wei; /發(fā)送位碼DelayMS(300);08 8只數(shù)碼管動態(tài)顯示多個不同字符電路如上圖/*名稱:8只數(shù)碼管動態(tài)顯示多個不同字符說明:數(shù)碼管動態(tài)掃描顯示07。*/#include#include#define uch
19、ar unsigned char#define uint unsigned intuchar code DSY_CODE=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/延時void DelayMS(uint x)uchar t;while(x-) for(t=0;t120;t+);/主程序void main()uchar i,wei=0x80;while(1)for(i=0;i8;i+)P2=0xff;P0=DSY_CODEi; /發(fā)送段碼wei=_crol_(wei,1);P2=wei; /發(fā)送位碼DelayMS(2);09 8只數(shù)碼管
20、閃爍顯示數(shù)字串電路如上圖/*名稱:8只數(shù)碼管閃爍顯示數(shù)字串說明:數(shù)碼管閃爍顯示由07構成的一串數(shù)字 本例用動態(tài)刷新法顯示一串數(shù)字,在停止刷新時所有數(shù)字顯示消失。*/#include#define uchar unsigned char#define uint unsigned int/段碼表uchar code DSY_CODE=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/位碼表uchar code DSY_IDX=0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80;/延時void DelayMS(uint
21、x)uchar t;while(x-) for(t=0;t120;t+);/主程序void main()uchar i,j;while(1)for(i=0;i30;i+)for(j=0;j8;j+)P0=0xff;P0=DSY_CODEj; /發(fā)送段碼P2=DSY_IDXj; /發(fā)送位碼DelayMS(2); P2=0x00; /關閉所有數(shù)碼管并延時DelayMS(1000);10 8只數(shù)碼管滾動顯示數(shù)字串電路如上圖/*名稱:8只數(shù)碼管滾動顯示數(shù)字串說明:數(shù)碼管向左滾動顯示3個字符構成的數(shù)字串*/#include#include#define uchar unsigned char#defin
22、e uint unsigned int/段碼表uchar code DSY_CODE=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff;/下面數(shù)組看作環(huán)形隊列,顯示從某個數(shù)開始的8個數(shù)(10表示黑屏)uchar Num=10,10,10,10,10,10,10,10,2,9,8;/延時void DelayMS(uint x)uchar t;while(x-) for(t=0;t120;t+);/主程序void main()uchar i,j,k=0,m=0x80;while(1)/刷新若干次,保持一段時間的穩(wěn)定顯示for(i=0;i1
23、5;i+)for(j=0;j8;j+)/發(fā)送段碼,采用環(huán)形取法,從第k個開始取第j個P0=0xff;P0=DSY_CODENum(k+j)%11; m=_crol_(m,1);P2=m; /發(fā)送位碼DelayMS(2); k=(k+1)%11;/環(huán)形隊列首支針k遞增,Num下標范圍010,故對11取余11 K1-K4 控制LED移位/*名稱:K1-K4 控制LED移位說明:按下K1時,P0口LED上移一位; 按下K2時,P0口LED下移一位; 按下K3時,P2口LED上移一位; 按下K4時,P2口LED下移一位;*/#include#include#define uchar unsigned
24、char#define uint unsigned int/延時void DelayMS(uint x)uchar i;while(x-) for(i=0;i120;i+);/根據(jù)P1口的按鍵移動LEDvoid Move_LED()if (P1&0x10)=0) P0=_cror_(P0,1); /K1else if(P1&0x20)=0) P0=_crol_(P0,1);/K2else if(P1&0x40)=0) P2=_cror_(P2,1); /K3else if(P1&0x80)=0) P2=_crol_(P2,1);/K4/主程序void main()uchar Recent_Ke
25、y;/最近按鍵P0=0xfe;P2=0xfe;P1=0xff;Recent_Key=0xff;while(1)if(Recent_Key!=P1)Recent_Key=P1; /保存最近按鍵Move_LED();DelayMS(10);12 K1-K4 按鍵狀態(tài)顯示/*名稱:K1-K4 按鍵狀態(tài)顯示說明:K1、K2按下時LED點亮,松開時熄滅, K3、K4按下并釋放時LED點亮,再次按下并釋放時熄滅;*/#include#define uchar unsigned char#define uint unsigned intsbit LED1=P00;sbit LED2=P01;sbit LED
26、3=P02;sbit LED4=P03;sbit K1=P10;sbit K2=P11;sbit K3=P12;sbit K4=P13;/延時void DelayMS(uint x)uchar i;while(x-) for(i=0;i120;i+);/主程序void main()P0=0xff;P1=0xff;while(1)LED1=K1;LED2=K2;if(K3=0)while(K3=0);LED3=LED3;if(K4=0)while(K4=0);LED4=LED4;DelayMS(10);13 K1-K4 分組控制LED/*名稱:K1-K4 分組控制LED說明:每次按下K1時遞增點
27、亮一只LED,全亮時再次按下則再次循環(huán)開始, K2按下后點亮上面4只LED,K3按下后點亮下面4只LED,K4按下后關閉所有LED*/#include#define uchar unsigned char#define uint unsigned int/延時void DelayMS(uint x)uchar i;while(x-) for(i=0;i4;k=0;/檢查1所在位置,累加獲取按鍵號kwhile(Key_State!=0)k+;Key_State=1;/根據(jù)按鍵號k進行4種處理switch(k)case 1:if(P0=0x00) P0=0xff;P0=1;DelayMS(200)
28、;break;case 2:P0=0xf0;break;case 3:P0=0x0f;break;case 4:P0=0xff;14 K1-K4 控制數(shù)碼管移位顯示/*名稱:K1-K4 控制數(shù)碼管移位顯示說明:按下K1時加1計數(shù)并增加顯示位, 按下K2時減1計數(shù)并減少顯示位, 按下K3時清零。*/#include#define uchar unsigned char#define uint unsigned int/段碼uchar code DSY_CODE=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff;/位碼uchar code
29、 DSY_Index=0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01;/待顯示到各數(shù)碼管的數(shù)字緩沖(開始僅在0位顯示0,其他黑屏)uchar Display_Buffer=0,10,10,10,10,10,10,10;/延時void DelayMS(uint x)uchar i;while(x-) for(i=0;i120;i+);void Show_Count_ON_DSY()uchar i;for(i=0;i8) Key_Counts=8;Display_BufferKey_Counts-1=Key_Counts;break;case 0xfd:if(Key
30、_Counts0)Display_Buffer-Key_Counts=10;break;case 0xfb:Display_Buffer0=0;for(i=1;i8;i+) Display_Bufferi=10;Key_Counts=0;/若鍵未釋放則僅刷新顯示,不進行鍵掃描while(P1!=0xff) Show_Count_ON_DSY();15 K1-K4 控制數(shù)碼管加減演示/*名稱:K1-K4 控制數(shù)碼管加減演示說明:按下K1后加1計數(shù),按下K2后減1計數(shù),按下K3后清零。*/#include#include#define uchar unsigned char#define uint
31、 unsigned int/段碼uchar code DSY_CODE=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff;/待顯示的3位緩沖uchar Num_Buffer=0,0,0;/按鍵代碼,按鍵計數(shù)uchar Key_Code,Key_Counts=0;/延時void DelayMS(uint x)uchar i;while(x-) for(i=0;i120;i+);/顯示函數(shù)void Show_Counts_ON_DSY()uchar i,j=0x01;Num_Buffer2=Key_Counts/100;Num_Buffe
32、r1=Key_Counts/10%10;Num_Buffer0=Key_Counts%10;for(i=0;i3;i+)j=_cror_(j,1);P0=0xff;P0=DSY_CODENum_Bufferi;P2=j;DelayMS(1);/主程序void main()uchar i;P0=0xff;P1=0xff;P2=0x00;Key_Code=0xff;while(1)Show_Counts_ON_DSY();P1=0xff;Key_Code=P1;/有鍵按下時,數(shù)碼管刷新顯示30次,該行代碼同時起到延時作用if(Key_Code!=0xff)for(i=0;i30;i+) Show_
33、Counts_ON_DSY();switch(Key_Code)case 0xfe:if(Key_Counts0) Key_Counts-;break;case 0xfb:Key_Counts=0;Key_Code=0xff;16 4X4矩陣鍵盤控制條形LED顯示/*名稱:4X4矩陣鍵盤控制條形LED顯示說明:運行本例時,按下的按鍵值越大點亮的LED越多。*/#include#include#define uchar unsigned char#define uint unsigned int/矩陣鍵盤按鍵特征碼表uchar code KeyCodeTable=0x11,0x12,0x14,0
34、x18,0x21,0x22,0x24,0x28,0x41,0x42,0x44,0x48,0x81,0x82,0x84,0x88;/延時void DelayMS(uint x)uchar i;while(x-) for(i=0;i120;i+);/鍵盤掃描uchar Keys_Scan()uchar sCode,kCode,i,k;/低4位置0,放入4行P1=0xf0;/若高4位出現(xiàn)0,則有鍵按下if(P1&0xf0)!=0xf0)DelayMS(2);if(P1&0xf0)!=0xf0)sCode=0xfe;/行掃描碼初值for(k=0;k4;k+)/對4行分別進行掃描P1=sCode;if(
35、P1&0xf0)!=0xf0)kCode=P1;for(i=0;i16;i+)/查表得到按鍵序號并返回if(kCode=KeyCodeTablei)return(i);elsesCode=_crol_(sCode,1); return(-1);/主程序void main()uchar i,P2_LED,P3_LED;uchar KeyNo=-1;/按鍵序號,-1表示無按鍵while(1)KeyNo=Keys_Scan();/掃描鍵盤獲取按鍵序號KeyNo if(KeyNo!=-1)P2_LED=0xff;P3_LED=0xff;for(i=0;i=KeyNo;i+)/鍵值越大,點亮的LED越多
36、if(i=1;elseP2_LED=1;P3=P3_LED; /點亮條形LEDP2=P2_LED;17 數(shù)碼管顯示4X4矩陣鍵盤按鍵號/*名稱:數(shù)碼管顯示4X4矩陣鍵盤按鍵號說明:按下任意鍵時,數(shù)碼管都會顯示其鍵的序號,掃描程序首先判斷按鍵發(fā)生在哪一列,然后根據(jù)所發(fā)生的行附加不同的值,從而得到按鍵的序號。*/#include#define uchar unsigned char#define uint unsigned int/段碼uchar code DSY_CODE=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0x
37、c6,0xa1,0x86,0x8e,0x00;sbit BEEP=P37;/上次按鍵和當前按鍵的序號,該矩陣中序號范圍015,16表示無按鍵uchar Pre_KeyNo=16,KeyNo=16;/延時void DelayMS(uint x)uchar i;while(x-) for(i=0;i40x0f;/按鍵后f0變成XXXX0000,X中有1個為0,三個仍為1;高4位轉移到低4位并異或得到改變的值switch(Tmp)/對03行分別附加起始值0,4,8,12case 1:KeyNo+=0;break;case 2:KeyNo+=4;break;case 4:KeyNo+=8;break;
38、case 8:KeyNo+=12;/蜂鳴器void Beep()uchar i;for(i=0;i100;i+)DelayMS(1);BEEP=BEEP;BEEP=0;/主程序void main()P0=0x00;BEEP=0;while(1)P1=0xf0;if(P1!=0xf0) Keys_Scan(); /獲取鍵序號if(Pre_KeyNo!=KeyNo)P0=DSY_CODEKeyNo;Beep();Pre_KeyNo=KeyNo;DelayMS(100);18 開關控制LED/*名稱:開關控制LED說明:開關S1和S2分別控制LED1和LED2。*/#includesbit S1=P
39、10;sbit S2=P11;sbit LED1=P00;sbit LED2=P01;/主程序void main()while(1)LED1=S1;LED2=S2;19 繼電器控制照明設備/*名稱:繼電器控制照明設備說明:按下K1燈點亮,再次按下時燈熄滅*/#include#define uchar unsigned char#define uint unsigned intsbit K1=P10;sbit RELAY=P24;/延時void DelayMS(uint ms)uchar t;while(ms-)for(t=0;t120;t+);/主程序void main()P1=0xff;RE
40、LAY=1;while(1)if(K1=0)while(K1=0);RELAY=RELAY;DelayMS(20);20 數(shù)碼管顯示撥碼開關編碼/*名稱:數(shù)碼管顯示撥碼開關編碼說明:系統(tǒng)顯示撥碼開關所設置的編碼000255*/#include#include#define uchar unsigned char#define uint unsigned int/各數(shù)字的數(shù)碼管段碼(共陰)uchar code DSY_CODE=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/顯示緩沖uchar DSY_Buffer3=0,0,0;/延時voi
41、d DelayMS(uint ms)uchar t;while(ms-)for(t=0;t120;t+);/主程序void main()uchar i,m,Num;P0=0xff;P2=0xff;while(1)m=0xfe;Num=P1;/讀取撥碼開關的值DSY_Buffer0=Num/100;DSY_Buffer1=Num/10%10;DSY_Buffer2=Num%10;for(i=0;i3;i+)/刷新顯示在數(shù)碼管上m=_crol_(m,1);P2=m;P0=DSY_CODEDSY_Bufferi;DelayMS(10);21 開關控制報警器/*名稱:開關控制報警器說明:用K1開關控制
42、報警器,程序控制P1.0輸出兩種不同頻率的聲音,模擬很逼真的報警效果*/#include#define uchar unsigned char#define uint unsigned intsbit SPK=P10;sbit K1=P17;/發(fā)聲函數(shù)void Alarm(uchar t)uchar i,j;for(i=0;i200;i+)SPK=SPK;for(j=0;jt;j+);/由參數(shù)t行成不同的頻率void main()SPK=0;while(1)if(K1=1)Alarm(90);Alarm(120);22 按鍵發(fā)音/*名稱:按鍵發(fā)音說明:按下不同的按鍵會是SOUNDER發(fā)出不同頻
43、率的聲音。本例使用延時函數(shù)實現(xiàn)不同頻率的聲音輸出,以后也可使用定時器*/#include#define uchar unsigned char#define uint unsigned intsbit BEEP=P37;sbit K1=P14;sbit K2=P15;sbit K3=P16;sbit K4=P17;/延時void DelayMS(uint x)uchar t;while(x-) for(t=0;t120;t+);/按周期t發(fā)音void Play(uchar t)uchar i;for(i=0;i100;i+)BEEP=BEEP;DelayMS(t);BEEP=0;void main()P1=0xff;BEEP=0;while(1)if(K1=0)Play(1);if(K2=0)Play(2);
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 私人勞務合同范本木工
- 房屋改建擴建合同范本
- 私人門窗訂購合同范本
- 簡易工程安裝合同范本
- 購房車位合同范本
- 江西財經大學《行政學概論》2023-2024學年第二學期期末試卷
- 上海市金山區(qū)2025屆高三練習題五(全國I卷)英語試題含解析
- 山東德州一中2025年高級高三(衛(wèi)星班)語文試題含解析
- 浙江安防職業(yè)技術學院《快題表現(xiàn)》2023-2024學年第二學期期末試卷
- 廣西醫(yī)科大學《廣告實務綜合訓練》2023-2024學年第二學期期末試卷
- 2024年新疆醫(yī)科大學附屬腫瘤醫(yī)院招聘事業(yè)單位考試真題
- 2025年《宏觀經濟政策與發(fā)展規(guī)劃》核心備考題庫(含典型題、重點題)
- 【百強校】【黑吉遼卷】黑龍江省哈爾濱市第三中學2025年高三學年第一次模擬考試(哈三中一模)語文試卷
- 腫瘤化學療法的護理
- 2025至2030年中國網球撿球籃數(shù)據(jù)監(jiān)測研究報告
- 角膜塑形鏡試戴片參數(shù)選擇和配適評估鞏朝雁課件
- 2025年河南經貿職業(yè)學院單招職業(yè)技能測試題庫1套
- Unit 1 Laugh out Loud!Understanding ideas-The Best Medicine 說課稿-2024-2025學年高中英語外研版(2019)選擇性必修第一冊
- 2024年西安經濟技術開發(fā)區(qū)管委會招聘筆試真題
- 2024年湖北工程職業(yè)學院高職單招語文歷年參考題庫含答案解析
- 初中語文記敘文閱讀專題訓練題20套(帶答案)含解析
評論
0/150
提交評論