A. 51單片機如何設置同一個按鍵,按一下顯示123456,再按一下顯示321456
51單片機用一個按鍵,定義一個位變數,或一個8位的變數,按一下鍵變數為1,再按一下變數為0。然後顯示時,再根據變數值來決定顯示內容,變數為1,顯示123456,變數為0顯示321456。
B. 51單片機按鍵控制LED
定時器讓LED引腳輸出高低變化的電平,在主函數里判斷按鍵是否按下,如果按下就讓LED引腳保持並關閉定時中斷。
第二種方法是 主函數里讓LED引腳輸出高低變化電平,按鍵用外部中斷。
C. 51單片機中如何按下按鍵時數碼管正常顯示而不閃爍,並且實現長按連續
你好,我也遇到這樣的問題,經過一周的研究,問之前的前輩得出結果,希望對你有幫助
char scan_k(char k)
{
int i=0;//定義一個變數用來累計長按的時間
if((KEY1&&KEY2&&KEY3&&KEY4&&KEY5&&KEY6)==0)//如果有按鍵按下
{
while(!KEY1)//如果按鍵1按下
{
xianshi(neirong);//執行顯示
delay_ms(1);//延時
i++;//每次i自加1
if(i>=1000)
{
k=11;//按鍵1長按
}
else
{
k=1;//按鍵1短按
}
}
i=0;
while(!KEY2)//如果按鍵2按下
{
xianshi(neirong);//執行顯示
delay_ms(1);//延時
i++;//每次i自加1
if(i>=1000)
{
k=21;//按鍵2長按
}
else
{
k=2;//按鍵2短按
}
}
i=0;//在下一個按鍵按下之前清空i的值
while(!KEY3)//如果按鍵3按下
{
xianshi(neirong);//執行顯示
delay_ms(1);//延時
i++;//每次i自加1
if(i>=1000)
{
k=31;//按鍵3長按
}
else
{
k=3;//按鍵3短按
}
}
i=0;
while(!KEY4)//如果按鍵4按下
{
xianshi(neirong);//執行顯示
delay_ms(1);//延時
i++;//每次i自加1
if(i>=1000)
{
k=41;//按鍵4長按
}
else
{
k=4;//按鍵4短按
}
}
i=0;
while(!KEY5)//如果按鍵5按下
{
xianshi(neirong);//執行顯示
delay_ms(1);//延時
i++;//每次i自加1
if(i>=1000)
{
k=51;//按鍵5長按
}
else
{
k=5;//按鍵5短按
}
}
i=0;
while(!KEY6)//如果按鍵6按下
{
xianshi(neirong);//執行顯示
delay_ms(1);//延時
i++;//每次i自加1
if(i>=1000)
{
k=61;//按鍵6長按
}
else
{
k=6;//按鍵6短按
}
}
i=0;
}
return k;//返回按鍵的值
}
以上代碼,不帶操作系統,不包含中斷,請根據實際情況調整你想要的長按時間,按鍵按下的時候,如果你的消抖時間太長,數碼管會有明顯的閃爍或者變暗,請根據自己的需求進行調整
D. 51單片機怎麼用按鍵控制一個數碼管,按一下顯示一個數字,順序顯示
1、首先,要把代碼寫好,點亮數碼管。
E. 51單片機觸摸按鍵原理
觸摸按鍵一般有介面板或者可擴展的串列協議如SPI或I2C,UART等通信匯流排,依照協議通信即可。
F. 51單片機按鍵問題,求解決
1)要讓一個程序能夠幾乎立即停止執行,需要在程序的很多地方,關鍵位置上加入判斷語句,以便接收停止命令;
2)為了讓程序按原邏輯順序執行,檢測鍵盤的輸入就應該採用中斷方式;
sbit K1=P1^0; //按鍵
char flag=0;
在8051單片機的時鍾頻率為12MHz,用T0定時,10ms中斷一次
void Timer0_init()
{
TMOD |=0x01; //採用16位定時器
TH0 = (65536-10000)/256; //定時器裝初值10000,10ms中斷一次
TL0 = (65536-10000)%256;
EA=1; ET0=1; TR0=1;
}
void timer0() interrupt 1
{
TH0 = (65536-10000)/256; //裝初值10000,10ms中斷一次
TL0 = (65536-10000)%256;
if(k1) flag=1;
}
void test1()
{ if(flag) return; //在關鍵地方都加上此語句,如長時間的循環內部,這樣才能起到立即停止執行的效果;
.......
}
void main()
{
....; //其他初始化代碼
Timer0_init();
while(1)
{
if(!flag) test1();
if(flag) test2();
}
}
G. 51單片機按鍵消抖方法介紹
主要是外部中斷結合電平檢測,消抖方法核心在於兩次檢測之間增加延時,可以有效過濾掉干擾信號。
H. 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++;
}
}
}
I. 51單片機按鍵控制
#include<reg52.h>
sbit key=你接按鈕的埠;
sbit led=你接LED的埠;
void delay(unsigned int ms)
{
unsigned int x,y;
for(x=ms;x>0:x--)
for(y=100;y>0;y--);
}
void main()
{
while(1)
{
if(key==0)//判斷鍵是否按下
{
delay(10);//10ms延遲
if(key==0)//消抖
{
led=1;//如果共陽極led=0;
delay(500);
led=0;
}
}
}
}
J. 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。