『壹』 52單片機按鍵0x7f什麼意思
0X7F就是十六位進制數7F轉換成十進制的就是127,轉換成二進制是1111111
『貳』 求用52單片機實驗板實現4*4鍵盤及數碼管動態掃描顯示的程序
#include <reg52.h>
#define uchar unsigned char
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
sbit la=P2^6;
sbit wela=P2^7;
uchar keyscan();
uchar num,temp,num1;
void delay(uchar z)
{
int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
num=17;
la=1;
P0=0;
la=0;
wela=1;
P0=0xc0;
wela=0;
while(1)//每次按下都是 所以while循環
{
num1=keyscan();
la=1;
P0=table[num1-1];
la=0;
}
}
uchar keyscan()
{
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0); //必須用if啊
{
delay(5);//消抖再判斷
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0) //必須用if啊
{
temp=P3;
switch(temp)
{
case 0xee:num=1;break;
case 0xde:num=2;break;
case 0xbe:num=3;break;
case 0x7e:num=4;break;
}
while(temp!=0xf0)// 鬆手檢測 鬆手數字才變化 必須用while 不鬆手不顯示 不鬆手下一排鍵盤沒用 一直在while內循環 放在第二個if內
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0);
{
delay(5);//消抖再判斷
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0);
{
temp=P3;
switch(temp)
{
case 0xed:num=5;break;
case 0xdd:num=6;break;
case 0xbd:num=7;break;
case 0x7d:num=8;break;
}
while(temp!=0xf0)//鬆手檢測 鬆手數字才變化 必須用while
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0);
{
delay(5);//消抖再判斷
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0);
{
temp=P3;
switch(temp)
{
case 0xeb:num=9;break;
case 0xdb:num=10;break;
case 0xbb:num=11;break;
case 0x7b:num=12;break;
}
while(temp!=0xf0)//鬆手檢測 鬆手數字才變化 必須用while
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0);
{
delay(5);//消抖再判斷
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0);
{
temp=P3;
switch(temp)
{
case 0xe7:num=13;break;
case 0xd7:num=14;break;
case 0xb7:num=15;break;
case 0x77:num=16;break;
}
while(temp!=0xf0)//鬆手檢測 鬆手數字才變化 必須用while
{
temp=P3;
temp=temp&0xf0;
}
}
}
return num;
}
『叄』 52單片機獨立按鍵控制LED流水燈
怎麼個控製法,按一下,流水燈停下,再按一下開始,
還是按一下對應亮一個或亮下一個
還是想知道怎麼用按鍵
教你用按鍵的方法,功能你自己去實現。把io口拉高電平後,接按鍵,如果按鍵按下,會接地,讀出的io口電平會變為低,這樣就可以判斷說法按下按鍵,但要一直重復讀取io口數據,而且要防抖動。
{
unsignedinttemp,k=9;
P2=0xff;//用P2檢測鍵盤
temp=P2;
temp=temp&0xff;
if(temp!=0xff)//接地了,有按下
{
delayxms(10);//等鍵盤穩定,以確認不是誤按、抖動
temp=P2;//再次檢測
temp=temp&0xff; //防抖,確認是按下
if(temp!=0xff)//確認不是誤按、抖動
{
switch(temp)
{
case0xfe:k=0;break;
case0xfd:k=1;break;//不同情況做出不同處理,變為0的是按下的鍵
case0xfb:k=2;break;
case0xf7:k=3;break;
case0xef:k=4;break;
case0xdf:k=5;break;
case0xbf:k=6;break;
case0x7f:k=7;break;
}
}
}
}
『肆』 用52單片機的4x4矩陣鍵盤的前八個鍵分別控制8個LED燈
#include "reg51.h"
#define uchar unsigned charconst tab[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d};
const uchar led[]={0x01,0x01,0x04,0x08,0x10,0x20,0x40,0x80};
void delay()
{
uchar i;
for(i=0;i<10;i++){;}
}
void keyscan()
{
uchar a,b,c,i;
P3=0x0f;
a=P3;
delay();
P3=0xf0;
b=P3;
delay();
c=a+b; for(i=0;i<8;i++)
if(c==tab[i]) P2=led[i];
if(c==0xeb) P2=0xff;
}
void main()
{ P2=0x00; while(1)
{
keyscan();
}
}