




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
單片機C語言程序設計項目搶答器的實現搶答器的實現任務目錄任務一開關控制LED燈顯示任務二數碼管顯示按鍵按下次數任務三多路搶答器的實現開關控制LED燈顯示任務介紹開關閉合,8個LED燈依次點亮,實現流水燈效果;開關斷開,8個LED燈全亮。硬件電路單片機最小系統電路、8個LED燈電路、開關電路軟件設計雙分支結構實現程序,識別閉合時,實現流水燈;否則,8個LED全部點亮。開關控制LED燈顯示1順序結構程序設計2選擇結構程序設計3循環結構程序設計4函數、數組主要內容5按鍵、數碼管順序結構程序設計AB按照程序中語句書寫的順序從上到下一條一條依次執行概念任務分析首先點亮D1,保持一段時間后,熄滅D1,點亮D2,保持一段時間后,熄滅D2,點亮D3……依次類推,直到點亮D8,然后停止流水燈效果流水燈電路序號名稱Proteus中元件名參數數量1單片機STC15W4K32S412LED燈LED-RED
83排阻RX81K1流水燈控制原理端口的控制電平為低,LED燈亮;端口的控制電平為高,LED燈滅端口數據D8D7D6D5D4D3D2D1狀態1滅滅滅滅滅滅滅亮端口數據:0XFE11111110狀態2滅滅滅滅滅滅亮滅端口數據:0XFD11111101狀態3滅滅滅滅滅亮滅滅端口數據:0XFB11111011流水燈程序設計端口數據D8D7D6D5D4D3D2D10xfe滅滅滅滅滅滅滅亮0xfd滅滅滅滅滅滅亮滅0xfb滅滅滅滅滅亮滅滅0xf7滅滅滅滅亮滅滅滅0xef滅滅滅亮滅滅滅滅0xdf滅滅亮滅滅滅滅滅0xbf滅亮滅滅滅滅滅滅0x7f亮滅滅滅滅滅滅滅通過賦值語句分8次將數據依次輸出到P1口流水燈程序設計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); }}主函數賦值語句函數調用語句P1=0X7F延時流水燈工作的原理、設計流程、源程序51單片機順序結構程序設計的原理和方法小結if語句if–else語句
選擇語句選擇結構程序設計開關控制燈序號名稱Proteus中元件名參數數量1單片機STC15W4K32S412LED燈LED-RED
13排阻RX81K14按鍵button1選擇結構程序設計LED燈開關原理按鍵按下時,P3.2=0按鍵松開時,P3.2=1P1=0xFFP1=0x00LED開關程序設計if(表達式)語句語句YN表達式條件:判斷P3.2電平的高低狀態執行語句:P1輸出高低電平LED開關程序設計#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; }}確定燈初始為亮循環判斷操作關系運算符==而非賦值運算符=sbitSW=P3^2LED開關程序設計if(表達式)語句1else
語句2P1=0x00P1=0xff高低P3.2語句1語句2真假表達式LED開關程序設計#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開關的工作原理51單片機分支結構程序設計小結If語句和if-else語句實現了LED開關國家法律、國家利益、人民利益高于一切。我們不僅要學好專業知識,有高超的專業技術能力,設計出高質量的產品,還要具有強烈的法制意識,高尚的職業道德,良好的技術操守,為我們的國家我們的社會貢獻自己的力量。if–elseif-else語句switch語句
選擇語句多分支結構程序設計開關控制燈序號名稱Proteus中元件名參數數量1單片機STC15W4K32S412LED燈LED-RED
43排阻RX81K14按鍵button4多分支語句if(表達式1)語句1elseif(表達式2)語句2…………elseif(表達式n)語句nelse語句n+1條件是按鍵引腳上電平的高低,語句i是LED引腳上輸出高低電平LED開關分析要求:4個按鍵對應4個指示燈,S1按下,僅D1亮,S2按下,僅D2亮,S3按下,僅D3亮,S4按下,僅D4亮,其他情況,燈全滅。LED開關分析要求:4個按鍵對應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開關程序設計#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;}}}復合語句關系運算符==邏輯運算符&&多分支語句switch(表達式){case常量表達式1:[語句組1][break;]case常量表達式2:[語句組2][break;]
…
…
…
…
…
…
…
……
…
…case常量表達式n:[語句組n][break;][default:語句組n+1]}執行過程:先計算表達式的值,然后依次與每一個case中的常量表達式的值進行比較,若有相等的,則從該case開始依次往下執行,若沒有相等的,則從default開始往下執行。條件算法分析(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&二進制數11110000即P3&0xf0位與常量值計算P3口P3.7P3.6P3.5P3.4P3.3P3.2P3.1P3.0&0xf011110000S1按下:0xe011100000S2按下:0xd011010000S3按下:0xb010110000S4按下:0x7001110000S1S2S3S4S1S2按下:0xc011000000S1-S4按下:0x00000000004個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;//否則滅燈} } }存放開關S4~S1的狀態if-elseif-else語句實現了4路開關LED51單片機多分支結構程序設計小結switch語句實現了4路開關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)無限循環實例循環結構程序設計1while語句2do-while語句
3for語句
循環語句循環結構程序設計while(表達式){
循環體語句}循環體真假表達式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;} } }循環結構程序設計do{
循環體語句}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);
}循環結構之延時函數/*延時函數*/voiddelay_ms(unsignedintms){unsignedinti;
do{ i=MAIN_Fosc/13000;
while(--i);}while(--ms);}#defineMAIN_Fosc 11059200L //定義主時鐘循環執行i次空操作“;”循環次數i值的計算i是估算值,時間不精準for語句for(表達式1;表達式2;表達式3){
循環體語句}YN
表達式2
表達式3
表達式1
循環體for(i=0;i<10;i++){
循環體語句}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); //結束}流水燈程序順序結構順序結構循環結構設計流水燈程序8次P1=0XFE…………延時1秒P1=0XFD延時1秒P1=0X7F延時1秒P1=常數1…………延時1秒P1=常數2延時1秒P1=常數8延時1秒過程不變數據在變數據變量算法表示循環結構設計流水燈程序“<<”運算端口數據1D7D6D5D4D3D2D10xfe111111100xfd111111010xfb111110110xf7111101110xef111011110xdf110111110xbf101111110x7f011111111111111011111100<<111111101+111111010<<111111011+1led=(led<<1)+1;循環結構設計流水燈程序8次P1=常數1…………延時1秒P1=常數2延時1秒P1=常數8延時1秒滿8次嗎否是循環體語句組:P1=led;延時Led=(led<<1)+1;變量led賦初始值0xfe循環結構設計流水燈程序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;
}}}外循環體內循環體滿8次?否是循環體語句組:P1=led;延時Led=(led<<1)+1;變量賦初始值循環結構之流水燈程序小結初始化循環控制循環體100%循環結構程序設計魯迅先生說:偉大的成績和辛勤勞動是成正比例的,有一分勞動,就有一分收獲,日積月累,從少到多,奇跡就可以創造出來。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;
}}}實例任務循環結構實現流水燈庫函數標準庫函數是由C51編譯器提供的,用戶可以直接調用,以頭文件的形式給出//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庫函數Intrins.h功能_cror_(v,n)將字符型數據向右環移若干位_crol_(v,n)將字符型數據向左環移若干位_iror_(v,n)將整形型數據向右環移若干位_irol_(v,n)將整形型數據向左環移若干位_lror_(v,n)將長整形型數據向右環移若干位_lrol_(v,n)將長整形型數據向左環移若干位_nop_()空操作,相當于匯編語言中的NOPv為變量,n為移位的位數環移函數_crol_(led,1)環移是指數據在內部進行循環移位,最高位和最低位不會丟棄也不會填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);}}庫函數intrins.h庫函數中的移位操作函數小結用庫函數中的環移函數設計了流水燈程序函數定義和調用
自定義函數是用戶根據需要自行編寫的函數,它必須先定義再調用。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);}}函數調用函數定義自定義函數voiddelay_ms(unsignedintms){unsignedinti;do{ i=MAIN_Fosc/13000; while(--i);}while(--ms);}函數類型函數名(形式參數表){局部變量定義函數體語句return表達式;}自定義函數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);}}設計2個函數,函數功能是分別是流水燈D1~D8逐個移動和D8~D1逐個移動,在主函數中調用函數,實現流水燈正反向反復流動。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);}}}數組數組端口數據D8D7D6D5D4D3D2D1D2亮:0xfd11111101D8亮:0x7f01111111D7亮:0xbf10111111D4亮:0xf711110111D5亮:0xef11101111D6亮:0xdf11011111D1亮:0xfe11111110D3亮:0xfb11111011霓虹燈:依次點亮D2D8D7D4D5D6D1D3數據變化無規律,無法用算法表示數據霓虹燈數據數組voidmain() //主函數{P1M0=0x00;P1M1=0X00;
while(1)//無限循環
{ 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霓虹燈程序分析數組的使用100%相同類型的數據才能組成數組,不同類型的數據不能構成數組,同一數組中的每個數據稱為數組元素數組一般定義格式為:類型數組名[常量表達式];
unsignedcharled[8];可以通過使用下標led[i]來引用這些元素一維數組初始化unsignedcharled[8]={0xfd,0x7f,0xbf,0xf7,0xef,0xdf,0xfe,0xfb}數組的使用123數組#include<stc15.h>voidmain()
{P1M0=0x00;P1M1=0X00;unsignedcharled[8]={0xfd,0x7f,0xbf,0xf7,0xef,0xdf,0xfe,0xfb};//數組的定義和初始化unsignedchari;
while(1) //主(外)循環 { for(i=0;i<8;i++)//內循環 { P1=led[i]; //數組元素引用 delay_ms(1000); } }}主(外)循環循環次數+1送數組元素延時1s
8次到?YN數組初始化霓虹燈控制程序設計庫函數#include<stc15.h>codeunsignedcharled[8]={0xfd,0x7f,0xbf,0xf7,0xef,0xdf,0xfe,0xfb};//數組定義在程序存儲區voidmain()
{P1M0=0x00;P1M1=0X00;unsignedchari;
while(1) //主(外)循環 { for(i=0;i<8;i++)//內循環 { P1=led[i];//數組元素引用 delay_ms(1000); } }}數組定義在代碼區使用數組設計循環結構霓虹燈程序數組優化程序設計的方法小結項目搶答器的實現搶答器的實現任務目錄任務一開關控制LED燈顯示任務二數碼管顯示按鍵按下次數任務三多路搶答器的實現項目任務實現1位共陽極數碼管顯示按鍵按下次數序號名稱Proteus中元件名參數數量1單片機STC15W4K32S412LED數碼管7seg-com-anode13排阻RX847014按鍵button1數碼管顯示按鍵按下次數1數碼管2獨立按鍵主要內容數組數碼管的應用數碼管的分類數碼管的外觀和引腳數碼管的內部結構abcdefgCOM共陽極bcadefgCOM共陰極數碼管的內部電路及公共端控制共陽極共陰極VCCGND數碼管電路設計在共陽極數碼管上循環顯示數字0~9電路設計序號名稱Proteus中元件名參數數量1單片機STC15W4K32S412LED數碼管7seg-com-anode
13排阻RX84701數碼管電路設計在共陽極數碼管上循環顯示數字0~9電路設計數碼管為共陽管,公共端接電源;受控端a~g采用低電平點亮數碼管,通過限流電阻連接到單片機P0口;阻值越大,電流越小,數碼管點亮時越暗,阻值越小,電流越大,數碼管點亮時越亮,但阻值過小,會導致P0口的總負載電流過大數碼管顯示原理dpgfedcba11000000字形碼0XC0111110010XF9端口的控制電平為低,LED燈亮;端口的控制電平為高,LED燈滅數碼管字形碼顯示字符共陰字形碼共陽字形碼顯示字符共陰字形碼共陽字形碼03FHC0H96FH90H106HF9HA77H88H25BHA4HB7CH83H34FHB0HC39HC6H466H99HD5EHA1H56DH92HE79H86H67DH82HF71H8EH707HF8HP73H8CH87FH80H“滅”00HFFH數碼管顯示控制原理顯示數字共陽極共陰極0C03F1F9062A45B3B04F499665926D6827D7F8078807F9906F共陽數碼管,如果要顯示“0”,單片機只要給連接到受控端的并口輸出0XC0,如果要顯示“1”,給并口輸出0XF9,以此類推;共陰數碼管,如果要顯示“0”,單片機只要給連接到受控端的并口輸出0X3F,如果要顯示“1”,給并口輸出0X06,以此類推;單片機只要將字形碼輸出到并口,數碼管就會顯示字形碼對應的字符程序控制原理數碼管靜態顯示程序設計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);}}設計程序:在共陽極數碼管上循環顯示數字0~9P0=0XC0…………延時1秒P0=0XF9延時1秒P0=0X90延時1秒將字形碼定義成一個數組,優化程序數組#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) //主(外)循環{for(i=0;i<10;i++)//內循環{P0=segtab[i];//數組元素引用delay_ms(1000);}}}主(外)循環循環次數+1送數組元素延時1s
循環10次?YN數組初始化數碼管靜態顯示程序設計數碼管外部引腳、內部電路及顯示原理小結共陽碼和共陰碼設計靜態顯示電路和控制程序,實現了循環顯示0~9數碼管顯示按鍵按下次數——按鍵庫函數搶答器——按鍵的使用庫函數按鍵按鍵分類什么是按鍵編碼鍵盤
非編碼鍵盤
矩陣鍵盤鍵盤上按鍵的識別由專用的硬件編碼器實現,并產生鍵值。如:普通的PC鍵盤(PS2接口、USB接口)。需要靠軟件編程來識別按鍵的稱為非編碼鍵盤,在單片機組成的各種系統中,用的最多。獨立按鍵按鍵:又稱按鈕開關,是嵌入式系統中常見的一種人機交互輸入設備。分類什么是按鍵ABCD
AD引腳內部連通BC引腳內部連通按鍵與單片機的連接序號名稱Proteus中元件名參數數量1單片機STC15W4K32S412按鍵button4按鍵測試按鍵用作開關:在proteus中編程實現按鍵按下,P1.0連接燈亮,按鍵彈起來,燈滅;按鍵測試:在proteus中編程實現按鍵按下一次,P1.0連接燈狀態切換一次。按鍵的識別P3.2引腳電平狀態思考:如何判斷按鍵是否按下一次?機械式按鍵按鍵所用開關為機械彈性開關,當機械觸點斷開、閉合時,由于機械觸點的彈性作用,不能馬上穩定地接通或斷開,最終由于機械在過渡時的不穩定會以電信號抖動的形式體現出來。
按鍵實際波形:機械式按鍵機械式按鍵抖動時間:長短由按鍵的機械特性決定,一般為5ms~10ms;按鍵按下:一般為20ms按鍵按下時的電平變化:干擾、噪聲:去抖方法如何消抖:(1)硬件消抖
RS觸發器:常用并聯電容法:利用電容的的硬件去抖。
放電延時,實現硬件消抖。
去抖方法如何消抖:(2)軟件消抖
軟件消抖的方法:檢測出鍵閉合后執行一個延時程序(10ms左右的延時),等待抖動消失后再檢測一次鍵的狀態,如果仍然保持閉合狀態,則確認為真正有鍵按下。
5-10ms20ms10ms獨立式按鍵電路設計開始按鍵是否按下延時去抖按鍵是否按下執行按鍵功能按鍵是否釋放按鍵測試:在proteus中編程實現按鍵按下一次,P1.0連接燈狀態切換次。YNYYNN20ms獨立式按鍵電路設計開始按鍵是否按下延時去抖按鍵是否按下執行按鍵功能按鍵是否釋放按鍵測試:在proteus中編程實現按鍵按下一次,P1.0連接燈狀態切換次。YNYYNN20ms機械式按鍵內容拓展:1.如何優化軟件去抖部分10ms的延時程序段;2.是否需要后延去抖;3.如何識別按鍵雙擊;
期待你的解決思路或者效果展示!統計按鍵次數,顯示在單個數碼管上,按鍵次數不超過9次獨立式按鍵電路設計序號名稱Proteus中元件名參數數量1單片機STC15W4K32S4127段共陽數碼管7seg-com-anode
13排阻RX847014按鍵button1獨立式按鍵判別處理流程P3.2==0?NP3.2==0?YNY延時幾個ms去抖P3.2==0?NY次數+1,顯示退出按鍵狀態判別:判到按下,軟件消抖;確認按鍵按下的處理;按鍵松開判別次數超9,清0數碼管顯示按鍵次數程序sbitKEY=P3^2;unsignedcharcodesegtab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0xff};voidmain(void){unsignedcharnum=0;//統計按鍵次數的變量P0M0=0x00;P0M1=0X00;P3M0&=~0X04;P3M1&=~0X04;P0=segtab[0];//數碼管初始顯示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個按鍵,在單個數碼管上,顯示按鍵號按鍵電路設計4個按鍵判別處理方法是否有任意按鍵按下;有鍵按下,延時消抖;確認鍵號,按鍵處理;等待該鍵松開保留位”&1”,其他位”&0”即P3&二進制數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);//等待釋放 } }}按鍵的去抖原理小結獨立式按鍵的電路設計和判別處理實現了用一位數碼管顯示按鍵次數和按鍵號謝謝觀看!項目搶答器的實現搶答器的實現任務目錄任務一開關控制LED燈顯示任務二數碼管顯示按鍵按下次數任務三多路搶答器的實現搶答器的實現主持人有一個開始搶答命令按鍵任務功能3個選手各有一個搶答按鍵當主持人按下開始按鍵后,數碼管顯示“P”,允許選手開始搶答,否則搶答無效;某選手按下對應的按鍵后,數碼管顯示選手號,蜂鳴器鳴叫一段時間,此時其他選手不允許搶答;當主持人重新按下對應的按鍵后,上述動作繼續主裁判點評在搶答的任意環節,主裁判可打斷進行點評;點評后,恢復打斷前的狀態選手裁判主持搶答器硬件電路設計序號名稱Proteus中元件名參數數量1單片機STC15W4K32S4127段共陽數碼管7seg-com-anode
13排阻RX847014按鍵button55蜂鳴器buzzer16三極管PNP17電阻RES22018發光二極管LED8蜂鳴器蜂鳴器是一種一體化結構的電子訊響器,根據使用方式分為:無源蜂鳴器:內驅動部無震蕩源,需要2KHZ-5KHZ的方波信號驅動有源蜂鳴器:內帶震蕩源,接入額定的電源電壓驅動無源蜂鳴器:內部不帶震蕩源,所以如果用直流信號無法令其鳴叫。必須用2K~5K的方波去驅動它。優點是:1.便宜2.聲音頻率可控,可以做出“多來米發索拉西”的效果。(a)有源蜂鳴器(b)無源蜂鳴器蜂鳴器蜂鳴器的工作電流在30mA左右,單片機的I/O口輸出電流:拉電流:<1mA灌電流:10mA單片機的I/O口不足以驅動蜂鳴器,需要接驅動電路。蜂鳴器sbitBUZZER=P3^6; voidmain() {
while(1) {
BUZZER=0;delay_ms(500);
BUZZER=1;delay_ms(500);} }搶答器的實現主持人有一個開始搶答命令按鍵任務功能3個選手各有一個搶答按鍵當主持人按下開始按鍵后,數碼管顯示“P”,允許選手開始搶答,否則搶答無效;某選手按下對應的按鍵后,數碼管顯示選手號,蜂鳴器鳴叫一段時間,此時其他選手不允許搶答;當主持人重新按下對應的按鍵后,上述動作繼續主裁判點評在搶答的任意環節,主裁判可打斷進行點評;點評后,恢復打斷前的狀態選手裁判主持搶答器軟件程序設計循環內有2個函數,一個是判主持人是否按下開始鍵的函數chairman_scan();一個是判選手是否按下搶答鍵的函數player_scan();chairman_scan()給出主持人是否按下的標識,根據該標識來確定是否執行player_scan()Y初始化state=1?Nplayer_scan()chairman_scan()程序主函數bitstate=0;//初始狀態不允許搶答voidmain(void){IO_Init();P0=0xff;//關數碼管state=0;//初始狀態不允許搶答while(1){ chairman_scan(); //掃描主持人按鍵if(state==1){ player_scan(); //掃描選手按鍵
}}}主持人按鍵函數sbitCHAIRMAN=P3^1;voidchairman_scan()//主持人掃描函數定義{ 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”關閉顯示N0x300x280x18其他選手按鍵函數增加state=0;增加beep();選手按鍵函數
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); //等待按鍵釋放}
}}蜂鳴器鳴叫函數sbitBUZZER=P3^6;voidbeep(){unsignedchari;for(i=0;i<200;i++)//產生200個周期為1ms左右的方波
{delay_ms(1);//延時1ms
BUZZER=~BUZZER;//產生方波
}}IO初始化voidIO_Init(){P0M0=0x00;P0M1=0x00;//設置P0工作于準雙向口模式P1M0=0x00;P1M1=0x00;//設置P1工作于準雙向口模式P3M0=0x00;P3M1=0x00;//設置P3工作于準雙向口模式}搶答器的實現主持人有一個開始搶答命令按鍵任務功能3個選手各有一個搶答按鍵當主持人按下開始按鍵后,數碼管顯示“P”,允許選手開始搶答,否則搶答無效;某選手按下對應的按鍵后,數碼管顯示選手號,蜂鳴器鳴叫一段時間,此時其他選手不允許搶答;當主持人重新按下對應的按鍵后,上述動作繼續主裁判點評在搶答的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025【合同范本】簡易租房合同協議書
- 2025房地產代理銷售合同范本
- 合伙人退出合作協議書
- 停車場綠化工程合同標準文本
- 二零二五股票與股權分配協議
- 2025年糧食、棉花、化肥等農產品倉儲服務項目合作計劃書
- 辦理協議離婚經過的程序
- 業務員協議書
- 聘用主播的合同范例
- 房地產銷售代理合同樣本
- 【工程項目施工階段造價的控制與管理8100字(論文)】
- XX學校推廣應用“國家中小學智慧教育平臺”工作實施方案
- 非遺文化創意產品設計 課件全套 第1-5章 概述- 非遺文創產品設計案例解析
- 法律盡職調查所需資料清單
- 幼兒園中班安全教育活動《緊急電話的用途》
- 118種元素原子結構示意圖
- 英語四線三格Word版
- 幼兒園行政工作制度
- 廣州新華學院
- 部編版七年級下冊道法期中試卷1
- 知識圖譜-課件
評論
0/150
提交評論