A. 請問51單片機如何用一個獨立按鍵控製程序的暫停和繼續
1.你的程序並不能實現顯0~9,1357,0246,亮燈和響鈴是可以。
2.用P1.1按鍵是可以實現暫停和繼續的,並不需要中斷。不是什麼事都需要中斷,好像離開中斷就什麼也不能做了?
3.你想暫停,是隨時暫停,還是什麼時候暫停?
B. 求解讀51單片機用四個按鍵獨立控制四個led的c程序
#include<reg51.h>
//k2~k4分別控制le1~le4
voiddelay(unsignedintx)//延時函數
{
while(x--);//延時數減一
}
voidkey_event(unsignedchard)//根據掃描到的鍵值,亮相應的LED
{
switch(d)
{
case14:P1^=(1<<0);break;//k1鍵按下了
case13:P1^=(1<<1);break;//k2鍵按下了
case11:P1^=(1<<2);break;//k3鍵按下了
case7:P1^=(1<<3);break;//k4鍵按下了
//
default:P1^=(1<<7);break;//預設值,都不亮
}
}
voidkey()//按鍵掃描
{
staticchari;
unsignedchara;
unsignedcharb;
a=P2;//0000aaaa,000076543210;
a>>=4;//a=a>>4;//移動4位,a取值
if(a!=15)//至少有個鍵按下
{
if(i==0)//0的時候,標示沒有建按下
{
delay(1000);//延時1000次
b=P2;//把按鍵的口賦給變數b
b>>=4;//移動四位,b取值
if(a==b)//如果a和b相等
{
key_event(b);//這次按鍵有效
i=1;//1不允許其它鍵按下
}
}
}
else
{
i=0;//不是有效鍵按下,清0
}
}
voidmain()//主函數開始
{
while(1)//進入循環,檢測按鍵按下情況
{
key();
}
}
C. 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;
}
}
}
D. 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
;-----------------------------------
E. 51單片機兩程序獨立按鍵切換連接程序怎麼寫
兩段程序還是要合並成一個主程序的,只是分開成兩段而已。
sbit ins1=獨立按鍵所在I/O腳;
bit keyab=0; //區分執行A,B程序的標志位,=0,執行A段,=1執行B段
main()
{
...........
while(1) //while前的程序照常寫
{
if(ins1==0)
{
keyab=!keyab;
while(ins1==0);
}
if(keyab==1)
{
A段程序寫在這里
}
else
{
B段程序寫在這里
}
}
}
這樣寫後,原來A、B程度中的while(1)就不能再寫了。而是將while(1)以下程序寫到這里。
F. 請問單片機怎麼用獨立按鍵按一下實現一個功能,按另一個按鍵實現另一個功能 這個代碼要怎麼寫啊
如果這兩個功能都是一個死循環,可以考慮用中斷,這樣就不必在兩個獨立的功能中插入按鍵檢測了
while(1)
{
while(flag==1){死循環1}
while(flag==2){死循環2}
}
如果這兩個功能不是死循環,就 簡單了
while(1)
{
if(key1==0) {延時消抖 功能1}
if(key2==0) {延時消抖 功能2}
}
G. 單片機一個獨立按鍵
#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);
}
}
H. 簡述單片機獨立按鍵的任務分為幾步,分別是什麼
5步。分別是判斷按鍵是否按下,延時消抖,再次判斷按鍵是否按下,等待按鍵抬起,執行預定語句。
一種是普通io口,一種是中彈的形式,普通io口是按下按鍵觸發按鍵子程序案件,指程序經過一段時間的,比如20~50毫秒的延時再次毒案件,如果按鍵值還是會按下,那麼就延時等待按鍵抬起按鍵,抬起後執行按鍵程序,然後返回中彈也是一樣的,按下按鍵之後進入中段讀按鍵狀態,是否還是為按一下是按一下等待延時再讀等待,然後等待案件採取後執行相應的代碼,然後退出總代。
I. 單片機應用中,獨立式按鍵操作的流程是什麼
一種是普通io口,一種是中彈的形式,普通io口是按下按鍵觸發按鍵子程序案件,指程序經過一段時間的,比如20~50毫秒的延時再次毒案件,如果按鍵值還是會按下,那麼就延時等待按鍵抬起按鍵,抬起後執行按鍵程序,然後返回中彈也是一樣的,按下按鍵之後進入中段讀按鍵狀態,是否還是為按一下是按一下等待延時再讀等待,然後等待案件採取後執行相應的代碼,然後退出總代。
J. c51單片機獨立按鍵控制,流水燈程序
while(1)
{ P1=aa;
delayms(1000);
aa=_crol_(aa,1);
}
這前面的while(1)根本不會退出,也就是不會執行下面的if(key1 == 0)的語句了,所以按鍵按下去當然沒有反應了
if(key1==0)
{
P1=0x7e;