




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
單片機C語言程序設(shè)計項目搶答器的實現(xiàn)搶答器的實現(xiàn)任務(wù)目錄任務(wù)一開關(guān)控制LED燈顯示任務(wù)二數(shù)碼管顯示按鍵按下次數(shù)任務(wù)三多路搶答器的實現(xiàn)開關(guān)控制LED燈顯示任務(wù)介紹開關(guān)閉合,8個LED燈依次點亮,實現(xiàn)流水燈效果;開關(guān)斷開,8個LED燈全亮。硬件電路單片機最小系統(tǒng)電路、8個LED燈電路、開關(guān)電路軟件設(shè)計雙分支結(jié)構(gòu)實現(xiàn)程序,識別閉合時,實現(xiàn)流水燈;否則,8個LED全部點亮。開關(guān)控制LED燈顯示1順序結(jié)構(gòu)程序設(shè)計2選擇結(jié)構(gòu)程序設(shè)計3循環(huán)結(jié)構(gòu)程序設(shè)計4函數(shù)、數(shù)組主要內(nèi)容5按鍵、數(shù)碼管順序結(jié)構(gòu)程序設(shè)計AB按照程序中語句書寫的順序從上到下一條一條依次執(zhí)行概念任務(wù)分析首先點亮D1,保持一段時間后,熄滅D1,點亮D2,保持一段時間后,熄滅D2,點亮D3……依次類推,直到點亮D8,然后停止流水燈效果流水燈電路序號名稱Proteus中元件名參數(shù)數(shù)量1單片機STC15W4K32S412LED燈LED-RED
83排阻RX81K1流水燈控制原理端口的控制電平為低,LED燈亮;端口的控制電平為高,LED燈滅端口數(shù)據(jù)D8D7D6D5D4D3D2D1狀態(tài)1滅滅滅滅滅滅滅亮端口數(shù)據(jù):0XFE11111110狀態(tài)2滅滅滅滅滅滅亮滅端口數(shù)據(jù):0XFD11111101狀態(tài)3滅滅滅滅滅亮滅滅端口數(shù)據(jù):0XFB11111011流水燈程序設(shè)計端口數(shù)據(jù)D8D7D6D5D4D3D2D10xfe滅滅滅滅滅滅滅亮0xfd滅滅滅滅滅滅亮滅0xfb滅滅滅滅滅亮滅滅0xf7滅滅滅滅亮滅滅滅0xef滅滅滅亮滅滅滅滅0xdf滅滅亮滅滅滅滅滅0xbf滅亮滅滅滅滅滅滅0x7f亮滅滅滅滅滅滅滅通過賦值語句分8次將數(shù)據(jù)依次輸出到P1口流水燈程序設(shè)計P1=0XFE…………延時P1=0XFD延時voidmain() {P1M0=0X00;P1M1=0X00;while(1){
P1=0xfe;
delay_nms(1000);
P1=0xfd; delay_nms(1000);
P1=0xfb; delay_nms(1000);
P1=0xf7; delay_nms(1000);
P1=0xef; delay_nms(1000);
P1=0xdf; delay_nms(1000);
P1=0xbf; delay_nms(1000);
P1=0x7f; delay_nms(1000); }}主函數(shù)賦值語句函數(shù)調(diào)用語句P1=0X7F延時流水燈工作的原理、設(shè)計流程、源程序51單片機順序結(jié)構(gòu)程序設(shè)計的原理和方法小結(jié)if語句if–else語句
選擇語句選擇結(jié)構(gòu)程序設(shè)計開關(guān)控制燈序號名稱Proteus中元件名參數(shù)數(shù)量1單片機STC15W4K32S412LED燈LED-RED
13排阻RX81K14按鍵button1選擇結(jié)構(gòu)程序設(shè)計LED燈開關(guān)原理按鍵按下時,P3.2=0按鍵松開時,P3.2=1P1=0xFFP1=0x00LED開關(guān)程序設(shè)計if(表達式)語句語句YN表達式條件:判斷P3.2電平的高低狀態(tài)執(zhí)行語句:P1輸出高低電平LED開關(guān)程序設(shè)計#include<stc15.h>sbitSW=P3^2voidmain(void){P1M0=0x00;P1M1=0X00;P3M0=0x00;P3M1=0X00;P1=0X00; while(1) { if(SW==0)P1=0xff; if(SW==1)P1=0X00; }}確定燈初始為亮循環(huán)判斷操作關(guān)系運算符==而非賦值運算符=sbitSW=P3^2LED開關(guān)程序設(shè)計if(表達式)語句1else
語句2P1=0x00P1=0xff高低P3.2語句1語句2真假表達式LED開關(guān)程序設(shè)計#include<stc15.h>sbitSW=P3^2voidmain(void){P1M0=0x00;P1M1=0X00;P3M0=0x00;P3M1=0X00;P1=0X00; while(1) { if(SW==0)P1=0xff; elseP1=0X00; }}雙分支if-else語句LED開關(guān)的工作原理51單片機分支結(jié)構(gòu)程序設(shè)計小結(jié)If語句和if-else語句實現(xiàn)了LED開關(guān)國家法律、國家利益、人民利益高于一切。我們不僅要學(xué)好專業(yè)知識,有高超的專業(yè)技術(shù)能力,設(shè)計出高質(zhì)量的產(chǎn)品,還要具有強烈的法制意識,高尚的職業(yè)道德,良好的技術(shù)操守,為我們的國家我們的社會貢獻自己的力量。if–elseif-else語句switch語句
選擇語句多分支結(jié)構(gòu)程序設(shè)計開關(guān)控制燈序號名稱Proteus中元件名參數(shù)數(shù)量1單片機STC15W4K32S412LED燈LED-RED
43排阻RX81K14按鍵button4多分支語句if(表達式1)語句1elseif(表達式2)語句2…………elseif(表達式n)語句nelse語句n+1條件是按鍵引腳上電平的高低,語句i是LED引腳上輸出高低電平LED開關(guān)分析要求:4個按鍵對應(yīng)4個指示燈,S1按下,僅D1亮,S2按下,僅D2亮,S3按下,僅D3亮,S4按下,僅D4亮,其他情況,燈全滅。LED開關(guān)分析要求:4個按鍵對應(yīng)4個指示燈,S1按下,僅D1亮,S2按下,僅D2亮,S3按下,僅D3亮,S4按下,僅D4亮,其他情況,燈全滅。(P34==0)&&(P35==1)&&(P36==1)&&(P37==1)(P34==1)&&(P35==0)&&(P36==1)&&(P37==1){D1=0;D2=1;D3=1;D4=1;}{D1=1;D2=0;D3=1;D4=1;}4個LED開關(guān)程序設(shè)計#defineD1P10#defineD2P11#defineD3P12#defineD4P13#defineS1P34#defineS2P35#defineS3P36#defineS4P37
voidmain(){P1M0=0x00;P1M1=0X00;P3M0=0x00;P3M1=0X00;D1=1;D2=1;D3=1;D4=1;while(1){
if((S1==0)&&(S2==1)&&(S3==1)&&(S4==1)){D1=0;D2=1;D3=1;D4=1;}
elseif((S1==1)&&(S2==0)&&(S3==1)&&(S4==1)){D1=1;D2=0;D3=1;D4=1;} elseif((S1==1)&&(S2==1)&&(S3==0)&&(S4==1)){D1=1;D2=1;D3=0;D4=1;}
elseif((S1==1)&&(S2==1)&&(S3==1)&&(S4==0)){D1=1;D2=1;D3=1;D4=0;}else{D1=1;D2=1;D3=1;D4=1;}}}復(fù)合語句關(guān)系運算符==邏輯運算符&&多分支語句switch(表達式){case常量表達式1:[語句組1][break;]case常量表達式2:[語句組2][break;]
…
…
…
…
…
…
…
……
…
…case常量表達式n:[語句組n][break;][default:語句組n+1]}執(zhí)行過程:先計算表達式的值,然后依次與每一個case中的常量表達式的值進行比較,若有相等的,則從該case開始依次往下執(zhí)行,若沒有相等的,則從default開始往下執(zhí)行。條件算法分析(P3^4==0)&&(P3^5==1)&&(P3^6==1)&&(P3^7==1)(P3^4==1)&&(P3^5==0)&&(P3^6==1)&&(P3^7==1)(P3^4==0)&&(P3^5==1)&&(P3^6==1)&&(P3^7==1)(P3^4==1)&&(P3^5==0)&&(P3^6==1)&&(P3^7==1)P3端口:需要保留位“&”上1,不需保留的“&”上0即P3&二進制數(shù)11110000即P3&0xf0位與常量值計算P3口P3.7P3.6P3.5P3.4P3.3P3.2P3.1P3.0&0xf011110000S1按下:0xe011100000S2按下:0xd011010000S3按下:0xb010110000S4按下:0x7001110000S1S2S3S4S1S2按下:0xc011000000S1-S4按下:0x00000000004個LED開關(guān)程序設(shè)計#include<stc15.h>voidmain(void){P1M0=0x00;P1M1=0X00;P3M0=0x00;P3M1=0X00;unsignedcharkey_value=0;while(1){ key_value=P3&0xf0;switch(key_value){ case0xe0:P1=0xfe;break;//點亮D1 case0xd0:P1=0xfd;break;//點亮D2 case0xb0:P1=0xfb;break;//點亮D3 case0x70:P1=0xf7;break;//點亮D4default:P1=0xff;//否則滅燈} } }存放開關(guān)S4~S1的狀態(tài)if-elseif-else語句實現(xiàn)了4路開關(guān)LED51單片機多分支結(jié)構(gòu)程序設(shè)計小結(jié)switch語句實現(xiàn)了4路開關(guān)LED#include<stc15.h>voidmain(void){P1M0=0x00;P1M1=0X00;P3M0=0x00;P3M1=0X00;unsignedcharkey_value=0;while(1){ key_value=P3&0xf0;switch(key_value){ case0xe0:P1=0xfe;break;//點亮D1 case0xd0:P1=0xfd;break;//點亮D2 case0xb0:P1=0xfb;break;//點亮D3 case0x70:P1=0xf7;break;//點亮D4default:P1=0xff;} } }while(1)無限循環(huán)實例循環(huán)結(jié)構(gòu)程序設(shè)計1while語句2do-while語句
3for語句
循環(huán)語句循環(huán)結(jié)構(gòu)程序設(shè)計while(表達式){
循環(huán)體語句}循環(huán)體真假表達式voidmain(void){P1M0=0x00;P1M1=0X00;P3M0=0x00;P3M1=0X00;unsignedcharkey_value=0;while(1){ key_value=P3&0xf0;switch(key_value){ case0xe0:P1=0xfe;break; case0xd0:P1=0xfd;break; case0xb0:P1=0xfb;break; case0x70:P1=0xf7;break;default:P1=0xff;} } }循環(huán)結(jié)構(gòu)程序設(shè)計do{
循環(huán)體語句}while(表達式);voidmain(void){P1M0=0x00;P1M1=0X00;P3M0=0x00;P3M1=0X00;unsignedcharkey_value=0;
do{ key_value=P3&0xf0;switch(key_value){ case0xe0:P1=0xfe;break; case0xd0:P1=0xfd;break; case0xb0:P1=0xfb;break; case0x70:P1=0xf7;break;default:P1=0xff;} }while(1);
}循環(huán)結(jié)構(gòu)之延時函數(shù)/*延時函數(shù)*/voiddelay_ms(unsignedintms){unsignedinti;
do{ i=MAIN_Fosc/13000;
while(--i);}while(--ms);}#defineMAIN_Fosc 11059200L //定義主時鐘循環(huán)執(zhí)行i次空操作“;”循環(huán)次數(shù)i值的計算i是估算值,時間不精準for語句for(表達式1;表達式2;表達式3){
循環(huán)體語句}YN
表達式2
表達式3
表達式1
循環(huán)體for(i=0;i<10;i++){
循環(huán)體語句}voiddelay_ms(unsignedintms){;;;;}voidmain() {
P1=0xfe;
delay(20000);
P1=0xfd; delay(20000);
P1=0xfb; delay(20000);
P1=0xf7; delay(20000);
P1=0xef; delay(20000);
P1=0xdf; delay(20000);
P1=0xbf; delay(20000);
P1=0x7f; delay(20000);
while(1); //結(jié)束}流水燈程序順序結(jié)構(gòu)順序結(jié)構(gòu)循環(huán)結(jié)構(gòu)設(shè)計流水燈程序8次P1=0XFE…………延時1秒P1=0XFD延時1秒P1=0X7F延時1秒P1=常數(shù)1…………延時1秒P1=常數(shù)2延時1秒P1=常數(shù)8延時1秒過程不變數(shù)據(jù)在變數(shù)據(jù)變量算法表示循環(huán)結(jié)構(gòu)設(shè)計流水燈程序“<<”運算端口數(shù)據(jù)1D7D6D5D4D3D2D10xfe111111100xfd111111010xfb111110110xf7111101110xef111011110xdf110111110xbf101111110x7f011111111111111011111100<<111111101+111111010<<111111011+1led=(led<<1)+1;循環(huán)結(jié)構(gòu)設(shè)計流水燈程序8次P1=常數(shù)1…………延時1秒P1=常數(shù)2延時1秒P1=常數(shù)8延時1秒滿8次嗎否是循環(huán)體語句組:P1=led;延時Led=(led<<1)+1;變量led賦初始值0xfe循環(huán)結(jié)構(gòu)設(shè)計流水燈程序voidmain() {unsignedchar i,led;P1M0=0x00;P1M1=0X00;while(1){
led=0xfe;
for(i=0;i<8;i++) { P1=led; delay_ms(1000); led=led<<1; led=led+1;
}}}外循環(huán)體內(nèi)循環(huán)體滿8次?否是循環(huán)體語句組:P1=led;延時Led=(led<<1)+1;變量賦初始值循環(huán)結(jié)構(gòu)之流水燈程序小結(jié)初始化循環(huán)控制循環(huán)體100%循環(huán)結(jié)構(gòu)程序設(shè)計魯迅先生說:偉大的成績和辛勤勞動是成正比例的,有一分勞動,就有一分收獲,日積月累,從少到多,奇跡就可以創(chuàng)造出來。voidmain() {unsigned
chari,led;
P1M0=0x00;P1M1=0X00;while(1){ led=0xfe; for(i=0;i<8;i++) {P1=led; delay(1000); led=led<<1; led=led+1;
}}}實例任務(wù)循環(huán)結(jié)構(gòu)實現(xiàn)流水燈庫函數(shù)標準庫函數(shù)是由C51編譯器提供的,用戶可以直接調(diào)用,以頭文件的形式給出//STC15.HsfrP0=0x80;sbitP00=P0^0;sbitP01=P0^1;sbitP02=P0^2;sbitP03=P0^3;sbitP04=P0^4;sbitP05=P0^5;sbitP06=P0^6;sbitP07=P0^7;intrins.h庫函數(shù)Intrins.h功能_cror_(v,n)將字符型數(shù)據(jù)向右環(huán)移若干位_crol_(v,n)將字符型數(shù)據(jù)向左環(huán)移若干位_iror_(v,n)將整形型數(shù)據(jù)向右環(huán)移若干位_irol_(v,n)將整形型數(shù)據(jù)向左環(huán)移若干位_lror_(v,n)將長整形型數(shù)據(jù)向右環(huán)移若干位_lrol_(v,n)將長整形型數(shù)據(jù)向左環(huán)移若干位_nop_()空操作,相當(dāng)于匯編語言中的NOPv為變量,n為移位的位數(shù)環(huán)移函數(shù)_crol_(led,1)環(huán)移是指數(shù)據(jù)在內(nèi)部進行循環(huán)移位,最高位和最低位不會丟棄也不會填01111111011111101
voidmain() {P1M0=0x00;P1M1=0X00;unsignedchar i,led;while(1){
led=0xfe;
for(i=0;i<8;i++)
{
P1=led;
delay_ms(1000); led=led<<1;led=led+1;} }}voidmain() {P1M0=0x00;P1M1=0X00;unsignedcharled;led=0xfe;while(1){
P1=led; delay_ms(1000); led=_crol_(led,1);}}庫函數(shù)intrins.h庫函數(shù)中的移位操作函數(shù)小結(jié)用庫函數(shù)中的環(huán)移函數(shù)設(shè)計了流水燈程序函數(shù)定義和調(diào)用
自定義函數(shù)是用戶根據(jù)需要自行編寫的函數(shù),它必須先定義再調(diào)用。voiddelay_ms(unsignedintms){unsignedinti;
do{ i=MAIN_Fosc/13000; while(--i);}while(--ms);}voidmain() {P1M0=0x00;P1M1=0X00;unsignedchari,led;led=0xfe;while(1){ P1=led; delay_nms(1000); led=_crol_(led,1);}}函數(shù)調(diào)用函數(shù)定義自定義函數(shù)voiddelay_ms(unsignedintms){unsignedinti;do{ i=MAIN_Fosc/13000; while(--i);}while(--ms);}函數(shù)類型函數(shù)名(形式參數(shù)表){局部變量定義函數(shù)體語句return表達式;}自定義函數(shù)voidmove_left(unsignedcharval){unsignedchari;P1=val;for(i=0;i<8;i++) { delay_ms(1000); P1=_crol_(P1,1); }}voidmain(void){P1M0=0x00;P1M1=0X00;unsignedcharled;while(1){ led=0xfe;move_left(led);led=0x7f;move_right(led);}}設(shè)計2個函數(shù),函數(shù)功能是分別是流水燈D1~D8逐個移動和D8~D1逐個移動,在主函數(shù)中調(diào)用函數(shù),實現(xiàn)流水燈正反向反復(fù)流動。voidmove_right(unsignedcharval){unsignedchari;P1=val;for(i=0;i<8;i++) { delay_ms(1000); P1=_cror_(P1,1); }}voidmain() {P1M0=0x00;P1M1=0X00;unsigned char led;led=0xfe;while(1){ P1=led; delay_ms(1000); led=_crol_(led,1);}}}數(shù)組數(shù)組端口數(shù)據(jù)D8D7D6D5D4D3D2D1D2亮:0xfd11111101D8亮:0x7f01111111D7亮:0xbf10111111D4亮:0xf711110111D5亮:0xef11101111D6亮:0xdf11011111D1亮:0xfe11111110D3亮:0xfb11111011霓虹燈:依次點亮D2D8D7D4D5D6D1D3數(shù)據(jù)變化無規(guī)律,無法用算法表示數(shù)據(jù)霓虹燈數(shù)據(jù)數(shù)組voidmain() //主函數(shù){P1M0=0x00;P1M1=0X00;
while(1)//無限循環(huán)
{ P1=0xfd;
delay_ms(1000);
P1=0x7f;
delay_ms(1000);
P1=0xbf;
delay_ms(1000);
P1=0xf7;
delay_ms(1000);
P1=0xef;
delay_ms(1000);
P1=0xdf;
delay_ms(1000);
P1=0xfe;
delay_ms(1000);
P1=0xfb;
delay_ms(1000); }}
led0led1led7ledilediledi霓虹燈:依次點亮D2D8D7D4D5D6D1D3霓虹燈程序分析數(shù)組的使用100%相同類型的數(shù)據(jù)才能組成數(shù)組,不同類型的數(shù)據(jù)不能構(gòu)成數(shù)組,同一數(shù)組中的每個數(shù)據(jù)稱為數(shù)組元素數(shù)組一般定義格式為:類型數(shù)組名[常量表達式];
unsignedcharled[8];可以通過使用下標led[i]來引用這些元素一維數(shù)組初始化unsignedcharled[8]={0xfd,0x7f,0xbf,0xf7,0xef,0xdf,0xfe,0xfb}數(shù)組的使用123數(shù)組#include<stc15.h>voidmain()
{P1M0=0x00;P1M1=0X00;unsignedcharled[8]={0xfd,0x7f,0xbf,0xf7,0xef,0xdf,0xfe,0xfb};//數(shù)組的定義和初始化unsignedchari;
while(1) //主(外)循環(huán) { for(i=0;i<8;i++)//內(nèi)循環(huán) { P1=led[i]; //數(shù)組元素引用 delay_ms(1000); } }}主(外)循環(huán)循環(huán)次數(shù)+1送數(shù)組元素延時1s
8次到?YN數(shù)組初始化霓虹燈控制程序設(shè)計庫函數(shù)#include<stc15.h>codeunsignedcharled[8]={0xfd,0x7f,0xbf,0xf7,0xef,0xdf,0xfe,0xfb};//數(shù)組定義在程序存儲區(qū)voidmain()
{P1M0=0x00;P1M1=0X00;unsignedchari;
while(1) //主(外)循環(huán) { for(i=0;i<8;i++)//內(nèi)循環(huán) { P1=led[i];//數(shù)組元素引用 delay_ms(1000); } }}數(shù)組定義在代碼區(qū)使用數(shù)組設(shè)計循環(huán)結(jié)構(gòu)霓虹燈程序數(shù)組優(yōu)化程序設(shè)計的方法小結(jié)項目搶答器的實現(xiàn)搶答器的實現(xiàn)任務(wù)目錄任務(wù)一開關(guān)控制LED燈顯示任務(wù)二數(shù)碼管顯示按鍵按下次數(shù)任務(wù)三多路搶答器的實現(xiàn)項目任務(wù)實現(xiàn)1位共陽極數(shù)碼管顯示按鍵按下次數(shù)序號名稱Proteus中元件名參數(shù)數(shù)量1單片機STC15W4K32S412LED數(shù)碼管7seg-com-anode13排阻RX847014按鍵button1數(shù)碼管顯示按鍵按下次數(shù)1數(shù)碼管2獨立按鍵主要內(nèi)容數(shù)組數(shù)碼管的應(yīng)用數(shù)碼管的分類數(shù)碼管的外觀和引腳數(shù)碼管的內(nèi)部結(jié)構(gòu)abcdefgCOM共陽極bcadefgCOM共陰極數(shù)碼管的內(nèi)部電路及公共端控制共陽極共陰極VCCGND數(shù)碼管電路設(shè)計在共陽極數(shù)碼管上循環(huán)顯示數(shù)字0~9電路設(shè)計序號名稱Proteus中元件名參數(shù)數(shù)量1單片機STC15W4K32S412LED數(shù)碼管7seg-com-anode
13排阻RX84701數(shù)碼管電路設(shè)計在共陽極數(shù)碼管上循環(huán)顯示數(shù)字0~9電路設(shè)計數(shù)碼管為共陽管,公共端接電源;受控端a~g采用低電平點亮數(shù)碼管,通過限流電阻連接到單片機P0口;阻值越大,電流越小,數(shù)碼管點亮?xí)r越暗,阻值越小,電流越大,數(shù)碼管點亮?xí)r越亮,但阻值過小,會導(dǎo)致P0口的總負載電流過大數(shù)碼管顯示原理dpgfedcba11000000字形碼0XC0111110010XF9端口的控制電平為低,LED燈亮;端口的控制電平為高,LED燈滅數(shù)碼管字形碼顯示字符共陰字形碼共陽字形碼顯示字符共陰字形碼共陽字形碼03FHC0H96FH90H106HF9HA77H88H25BHA4HB7CH83H34FHB0HC39HC6H466H99HD5EHA1H56DH92HE79H86H67DH82HF71H8EH707HF8HP73H8CH87FH80H“滅”00HFFH數(shù)碼管顯示控制原理顯示數(shù)字共陽極共陰極0C03F1F9062A45B3B04F499665926D6827D7F8078807F9906F共陽數(shù)碼管,如果要顯示“0”,單片機只要給連接到受控端的并口輸出0XC0,如果要顯示“1”,給并口輸出0XF9,以此類推;共陰數(shù)碼管,如果要顯示“0”,單片機只要給連接到受控端的并口輸出0X3F,如果要顯示“1”,給并口輸出0X06,以此類推;單片機只要將字形碼輸出到并口,數(shù)碼管就會顯示字形碼對應(yīng)的字符程序控制原理數(shù)碼管靜態(tài)顯示程序設(shè)計voidmain() {P0M0=0x00;P0M1=0X00;while(1)
{P0=0xc0; delay_ms(1000);
P0=0xf9; delay_ms(1000);
P0=0xa4; delay_ms(1000);
P0=0xb0; delay_ms(1000);
P0=0x99; delay_ms(1000);
P0=0x92; delay_ms(1000);
P0=0x82; delay_ms(1000);
P0=0xf8; delay_ms(1000);
P0=0x80; delay_ms(1000);
P0=0x90; delay_ms(1000);}}設(shè)計程序:在共陽極數(shù)碼管上循環(huán)顯示數(shù)字0~9P0=0XC0…………延時1秒P0=0XF9延時1秒P0=0X90延時1秒將字形碼定義成一個數(shù)組,優(yōu)化程序數(shù)組#include<stc15.h>voiddelay_ms(unsignedintms);#defineMAIN_Fosc11059200L unsignedcharsegtab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};voidmain(void)
{unsignedchari=0;
P0M0=0x00;P0M1=0X00;
while(1) //主(外)循環(huán){for(i=0;i<10;i++)//內(nèi)循環(huán){P0=segtab[i];//數(shù)組元素引用delay_ms(1000);}}}主(外)循環(huán)循環(huán)次數(shù)+1送數(shù)組元素延時1s
循環(huán)10次?YN數(shù)組初始化數(shù)碼管靜態(tài)顯示程序設(shè)計數(shù)碼管外部引腳、內(nèi)部電路及顯示原理小結(jié)共陽碼和共陰碼設(shè)計靜態(tài)顯示電路和控制程序,實現(xiàn)了循環(huán)顯示0~9數(shù)碼管顯示按鍵按下次數(shù)——按鍵庫函數(shù)搶答器——按鍵的使用庫函數(shù)按鍵按鍵分類什么是按鍵編碼鍵盤
非編碼鍵盤
矩陣鍵盤鍵盤上按鍵的識別由專用的硬件編碼器實現(xiàn),并產(chǎn)生鍵值。如:普通的PC鍵盤(PS2接口、USB接口)。需要靠軟件編程來識別按鍵的稱為非編碼鍵盤,在單片機組成的各種系統(tǒng)中,用的最多。獨立按鍵按鍵:又稱按鈕開關(guān),是嵌入式系統(tǒng)中常見的一種人機交互輸入設(shè)備。分類什么是按鍵ABCD
AD引腳內(nèi)部連通BC引腳內(nèi)部連通按鍵與單片機的連接序號名稱Proteus中元件名參數(shù)數(shù)量1單片機STC15W4K32S412按鍵button4按鍵測試按鍵用作開關(guān):在proteus中編程實現(xiàn)按鍵按下,P1.0連接燈亮,按鍵彈起來,燈滅;按鍵測試:在proteus中編程實現(xiàn)按鍵按下一次,P1.0連接燈狀態(tài)切換一次。按鍵的識別P3.2引腳電平狀態(tài)思考:如何判斷按鍵是否按下一次?機械式按鍵按鍵所用開關(guān)為機械彈性開關(guān),當(dāng)機械觸點斷開、閉合時,由于機械觸點的彈性作用,不能馬上穩(wěn)定地接通或斷開,最終由于機械在過渡時的不穩(wěn)定會以電信號抖動的形式體現(xiàn)出來。
按鍵實際波形:機械式按鍵機械式按鍵抖動時間:長短由按鍵的機械特性決定,一般為5ms~10ms;按鍵按下:一般為20ms按鍵按下時的電平變化:干擾、噪聲:去抖方法如何消抖:(1)硬件消抖
RS觸發(fā)器:常用并聯(lián)電容法:利用電容的的硬件去抖。
放電延時,實現(xiàn)硬件消抖。
去抖方法如何消抖:(2)軟件消抖
軟件消抖的方法:檢測出鍵閉合后執(zhí)行一個延時程序(10ms左右的延時),等待抖動消失后再檢測一次鍵的狀態(tài),如果仍然保持閉合狀態(tài),則確認為真正有鍵按下。
5-10ms20ms10ms獨立式按鍵電路設(shè)計開始按鍵是否按下延時去抖按鍵是否按下執(zhí)行按鍵功能按鍵是否釋放按鍵測試:在proteus中編程實現(xiàn)按鍵按下一次,P1.0連接燈狀態(tài)切換次。YNYYNN20ms獨立式按鍵電路設(shè)計開始按鍵是否按下延時去抖按鍵是否按下執(zhí)行按鍵功能按鍵是否釋放按鍵測試:在proteus中編程實現(xiàn)按鍵按下一次,P1.0連接燈狀態(tài)切換次。YNYYNN20ms機械式按鍵內(nèi)容拓展:1.如何優(yōu)化軟件去抖部分10ms的延時程序段;2.是否需要后延去抖;3.如何識別按鍵雙擊;
期待你的解決思路或者效果展示!統(tǒng)計按鍵次數(shù),顯示在單個數(shù)碼管上,按鍵次數(shù)不超過9次獨立式按鍵電路設(shè)計序號名稱Proteus中元件名參數(shù)數(shù)量1單片機STC15W4K32S4127段共陽數(shù)碼管7seg-com-anode
13排阻RX847014按鍵button1獨立式按鍵判別處理流程P3.2==0?NP3.2==0?YNY延時幾個ms去抖P3.2==0?NY次數(shù)+1,顯示退出按鍵狀態(tài)判別:判到按下,軟件消抖;確認按鍵按下的處理;按鍵松開判別次數(shù)超9,清0數(shù)碼管顯示按鍵次數(shù)程序sbitKEY=P3^2;unsignedcharcodesegtab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0xff};voidmain(void){unsignedcharnum=0;//統(tǒng)計按鍵次數(shù)的變量P0M0=0x00;P0M1=0X00;P3M0&=~0X04;P3M1&=~0X04;P0=segtab[0];//數(shù)碼管初始顯示0while(1){if(KEY==0)//按鍵引腳電平是否為0,為0,有可能有按鍵按下{delay_ms(10);//去抖動if(KEY==0)//再次判斷按鍵引腳電平是否為0,為0,有按鍵按下 {num++;if(num>9)num=0; }while(KEY==0); //等待按鍵釋放
}P0=segtab[num];}}4個按鍵,在單個數(shù)碼管上,顯示按鍵號按鍵電路設(shè)計4個按鍵判別處理方法是否有任意按鍵按下;有鍵按下,延時消抖;確認鍵號,按鍵處理;等待該鍵松開保留位”&1”,其他位”&0”即P3&二進制數(shù)11110000即P3&0xf0位與P3&0xf0P3.7P3.6P3.5P3.4P3.3P3.2P3.1P3.0無鍵按下:0xf011110000S1按下:0xe011100000S2按下:0xd011010000S3按下:0xb010110000S2按下:0x70011100004個按鍵判別處理流程P3&0xf0=0xf0?NNYY延時10msYY顯示”1”退出P3&0xf0=0xf0?P3&0xf0=0xf0?顯示”2”顯示”3”顯示”4”N0xe00xd00xb00x70顯示按鍵號程序unsignedcharcodesegtab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0xff};voidmain(){P0M0=0x00;P0M1=0X00;P3M0&=~0X04;P3M1&=~0X04;P0=0xff;while(1) {if((P3&0xf0)!=0xf0)//高4位不為f,有鍵按下 {delay_ms(10);//去抖動 if((P3&0xf0)!=0xf0)//高4位不為f,有鍵按下 {switch(P3&0xf0) {case0xe0:P0=segtab[1];break;//1號鍵 case0xd0:P0=segtab[2];break;//2號鍵 case0xb0:P0=segtab[3];break;//3號鍵
case0x70:P0=segtab[4];break;//4號鍵
default:P0=0xff;};//無鍵 } while((P3&0xf0)!=0xf0);//等待釋放 } }}按鍵的去抖原理小結(jié)獨立式按鍵的電路設(shè)計和判別處理實現(xiàn)了用一位數(shù)碼管顯示按鍵次數(shù)和按鍵號謝謝觀看!項目搶答器的實現(xiàn)搶答器的實現(xiàn)任務(wù)目錄任務(wù)一開關(guān)控制LED燈顯示任務(wù)二數(shù)碼管顯示按鍵按下次數(shù)任務(wù)三多路搶答器的實現(xiàn)搶答器的實現(xiàn)主持人有一個開始搶答命令按鍵任務(wù)功能3個選手各有一個搶答按鍵當(dāng)主持人按下開始按鍵后,數(shù)碼管顯示“P”,允許選手開始搶答,否則搶答無效;某選手按下對應(yīng)的按鍵后,數(shù)碼管顯示選手號,蜂鳴器鳴叫一段時間,此時其他選手不允許搶答;當(dāng)主持人重新按下對應(yīng)的按鍵后,上述動作繼續(xù)主裁判點評在搶答的任意環(huán)節(jié),主裁判可打斷進行點評;點評后,恢復(fù)打斷前的狀態(tài)選手裁判主持搶答器硬件電路設(shè)計序號名稱Proteus中元件名參數(shù)數(shù)量1單片機STC15W4K32S4127段共陽數(shù)碼管7seg-com-anode
13排阻RX847014按鍵button55蜂鳴器buzzer16三極管PNP17電阻RES22018發(fā)光二極管LED8蜂鳴器蜂鳴器是一種一體化結(jié)構(gòu)的電子訊響器,根據(jù)使用方式分為:無源蜂鳴器:內(nèi)驅(qū)動部無震蕩源,需要2KHZ-5KHZ的方波信號驅(qū)動有源蜂鳴器:內(nèi)帶震蕩源,接入額定的電源電壓驅(qū)動無源蜂鳴器:內(nèi)部不帶震蕩源,所以如果用直流信號無法令其鳴叫。必須用2K~5K的方波去驅(qū)動它。優(yōu)點是:1.便宜2.聲音頻率可控,可以做出“多來米發(fā)索拉西”的效果。(a)有源蜂鳴器(b)無源蜂鳴器蜂鳴器蜂鳴器的工作電流在30mA左右,單片機的I/O口輸出電流:拉電流:<1mA灌電流:10mA單片機的I/O口不足以驅(qū)動蜂鳴器,需要接驅(qū)動電路。蜂鳴器sbitBUZZER=P3^6; voidmain() {
while(1) {
BUZZER=0;delay_ms(500);
BUZZER=1;delay_ms(500);} }搶答器的實現(xiàn)主持人有一個開始搶答命令按鍵任務(wù)功能3個選手各有一個搶答按鍵當(dāng)主持人按下開始按鍵后,數(shù)碼管顯示“P”,允許選手開始搶答,否則搶答無效;某選手按下對應(yīng)的按鍵后,數(shù)碼管顯示選手號,蜂鳴器鳴叫一段時間,此時其他選手不允許搶答;當(dāng)主持人重新按下對應(yīng)的按鍵后,上述動作繼續(xù)主裁判點評在搶答的任意環(huán)節(jié),主裁判可打斷進行點評;點評后,恢復(fù)打斷前的狀態(tài)選手裁判主持搶答器軟件程序設(shè)計循環(huán)內(nèi)有2個函數(shù),一個是判主持人是否按下開始鍵的函數(shù)chairman_scan();一個是判選手是否按下?lián)尨疰I的函數(shù)player_scan();chairman_scan()給出主持人是否按下的標識,根據(jù)該標識來確定是否執(zhí)行player_scan()Y初始化state=1?Nplayer_scan()chairman_scan()程序主函數(shù)bitstate=0;//初始狀態(tài)不允許搶答voidmain(void){IO_Init();P0=0xff;//關(guān)數(shù)碼管state=0;//初始狀態(tài)不允許搶答while(1){ chairman_scan(); //掃描主持人按鍵if(state==1){ player_scan(); //掃描選手按鍵
}}}主持人按鍵函數(shù)sbitCHAIRMAN=P3^1;voidchairman_scan()//主持人掃描函數(shù)定義{ if(CHAIRMAN==0) { delay_ms(10);//去抖動
if(CHAIRMAN==0) { state=1; P0=0x8c; //顯示"P",表示開始搶答
}while(CHAIRMAN==0); //等待按鍵釋放 }}P3&0x38=0x38?NNYY延時幾個msYY顯示”1”退出P3&0x38=0x38?P3&0x38=0x38?顯示”2”顯示”3”關(guān)閉顯示N0x300x280x18其他選手按鍵函數(shù)增加state=0;增加beep();選手按鍵函數(shù)
voidplayer_scan(){if((P3&0x38)!=0x38) {delay_ms(10);//去抖動 if((P3&0x38)!=0x38) {switch(P3&0x38){ case0x30:P0=segtab[1];P1=~0x01;break; case0x28:P0=segtab[2];P1=~0x02;break;case0x18:P0=segtab[3];P1=~0x04;break;default:P0=0xff;P1=0xff;} state=0;beep();//聲音提示
while((P3&0x38)!=0x38); //等待按鍵釋放}
}}蜂鳴器鳴叫函數(shù)sbitBUZZER=P3^6;voidbeep(){unsignedchari;for(i=0;i<200;i++)//產(chǎn)生200個周期為1ms左右的方波
{delay_ms(1);//延時1ms
BUZZER=~BUZZER;//產(chǎn)生方波
}}IO初始化voidIO_Init(){P0M0=0x00;P0M1=0x00;//設(shè)置P0工作于準雙向口模式P1M0=0x00;P1M1=0x00;//設(shè)置P1工作于準雙向口模式P3M0=0x00;P3M1=0x00;//設(shè)置P3工作于準雙向口模式}搶答器的實現(xiàn)主持人有一個開始搶答命令按鍵任務(wù)功能3個選手各有一個搶答按鍵當(dāng)主持人按下開始按鍵后,數(shù)碼管顯示“P”,允許選手開始搶答,否則搶答無效;某選手按下對應(yīng)的按鍵后,數(shù)碼管顯示選手號,蜂鳴器鳴叫一段時間,此時其他選手不允許搶答;當(dāng)主持人重新按下對應(yīng)的按鍵后,上述動作繼續(xù)主裁判點評在搶答的
溫馨提示
- 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)試技巧試題及答案
- 提升項目管理技能的考試題材試題及答案
- 微生物檢驗技術(shù)的質(zhì)量控制機制試題及答案
- 掌握學(xué)生需求與輔導(dǎo)員考試的策略試題及答案
- 項目執(zhí)行方案提綱范本
- 內(nèi)容整合2025年證券從業(yè)資格證考試試題及答案
- 高校輔導(dǎo)員選拔中的情境模擬考核試題及答案
- 2024年高效微生物檢測技術(shù)試題及答案
- 2024年項目管理考試提分試題及答案
- 墨水生產(chǎn)過程中的質(zhì)量監(jiān)控考核試卷
- 教科版小學(xué)科學(xué)六年級下冊單元練習(xí)試題及答案(全冊)
- 餐飲督導(dǎo)培訓(xùn)課件
- 嘉峪關(guān)的壯麗長城之旅
- 臨床研究數(shù)據(jù)的合理解讀與報告撰寫
- 中考英語閱讀理解:圖表類(附參考答案)
- 農(nóng)作物病蟲害防治服務(wù)投標方案(技術(shù)標)
- 堿金屬元素教案及反思
- 掃地機器人創(chuàng)業(yè)項目計劃書
- 自愿贈與10萬協(xié)議書范本
- 學(xué)校教學(xué)常規(guī)檢查記錄表
- 單位車輛領(lǐng)取免檢標志委托書范本
評論
0/150
提交評論