unsigned char ID
sbit k1 = P3 ^ 7 // 定义按键端口
void delay()
{
TMOD = 0x10 // 定时器的工作方式
TH1=0xd8
TL1=0xf0
TR1=1
while(!TF1) // 这里错了,是定时器1
TF1=0
}
void main()
{
while(1)
{
if(k1==0)
{
delay() //去抖动
if(k1==0) //检测按键确实按下,进行按键处理
{
ID++
if(ID==0)
{
ID=0
}
while(!k1) //这里错了,多余的加了==0
}
}
switch(ID)
{
case 0:P1=0x3fbreak
case 1:P1=0x06break
case 2:P1=0x5bbreak
case 3:P1=0x4fbreak
case 4:P1=0x66break
case 5:P1=0x6dbreak
case 6:P1=0x7dbreak
case 7:P1=0x07break
case 8:P1=0x7fbreak
case 9:P1=0x6fbreak
default:break
}
}
}
矩阵式结构、硬件资源。1、独立按键键盘扫描矩阵式结构和硬件资源的过程中,需要将设按键接到p1口上。
2、CONTNTS02键盘与CPU的连接方式有两大类,一类是独立式,另一类为矩阵式。
3、独立式按键键盘每条水平线和垂直线在交叉处不直接连通,需要接到p1口上转接。
#include<reg51.h>#include<intrins.h>
#define uchar unsigned char
uchar key
void ext0() interrupt 0
{
if(P1&0x01)key=1
else if(P1&0x02)key=2
else if(P1&0x04)key=3
else if(P1&0x08)key=4
else key=0
}
void delay(uchar a)
{
uchar i
while(a--)for(i=0i<120i++)
}
main()
{
uchar led,i,j
while(1)
{
switch(key)
{
case 1:
led=0xfe
for(i=0i<10i++)
for(j=0j<8j++)
{
P1=led
led=_crol_(led,1)
delay(200)
}
break
case 2:
led=0x7f
for(i=0i<10i++)
for(j=0j<8j++)
{
P1=led
led=_cror_(led,1)
delay(200)
}
break
case 3:
led=0x0f
for(i=0i<10i++)
{
P1=led
delay(200)
led=~led
P1=led
delay(200)
led=~led
}
break
case 4:
for(i=0i<10i++)
{
P1=0x00
delay(200)
P1=0xff
delay(200)
}
break
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)