使用at89c51单片机通过矩阵键盘,采用中断方式,输入数据并显示。
当无按键按下时,数码管循环画8
有按键按下时产生中断并将按键的键值0~F通过串行口输出,显示3秒后返回
返回后循环画8
[free]使用at89c51单片机通过矩阵键盘,采用中断方式,输入数据并显示。
当无按键按下时,数码管循环画8
有按键按下时产生中断并将按键的键值0~F通过串行口输出,显示3秒后返回
返回后循环画8
[attach]94394[/attach]
部分程序如下:
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code ledcode[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar code key_table[]={ 0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};
uchar code table1[]={~0xfe,~0xde,~0x9e,~0x9a,~0x92,~0x82,~0x82,~0x80};
uchar count=0,flag=0;
void delay(uint c)
{
uchar a,b;
for(;c>0;c--)
for(a=142;a>0;a--)
for(b=2;b>0;b--);
}
void main()
{
uchar i;
EX0=1;
IT0=1;
EA=1;
SM0=0;SM1=0;
P1=0xf0;
while(1)
{
for(i=0;i<8;i++)
{
SBUF=table1[i];
while(TI==0);TI=0;
delay(500);
}
}
}[/free]
部分程序如下:
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code ledcode[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar code key_table[]={ 0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};
uchar code table1[]={~0xfe,~0xde,~0x9e,~0x9a,~0x92,~0x82,~0x82,~0x80};
uchar count=0,flag=0;
void delay(uint c)
{
uchar a,b;
for(;c>0;c--)
for(a=142;a>0;a--)
for(b=2;b>0;b--);
}
void int_0() interrupt 0
{
uchar key,temp,i,num;
EX0=0;
delay(10);
EX0=1;
temp=P1;
P1=0x0f;
key=temp|P1;
for(i=0;i<16;i++)
{
if(key==key_table[i])
{
num=i;
break;
}
}
SBUF=ledcode[num];
while(!TI); TI=0;
delay(3000);
P1=0xf0;
}
void main()
{
uchar i;
EX0=1;
IT0=1;
EA=1;
SM0=0;SM1=0;
P1=0xf0;
while(1)
{
for(i=0;i<8;i++)
{
SBUF=table1[i];
while(TI==0);TI=0;
delay(500);
}
}
}