導航:首頁 > 操作系統 > 單片機按鍵

單片機按鍵

發布時間:2022-01-21 00:53:28

⑴ 匯編單片機按鍵

不是用JNZ ,那是判斷A是不是0
一般用JB和JNB 判斷按鍵的

⑵ 51單片機按鍵

#include<reg51.h>
#define uchar unsigned char
uchar num,time,limit=2;
sbit led1=P1^0;
sbit key1=P2^0;
bit flag=0;
void t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
time++;
if(time>=60)
{
TR0=0;
time=0;
flag=1;
}
}
void t1isr() interrupt 3
{
TH1=(65536-10000)/256;
TL1=(65536-10000)%256;
num++;
if(num>limit)
{
num=0;
led1=~led1;
}
}
main()
{
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-10000)/256;
TL1=(65536-10000)%256;
ET0=1;
ET1=1;
EA=1;
while(1)
{
if(key1==0)
{
time=0;
num=0;
TR1=1;
TR0=1;
flag=0;
while(key1==0);
if(flag==1)limit++;
}
}
}

⑶ 單片機實現按鍵功能函數

#include<reg51.h>
#defineucharunsignedchar
uchardat;
sbitkey1=P1^0;
sbitkey2=P1^1;
sbitkey3=P1^2;
main()
{
bitflag=0;
while(1)
{
if(key1==0)
{
while(key1==0);
flag=~flag;
}
if(key2==0)
{
while(key2==0);
if(flag)dat++;
}
if(key3==0)
{
while(key3==0);
if(flag(dat--);
}
P0=dat;
}
}

⑷ 單片機C語言按鍵開關程序

#include<reg52.h>
#defineuintunsignedint
#defineucharunsignedchar
voiddelay_ms(uint);
sbitled0=P0^0;
sbitled1=P0^1;
sbitkey1=P3^2;
sbitkey2=P3^3;
voidmain()
{
uchari=0;
ucharj=0;
while(1)
{
if(key1==0)//按鍵1
{
delay_ms(10);
if(key1==0)
{
i++;
i=i%2;
switch(i)
{
case0:led0=1;break;//關小燈
case1:led0=0;break;//開小燈
default:break;
}
}
while(!key1);
}

if(key2==0)//按鍵2
{
delay_ms(10);
if(key2==0)
{
j++;
j=j%2;
switch(j)
{
case0:led1=1;break;//關小燈
case1:led1=0;break;//開小燈
default:break;
}
}
while(!key2);
}
}
}
voiddelay_ms(uintz)//延時子程序
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

⑸ 單片機按鍵功能

按鍵按照結構原理可分為兩類,一類是觸點式開關按鍵,如機械式開關、導電橡膠式開關等;另一類是無觸點式開關按鍵,如電氣式按鍵,磁感應按鍵等。前者造價低,後者壽命長。目前,微機系統中最常見的是觸點式開關按鍵。


2.輸入原理



在單片機應用系統中,除了復位按鍵有專門的復位電路及專一的復位功能外,其它按鍵都是以開關狀態來設置控制功能或輸入數據的。當所設置的功能鍵或數字鍵按下時,計算機應用系統應完成該按鍵所設定的功能,鍵信息輸入是與軟體結構密切相關的過程。

對於一組鍵或一個鍵盤,總有一個介面電路與CPU相連。CPU可以採用查詢或中斷方式了解有無將鍵輸入,並檢查是哪一個鍵按下,將該鍵號送入累加器ACC,然後通過跳轉指令轉入執行該鍵的功能程序,執行完後再返回主程序

⑹ 單片機,按鈕,

單片機的埠一般為准雙向IO埠,當你想讀埠時需要先寫1,這時埠為弱上拉,外部信號可以准確的反應在埠上,如果,埠原來為低電平,這時候你如果想讀埠的話,是讀不到的,讀到的為0,按鍵一般也是採用一端接地的方法,如果另一端接電源,當按鍵按下時,單片機會壞掉。繼續回答你的問題,讀取按鍵時,當按鍵按下時是由高到底

⑺ c51單片機按鍵

1.設置一個狀態變數,如flag,定義flag=0為開狀態,flag=1為關狀態。
2.因為是按鍵(不是開關),所以實際上單片機讀取的應該是脈沖形式的輸入。設按鍵接單片機P01引腳,故可採用以下程序實現按鍵掃描
if(P01==0)//按下按鍵,進入下降沿
{
delay2();//20ms延時去按鍵前抖動
while(P01==0);//等待上升沿到 來,即按鍵彈起
flag=~flag;//flag取反,實現狀態切換
}

void delay2()//20ms延時子程序
{
unsigned char i,k;
for(i=0;i<100;i++)
for(k=0;k<100;k++);
}
註:根據按鍵的具體接法,若按下按鍵向單片機輸入低電平,則採用以上程序;若按下按鍵向單片機輸入高電平,則將兩處P01==0均改為P01==1。

⑻ 單片機按鍵

ORG 0000H
AJMP MAIN
ORG 000BH
AJMP GT0
ORG 0080H
MAIN:MOV P0,#00H ;滅燈
MOV IE,#82H ;開中斷
MOV SCON,#00H ;串列發送模式
MOV TMOD,#01H ; T0方式1定時
MOV TH0,#3CH ;50毫秒初值
MOV TL0,#0B0H
MOV DPTR,#TAB ;表地址入口
CLR A
MOV 30H,A ;小時
MOV 31H,A ; 分鍾
MOV 32H,A ; 秒
MOV 33H,#1 ; 星期
MOV 34H,A ; 二進制加一演示
MOV R0,#20 ; 1秒中斷次數
SETB TR0 ; 啟動T0
M0:LCALL JIAN ; 調用查鍵
LCALL XIANSHI ;調用顯示
SJMP M0
GT0:PUSH ACC
MOV TH0,#3CH
MOV TL0,#0B6H ;重新賦值佔了6個機器周期,0B0H改為0B6H
DJNZ R0,RET0 ;不夠20次返回
MOV R0,#20
INC 32H ; 秒加一
INC 34H ;二進制演示加一,到255加一為0
MOV SBUF,34H ;串列發送
JNB TI,$ ;等待發送結束
CLR TI ;清楚發送標志
MOV A,32H
CJNE A,#60,RET0 ;比較秒是否到60
MOV 32H,#0 ;到60改為0
INC 31H ;分鍾加一
MOV A,31H
CJNE A,#60,RET0 ;比較分鍾是否到60
MOV 31H,#0 ; 到60改為0
INC 30H ;小時加一
MOV A,30H
CJNE A,#24,RET0 ;比較小時是否到24
MOV 30H,#0 ;到24改為0
INC 33H ;星期加一
MOV A,33H
CJNE A,#8,RET0 ;比較星期是否到8
MOV 33H,#1 ;到8改為1
RET0:POP ACC
RETI
XIANSHI:MOV A,30H ;小時顯示程序段
MOV B,#10
DIV AB
MOVC A,@A+DPTR ;十位
MOV P1,A
SETB P0.0 ;共陽極數碼管
DJNZ R1,$
CLR P0.0
MOV A,B
MOVC A,@A+DPTR ;個位
MOV P1,A
SETB P0.1
DJNZ R1,$
CLR P0.1
MOV A,31H ;分鍾顯示程序段
MOV B,#10
DIV AB
MOVC A,@A+DPTR ; 十位
MOV P1,A
SETB P0.2
DJNZ R1,$
CLR P0.2
MOV A,B
MOVC A,@A+DPTR ;個位
MOV P1,A
SETB P0.3
DJNZ R1,$
CLR P0.3
MOV A,32H ;秒顯示程序段
MOV B,#10
DIV AB
MOVC A,@A+DPTR ;十位
MOV P1,A
SETB P0.4
DJNZ R1,$
CLR P0.4
MOV A,B
MOVC A,@A+DPTR ;個位
MOV P1,A
SETB P0.5
DJNZ R1,$
CLR P0.5
MOV A,33H ;星期顯示程序段
MOVC A,@A+DPTR
MOV P1,A
SETB P0.6
DJNZ R1,$
CLR P0.6
RET
JIAN:PUSH ACC
PUSH PSW
JB P2.0,M1 ;查鍵,改分鍾數
J0:LCALL XIANSHI ;調顯示
JNB P2.0,J0 ;按鍵松開了才加一
INC 31H
MOV A,31H
CJNE A,#60,RET1 ;分鍾加到60就歸零
MOV 31H,#0
SJMP RET1
M1:JB P2.1,M2 ;修改小時鍵
J1:LCALL XIANSHI
JNB P2.1,J1
INC 30H
MOV A,30H
CJNE A,#24,RET1 ;小時加到24就歸零
MOV 30H,#0
M2:JB P2.2,RET1 ; 修改星期鍵
J2:LCALL XIANSHI
JNB P2.2,J2
INC 33H
MOV A,33H
CJNE A,#8,RET1 ;星期加到8就改為1
MOV 33H,#1
RET1:POP PSW
POP ACC
RET
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END

⑼ 單片機如何實現多按鍵同時控制

單片機內核決定了只能是單任務,如果使用實時系統的話,通過時間片可以實現虛擬多任務,不過效率不高。象你這種情況其實,循環掃描按鍵就可以了

⑽ 單片機按鍵問題

1.中斷方式(這個比較可靠)
一般程序按鍵按下後 燈亮 然後按鍵松開燈還是亮的
採用的是邊沿檢測,即有電平跳變就改變輸出。
如果想按鍵按住的時候燈亮,不按的時候燈不亮
採用電平觸發,即當電平維持是正或者負的時候才穩定輸出。
2.也可以用查詢方式
比如
一般程序按鍵按下後 燈亮 然後按鍵松開燈還是亮的
if(P1^1==0) //判斷是否按下鍵盤
{
delay10ms(); //延時,軟體去干擾
if(P1^1==0) //確認按鍵按下
{
count++; //按鍵計數加1
if(count==1) //第一次按下亮,第二次按下滅
{
count=0; //將count清零
}
}
while(P1^1==0);//按鍵鎖定.
}
P1^2=count;//輸出顯示
如果想按鍵按住的時候燈亮,不按的時候燈不亮
if(P1^1==1)
{
P1^2=1;
while(P1^1);
P1^2=0;
}
P1^1是按鍵採集管腳,P1^2是輸出顯示管腳。當然,前面得加去抖動。

你試試。

閱讀全文

與單片機按鍵相關的資料

熱點內容
pythonacquire參數 瀏覽:825
湯普森鋼琴教程2pdf 瀏覽:490
程序員小陳別墅 瀏覽:614
固態編譯器損壞 瀏覽:3
android控制項顯示和隱藏 瀏覽:186
國產編譯dspic的軟體 瀏覽:295
隱尤app是什麼 瀏覽:494
釘釘作業怎麼傳到文件夾 瀏覽:186
pg庫二進制和源碼的區別 瀏覽:328
群星伺服器怎麼看 瀏覽:144
瑪雅伺服器名稱是什麼 瀏覽:819
源碼樂園官網 瀏覽:892
加密幣前景 瀏覽:881
安卓正面介面和反面介面什麼意思 瀏覽:710
怎樣把文件夾的名字去掉 瀏覽:960
清理系統垃圾的命令 瀏覽:641
安卓手機分身老閃退怎麼辦 瀏覽:911
愛快安裝提示需要解壓 瀏覽:445
單片機外擴io用什麼信號 瀏覽:336
貓友app是什麼啊 瀏覽:392