嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元微信扫码支付:2 元
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#define uchar unsigned char
#define uint unsigned int
#define LED P0
uchar const dofly[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,
0x0b,0x0c,0x0d,0x0e,0x0f};//0-F
/*------------------------------------------------
函数声明
------------------------------------------------*/
uchar keyscan(void);//键盘扫描
void delay(uint i); //演示程序
void send(uchar str);//发送数据程序
void receive(void); //接收数据程序
void read_key(void);//读键值函数
/*------------------------------------------------
主函数
------------------------------------------------*/
void main()
{
TMOD=0x20; //定时器1,方式2
TL1=0xfd;
TH1=0xfd; //设置波特率9600
SCON=0xd8;
PCON=0x00; //串行口方式3,允许接收位
TR1=1; //打开定时器1
P2=0xff; //拉高P2口
while(1)
{
read_key(); //读按键程序
//receive(); //接收数据程序
}
}
/*------------------------------------------------
读键值函数
------------------------------------------------*/
void read_key(void)
{
uchar key;
key=keyscan(); //调用键盘扫描,
switch(key)
{
case 0xee:send(dofly[0]);break;//0 按下相应的键显示相对应的码值
case 0xed:send(dofly[1]);break;//1
case 0xeb:send(dofly[2]);break;//2
case 0xe7:send(dofly[3]);break;//3
case 0xde:send(dofly[4]);break;//4
case 0xdd:send(dofly[5]);break;//5
case 0xdb:send(dofly[6]);break;//6
case 0xd7:send(dofly[7]);break;//7
case 0xbe:send(dofly[8]);break;//8
case 0xbd:send(dofly[9]);break;//9
case 0xbb:send(dofly[10]);break;//a
case 0xb7:send(dofly[11]);break;//b
case 0x7e:send(dofly[12]);break;//c
case 0x7d:send(dofly[13]);break;//d
case 0x7b:send(dofly[14]);break;//e
case 0x77:send(dofly[15]);break;//f
}
}
/*------------------------------------------------
键盘扫描程序
------------------------------------------------*/
uchar keyscan(void) //键盘扫描函数,使用行列反转扫描法
{
uchar key;
uchar cord_h,cord_l;//行列值中间变量
P2=0x0f; //行线输出全为0
cord_h=P2&0x0f; //读入列线值
if(cord_h!=0x0f) //先检测有无按键按下
{
delay(100); //去抖
if(cord_h!=0x0f)
{
cord_h=P2&0x0f; //读入列线值
P2=cord_h|0xf0; //输出当前列线值
cord_l=P2&0xf0; //读入行线值
key=cord_h cord_l;//键盘最后组合码值
}
}
return(key); //返回该值
}
/*------------------------------------------------
发送数据函数
------------------------------------------------*/
void send(uchar str)
{
if(TI==0)
{
SBUF=str;
while(TI==0);
TI=0;
}
}
/*------------------------------------------------
接收数据函数
------------------------------------------------*/
void receive(void)
{
while(RI==0);
RI=0;
P0=SBUF; //立即点亮LED
}
/*------------------------------------------------
延时程序
------------------------------------------------*/
void delay(uint i) //延时函数
{
while(i--);
}