4×4键盘扫描源程序
这是本人独立写的第一个程序,和大家分享,如果有什么错误还望大家不吝赐教。
//*******************************************************//
// 程序名称:key.c
// 程序功能:显示按键
// 备注:根据按键显示出相应的按键号,并由
// 串口输出相应键值。
//*******************************************************//
#include
#define scan_code P1 //数码管段输出口
//*******************************************************//
sbit LED_switch=P2^2;
code unsigned char led_code[16]={0xC0,0x0F9,0xA4, 0xB0,
0x99,0x92,0x82,0x0F8,0x80,0x90,
0x88,0x83,0xa7,0xa1,0x86,0x8e};
//定义显示码 0,1,2,3,4,5,6,7,8,9
// a ,b,c,d,e,f
unsigned char key;
unsigned char error;
//*********************************************************
void delay_time(); //延时10ms
//*********************************************************
void main()
{
SCON="0x50";
TMOD="0x20";
TH1=0x0fd;TL1=0xFD; //设置串口波特率为9600Bps
TR1=1;
while(1)
{
LED_switch=0; //开显示位
scan_code=0x0f;
while((P1^0x0f)!=0)
{
delay_time();
scan_code=0xfe; //查询第一行
switch(scan_code)
{
case 0x7e:key=15;break;
case 0xbe:key=0;break;
case 0xde:key=14;break;
case 0xee:key=13;break;
default:error;
}
scan_code=0xfd; //查询第二行
switch(scan_code)
{
case 0x7d:key=7;break;
case 0xbd:key=8;break;
case 0xdd:key=9;break;
case 0xed:key=12;break;
default:error ;
}
scan_code=0xfb; //查询第3行
switch(scan_code)
{
case 0x7b:key=4;break;
case 0xbb:key=5;break;
case 0xdb:key=6;break;
case 0xeb:key=11;break;
default:error ;
}
scan_code=0xf7; //查询第4行
switch(scan_code)
{
case 0x77:key=1;break;
case 0xb7:key=2;break;
case 0xd7:key=3;break;
case 0xe7:key=10;break;
default:error ;
}
P0=led_code[key]; //取显示码到P0口,数码管输出键值
scan_code=0x0f;
while((P1^0x0f)!=0)
{
;
}
while(TI==1)
TI="0";
SBUF="key"; //串口输出键值
}
}
}
//*******************************************************//
// 函数名称:delay_time()
// 函数功能:延时ms
// 入口参数:无
// 出口参数:无
//********************************************************//
void delay_time()
{
unsigned char i,j;
for(i=0;i<50;i++)
{
for(j=0;j<100;j++)
{
;
}
}
}
用户128918 2008-2-8 07:27
zigbee_904218839 2008-2-2 09:58
搞电子的,支持
用户42640 2008-2-1 16:07