|
單片機(jī),當(dāng)然不只是51,51單片機(jī)是一種稍通用型的單片機(jī),通過I/O口的定義,可以實(shí)現(xiàn)多種控制功能。
搶答器,原理:如果為四路,當(dāng)其中任一路控下后,其他幾路即失效,結(jié)果為第一次按下的,可以用數(shù)碼管或是LED燈來顯示,當(dāng)然這里只是講原理與編程,具體可以根據(jù)搶答器路數(shù)及顯示方式更改程序即可。
源程序如下:- <div class="blockcode"><blockquote>/*用的是AT89S52開發(fā)板,獨(dú)立按鍵接口如下,就用這四路。先按下的用LED燈來顯示,對應(yīng)第一個到第四個LED燈,其他再按無效,如果想再次實(shí)現(xiàn),可手動復(fù)位單片機(jī)*/
- #include <reg52.h>
- sbit key1=P3^0; //定義按鍵,根據(jù)需要連接線路,如獨(dú)立按鍵(4路)
- sbit key2=P3^1;
- sbit key3=P3^2;
- sbit key4=P3^3;
- /*void delay(unsigned int cnt) //如果有抖動或是干擾,可以用個小延時去抖
- {
- while(--cnt);
- }*/
- void main()
- {
- bit Flag;
- while(!Flag)
- {
- if(!key1)
- {
- P1=0xFE;
- Flag=1;
- }
- /*LED燈來顯示按下的鍵,第一個燈,我這里是8位LED燈,即:0111 1111,反過來讀數(shù)為:1111 1110 即:0xFE *,P1口對應(yīng)LED燈,給P1賦值*/
- else if(!key2)
- {
- P1=0xFD;
- Flag=1;
- }
- //第二個燈亮
- else if(!key3)
- {P1=0xFB;Flag=1;}
- //第三個燈亮
- else if(!key4)
- {
- P1=0xF7;
- Flag=1;
- }
- //第四個燈亮,意味著第四路首先按下
- }
- while(Flag); //可以再加個I/O,控制Flag,這樣初始化,繼續(xù)搶答,還可以設(shè)計(jì)按下時的聲音
- }
復(fù)制代碼 |
|