版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、單片機C語言程序設(shè)計實訓(xùn)100例基于8051+Proteus仿真案例目錄第 一 篇 基礎(chǔ)程序設(shè)計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 開關(guān)控制LED2019 繼電器控制照明設(shè)備2020 數(shù)碼管顯示撥碼開關(guān)編碼2121 開關(guān)控制報警器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以內(nèi)的按鍵計數(shù)3534 100 000s以內(nèi)的計時程序3635 定時器控制
3、數(shù)碼管動態(tài)顯示3836 8X8LED點陣顯示數(shù)字3937 按鍵控制8X8LED點陣屏顯示圖形4038 用定時器設(shè)計的門鈴4139 演奏音階4240 按鍵控制定時器選播多段音樂4341 定時器控制交通指示燈4542 報警與旋轉(zhuǎn)燈4743 串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)據(jù)4844 并行數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù)4945 甲機通過串口控制乙機LED5046 單片機之間雙向通信5247 單片機向主機發(fā)送字符串5648 單片機與PC通信57第 二 篇 硬件應(yīng)用5901 74LS138譯碼器應(yīng)用5902 74HC154譯碼器應(yīng)用5903 74HC595串入并出芯片應(yīng)用6004 74LS148擴展中斷6106 24C04與數(shù)
4、碼管6507 用6264擴展內(nèi)存6808 用8255實現(xiàn)接口擴展(仿真未成功)6809 555定時器實驗7010 BCD譯碼數(shù)碼管顯示數(shù)字7011 MAX7221控制數(shù)碼管動態(tài)顯示7112 LCD1602字符液晶滾動演示程序7219 用ADC0808控制PWM輸出7720 ADC0809數(shù)模轉(zhuǎn)換與顯示78第 一 篇 基礎(chǔ)程序設(shè)計01閃爍的LED/* 名稱:閃爍的LED說明:LED按設(shè)定的時間間隔閃爍*/#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)依次點亮,產(chǎ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分兩組按預(yù)設(shè)的多種花樣變換顯示*/#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此后變紅燈,東西向變綠燈,如此重復(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;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:/東西向黃燈閃爍,綠燈關(guān)閉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)語句反復(fù)將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; /關(guān)閉顯示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構(gòu)成的一串?dāng)?shù)字 本例用動態(tài)刷新法顯示一串?dāng)?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; /關(guān)閉所有數(shù)碼管并延時DelayMS(1000);10 8只數(shù)碼管滾動顯示數(shù)字串電路如上圖/*名稱:8只數(shù)碼管滾動顯示數(shù)字串說明:數(shù)碼管向左滾動顯示3個字符構(gòu)成的數(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下標(biāo)范圍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,全亮?xí)r再次按下則再次循環(huán)開始, K2按下后點亮上面4只LED,K3按下后點亮下面4只LED,K4按下后關(guān)閉所有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;/上次按鍵和當(dāng)前按鍵的序號,該矩陣中序號范圍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位轉(zhuǎn)移到低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 開關(guān)控制LED/*名稱:開關(guān)控制LED說明:開關(guān)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 繼電器控制照明設(shè)備/*名稱:繼電器控制照明設(shè)備說明:按下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ù)碼管顯示撥碼開關(guān)編碼/*名稱:數(shù)碼管顯示撥碼開關(guān)編碼說明:系統(tǒng)顯示撥碼開關(guān)所設(shè)置的編碼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;/讀取撥碼開關(guān)的值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 開關(guān)控制報警器/*名稱:開關(guān)控制報警器說明:用K1開關(guān)控制
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)系上傳者。文件的所有權(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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《唯美模板》課件
- 《禮儀插花的應(yīng)用》課件
- 單位管理制度集粹匯編人員管理十篇
- 《離合器檢修》課件
- 單位管理制度匯編大合集人事管理十篇
- 單位管理制度分享匯編【人力資源管理】十篇
- 單位管理制度分享大全職員管理篇
- 單位管理制度范例選集職員管理篇十篇
- 《中級計量經(jīng)濟學(xué)》課程教學(xué)大綱 (二)
- 八下期中測試卷02【測試范圍:第1-11課】(原卷版)
- 鄧州市龍理鄉(xiāng)第一初級中學(xué)-2025年春節(jié)寒假跨學(xué)科主題實踐作業(yè)模板【課件】
- 公司安全事故隱患內(nèi)部舉報、報告獎勵制度
- 倉儲類企業(yè)企業(yè)風(fēng)險分級管控和隱患排查治理雙體系(2022-2023手冊)
- 應(yīng)聘人員面試登記表
- 中職學(xué)校優(yōu)秀班主任事跡材料(完整版)
- 草莓采摘機械手的設(shè)計與實現(xiàn)
- 最全的官能團化合物的紅外吸收峰特征
- 世界氣候類型(圖很清晰)
- 新版【處置卡匯編】重點崗位人員應(yīng)急處置卡(全套25頁)
- EE系列磁芯參數(shù)
- 工程勘察現(xiàn)場見證報告
評論
0/150
提交評論