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

單片機獨立按鍵

發布時間:2022-01-23 13:41:12

1. 單片機的獨立按鍵

#include<reg51.h> // 4*4 按鍵+數碼管模擬,可以參考。

#define uchar unsigned char

uchar temp;

int key1,key,disbuf;// 此表為 LED 的字模 0 1 2 3 4 5 6 7 8 9 a b c d e f

unsigned char code LED7Code[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};

unsigned char ledx[8];

bit s0,s1;

void delay(uchar z)

{

uchar i,j;

for(i=0;i<120;i++)

for(j=0;j<z;j++);

}

void scan() //要是按鍵了,掃描鍵盤編碼值

{

P1=0xF0;

delay(1);

temp=P1;

switch(temp)

{

case 0xe0: key1=0;

break;

case 0xd0: key1=1;

break;

case 0xb0: key1=2;

break;

case 0x70: key1=3;

break;

}

P1=0x0f;

delay(1);

temp=P1;

switch(temp)

{

case 0x0E: key=key1+0;

break;

case 0x0D: key=key1+4;

break;

case 0x0B: key=key1+8;

break;

case 0x07: key=key1+12;

break;

default : key=-1;

}

if((key1+1)&&(key+1)) disbuf=key;

}

void ejjc() //判斷是否按鍵

{

P1=0xF0;

if(P1!=0xF0) { scan();s0=1;}

else { s0=0; s1=1;}

}

void main()

{

uchar i;

while(1)

{

ejjc();

if(s0==1 && s1==1)

{

s0=0;s1=0;

for(i=0;i<8;i++)

{ ledx[i]=ledx[i+1]; ledx[8]=disbuf; }

}

P0=0xff;

P2=LED7Code[ledx[0]];

P0=0xfe;

delay(5);

P0=0xff;

P2=LED7Code[ledx[1]];

P0=0xfd;

delay(5);

P0=0xff;

P2=LED7Code[ledx[2]];

P0=0xfb;

delay(5);

P0=0xff;

P2=LED7Code[ledx[3]];

P0=0xf7;

delay(5);

P0=0xff;

P2=LED7Code[ledx[4]];

P0=0xef;

delay(5);

P0=0xff;

P2=LED7Code[ledx[5]];

P0=0xdf;

delay(5);

P0=0xff;

P2=LED7Code[ledx[6]];

P0=0xbf;

delay(5);

P0=0xff;

P2=LED7Code[ledx[7]];

P0=0x7f;

delay(5);

}

}

2. 51單片機獨立按鍵問題

#include "reg51.h"

//P0口外接6個LED,led1至led6
//sbit led1=P0^1;
//sbit led2=P0^2;
//sbit led3=P0^3;
//sbit led4=P0^4;
//sbit led5=P0^5;
//sbit led6=P0^6;

//定義7個按鍵key1至key7
sbit key1=P1^1;
sbit key2=P1^2;
sbit key3=P1^3;
sbit key4=P1^4;
sbit key5=P1^5;
sbit key6=P1^6;
sbit key7=P1^7;

unsigned char keyval; //全局變數,儲存按鍵鍵值

void KeyScan(void);
void Timer0Init(void);
void delayms(unsigned char ms);

void delayms(unsigned int ms);
{
unsigned int i;
while(ms--)
for(i=0;i<600;i++);
}

void main(void)

while(1)
{
switch(keyval)
{
case 1: P0=0xfd; break; //led0亮
case 2: P0=0xfb; break;
case 3: P0=0xf7; break;
case 4: P0=0xfe; break;
case 5: P0=0xfd; break;
case 6: P0=0xfb; break; //led6亮
case 7: P0=0xff; break; //全部led熄滅
}

}


void Timer0Init(void) //每10ms進入中斷一次
{
TMOD=0x01; //16位定時器模式
TH0=0xdb;
TL0=0xff;//定時10ms,賦初值
TR0=1; //啟動定時器0
ET0=1; //開定時器0分支中斷
EA=1; //開總中斷


void Timer0ISR(void)interrupt 1 using 1 //定時中斷,按鍵掃描獲取鍵值

if((P1&0xfe)!=0xfe) //判斷key1至key7是否有按鍵按下

{
delayms(20); //延時20ms,軟體消抖
if(key1==0) keyval=1; //按鍵1按下
if(key2==0) keyval=2;
if(key3==0) keyval=3;
if(key4==0) keyval=4;
if(key5==0) keyval=5;
if(key6==0) keyval=6;
if(key7==0) keyval=7; //按鍵7按下
}
TH0=0xdb;
TL0=0xff;//定時10ms,重新賦值
}

3. 51單片機匯編語言編程獨立按鍵

四個按鍵,定義如下:

KEY1 BIT P3.0
KEY2 BIT P3.1
KEY3 BIT P3.2
KEY4 BIT P3.3

按鍵處理程序:
;-----------------------------------
READ_KEY:

JB KEY1, K2
CALL DELAY
JB KEY1, K2
JNB KEY1, $

PUSH ACC
INC 75H
MOV A, 75H
CJNE A, #10, ZINT01
MOV 75H, #0
ZINT01:
POP ACC

JMP K_EXIT
;---------------
K2: JB KEY2, K3
CALL DELAY
JB KEY2, K3
JNB KEY2, $

PUSH ACC
INC 76H
MOV A, 76H
CJNE A, #10, ZINT01
MOV 76H, #0
ZINT01:
POP ACC

JMP K_EXIT
;---------------
K3: JB KEY3, K4
CALL DELAY
JB KEY3, K4
JNB KEY3, $

PUSH ACC
DEC 75H
MOV A, 75H
CJNE A, #255, ZINT03
MOV 75H, #9
ZINT03:
POP ACC

JMP K_EXIT
;---------------
K4: JB KEY4, K_EXIT
CALL DELAY
JB KEY4, K_EXIT
JNB KEY4, $

PUSH ACC
DEC 76H
MOV A, 76H
CJNE A, #255, ZINT04
MOV 76H, #9
ZINT04:
POP ACC

K_EXIT:
RET
;---------------
DELAY:
DJNZ R7, $
DJNZ R7, $
RET
;-----------------------------------

4. 單片機獨立按鍵的連接問題

認對角,一個接地,一個通過上拉電阻接到電源和接IO口,保證錯不了。

5. 51單片機獨立按鍵中,按一下和一直按的區別

按一下松開這個LED一直亮:

if(key==0)
{
while(key==0);
led=0;
}

按一下松開就亮一下:

if(key==0)
{
led=0;
while(key==0);
led=1;
}

6. 單片機獨立按鍵的電路圖

可以,原理圖不是PCB布板,不是非得把器件用線連上才算連接的。原理圖上只要有同樣的網路編號原理上就是連通的。同樣的道理,這些電阻你都可以放到一邊,只要打上對應管腳一樣的網路標號就行

7. 51單片機獨立式按鍵程序

#include<reg52.h>
unsignedcharID;
sbitk1=P3^7;//定義按鍵埠
voiddelay()
{
TMOD=0x10;//定時器的工作方式
TH1=0xd8;
TL1=0xf0;
TR1=1;
while(!TF1);//這里錯了,是定時器1
TF1=0;
}
voidmain()
{
while(1)
{
if(k1==0)
{
delay();//去抖動
if(k1==0)//檢測按鍵確實按下,進行按鍵處理
{
ID++;
if(ID==0)
{
ID=0;
}
while(!k1);//這里錯了,多餘的加了==0
}
}
switch(ID)
{
case0:P1=0x3f;break;
case1:P1=0x06;break;
case2:P1=0x5b;break;
case3:P1=0x4f;break;
case4:P1=0x66;break;
case5:P1=0x6d;break;
case6:P1=0x7d;break;
case7:P1=0x07;break;
case8:P1=0x7f;break;
case9:P1=0x6f;break;
default:break;
}
}
}

8. 單片機獨立按鍵

這個東西好幾年前學過一點,忘得差不多了。我覺得可以這樣
void main() {
int press = 0;
while(1) {
if(isPressed()) {
while(isPressed());
press++;
press == 1?pause():(continue();press=0);
}
}
}

你原來的邏輯是有問題的,因為只要第一次按下了,他就會給press變數清零,永遠不會進入else if。另外,我加入了鬆手檢測while(isPressed())

9. 51單片機獨立按鍵,怎麼組合實現某個功能

配合顯示器選擇不同的功能。
如:
按鍵啟動選擇功能,顯示器依次顯示1,2,3。。。。表示功能,每個數字顯示10秒,等待按鍵確認,進入下一個菜單。
循環顯示2次,沒有接收到確認按鍵,自動退出此模塊,返回上一層菜單。

閱讀全文

與單片機獨立按鍵相關的資料

熱點內容
虛擬機執行命令 瀏覽:444
cctv16奧林匹克頻道加密播出 瀏覽:899
c盤微信文件夾隱私 瀏覽:229
asp壓縮mdb 瀏覽:670
node開源論壇源碼 瀏覽:8
單片機比手機晶元還貴 瀏覽:35
java課表 瀏覽:555
如何在pdf裡面修改 瀏覽:929
橙光製作器檔案框在哪個文件夾 瀏覽:991
php如何抓取網頁數據 瀏覽:642
計數器單片機 瀏覽:966
游戲aoi演算法 瀏覽:845
phpmysqlint 瀏覽:914
怎麼從appstore商城買東西 瀏覽:186
大秀直播平台源碼 瀏覽:426
java視屏 瀏覽:936
電腦中如何給程序加密 瀏覽:241
java排序容器 瀏覽:944
職稱證書在哪個app下載 瀏覽:363
四九演算法算男女 瀏覽:661