|
#include<reg52.h>//定义头文件
typedef unsigned char u8;//重新定义关键词u8
typedef unsigned int u16;// 重新定义关键词u16
#define key16 P1 //接4*4键盘
#define dianjikouzhi1 P0 // 输出电机控制信号
#define dianjikouzhi2 P2 // 输出电机控制信号
u8 jianzhi;// 定义变量
u8 shoukongdianji[]={0x01,0x02,0x04,0x08,0x05,0x0a,0x10,
0x20,0x40,0x80,0x01,0x02,0x04,0x08,0x00,0x00};
//P2,P3输出电机控制电平信号组
void delay(u16 i)//i=1, 10us .。延时子程序
{
while(i--);
}
void anjianshibie() //按键识别子程序
{
key16=0x0f;//高4位置0,放入4行
if(key16!=0x0f)//判断是否有按键按下,即低4位非1111
{
delay(1000);//延时10ms,消抖
if(key16!=0x0f) //key16!=0x0f,再次确认,有按键按下
{
switch(key16) //确认哪列
{
case(0x07):jianzhi=0;break;
case(0x0b):jianzhi=1;break;
case(0x0d):jianzhi=2;break;
case(0x0e):jianzhi=3;break;
}
key16=0xf0;//低4位置0,放入4列
switch(key16)//确认哪行
{
case(0x70):jianzhi=jianzhi;break;
case(0xb0):jianzhi=jianzhi+4;break;
case(0xd0):jianzhi=jianzhi+8;break;
case(0xe0):jianzhi=jianzhi+12;break;
} //将确定的键值存在jianzhi中
}
}
if(key16==0xff)// 没有按键按下
{
dianjikouzhi1=1; //P2口置1
dianjikouzhi2=1;//P3口置1
}
}
void main()//主程序
{
while(1)//死循环
{
anjianshibie(); //调用按键识别子程序
if(jianzhi <7)//判断数组位数
{
dianjikouzhi1=shoukongdianji[jianzhi];//调用0~7的数组
}
dianjikouzhi2=shoukongdianji[jianzhi+7];//调用8~15的数组
}
} |
|