矩阵键盘中断扫描
if(enblescan==0)//如果是开
{
switch(step)
{
case 0: P2=0xf0;
temp=P2;
if(temp!=0xf0)
step++;
else
step=0;
break;
case 5:P2=0xf0;
temp1=P2;
if(temp1==temp)
{
P2=0x0f;
temp1=P2;
temp=temp1|temp;
enblescan=1;
step=0;
}
else
step=0;
break;
default:step++;
break;
}
}
else
switch(step)
{
case 0:P2=0xf0;
temp1=P2;
if(temp1==0xf0)
step++;
else
step=0;
break;
case 5:P2=0xf0;
temp1=P2;
if(temp1==0xf0)
{
enblescan=0;
step=0;
}
else
step=0;
break;
default:step++;
break;
}
变量说明:此程序有enablescan,step,temp,temp1四个变量,其中temp1可以定义为局部变量。enablescan是布尔型,step有多长由延时时间决定,temp为全局变量进行数据的传递。
进口参数:无
出口参数:temp
(0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77)
用的位置:此程序用在定时中断函数中。
程序优点:1,消除抖动是采用定时中断进行延时,减小了cpu的负担
2,用参数enablescan进行了键盘的屏蔽,实现了键盘优先级的选择,防止重复按键
系统说明:p2口接矩阵键盘
数码管中断动态显示
uchar code table[]={
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0X7F,0xff};
uchar code aa[]={
0xfe,0xfd,0XF3,0xfb,0xf7};
uchar bb[5];
Void init()//初始化
{
TMOD=0x10;//中断模式字设定
TH1=(65536-5000)/256;//t1刷新频率时间设定
TL1=(65536-5000)%256;
EA=1;
ET1=1;
TR1=1;
}
display() interrupt 3//中断子程序
{
TH1=(65536-5000)/256;
TL1=(65536-5000)%256;
if(i==4)
i=0;
P1=aa[i];
P0=table[bb[i]];
i++;
}
变量说明:此程序变量i和数组变量bb[i]两个全局变量,其中i由数码管的个数决定,bb[i]用来存储要显示的数字的bcd码。所以在要显示十进制数时要先转化成bcd码。
程序优点:采用定时中断显示数字,减轻cpu的负担。
系统说明:p1是位选,p0为段选
版权所有
if(enblescan==0)//如果是开
{
switch(step)
{
case 0: P2=0xf0;
temp=P2;
if(temp!=0xf0)
step++;
else
step=0;
break;
case 5:P2=0xf0;
temp1=P2;
if(temp1==temp)
{
P2=0x0f;
temp1=P2;
temp=temp1|temp;
enblescan=1;
step=0;
}
else
step=0;
break;
default:step++;
break;
}
}
else
switch(step)
{
case 0:P2=0xf0;
temp1=P2;
if(temp1==0xf0)
step++;
else
step=0;
break;
case 5:P2=0xf0;
temp1=P2;
if(temp1==0xf0)
{
enblescan=0;
step=0;
}
else
step=0;
break;
default:step++;
break;
}
变量说明:此程序有enablescan,step,temp,temp1四个变量,其中temp1可以定义为局部变量。enablescan是布尔型,step有多长由延时时间决定,temp为全局变量进行数据的传递。
进口参数:无
出口参数:temp
(0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77)
用的位置:此程序用在定时中断函数中。
程序优点:1,消除抖动是采用定时中断进行延时,减小了cpu的负担
2,用参数enablescan进行了键盘的屏蔽,实现了键盘优先级的选择,防止重复按键
系统说明:p2口接矩阵键盘
数码管中断动态显示
uchar code table[]={
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0X7F,0xff};
uchar code aa[]={
0xfe,0xfd,0XF3,0xfb,0xf7};
uchar bb[5];
Void init()//初始化
{
TMOD=0x10;//中断模式字设定
TH1=(65536-5000)/256;//t1刷新频率时间设定
TL1=(65536-5000)%256;
EA=1;
ET1=1;
TR1=1;
}
display() interrupt 3//中断子程序
{
TH1=(65536-5000)/256;
TL1=(65536-5000)%256;
if(i==4)
i=0;
P1=aa[i];
P0=table[bb[i]];
i++;
}
变量说明:此程序变量i和数组变量bb[i]两个全局变量,其中i由数码管的个数决定,bb[i]用来存储要显示的数字的bcd码。所以在要显示十进制数时要先转化成bcd码。
程序优点:采用定时中断显示数字,减轻cpu的负担。
系统说明:p1是位选,p0为段选
版权所有