历史上的今天
今天是:2025年03月08日(星期六)
2018年03月08日 | 一个stc89c52单片机下的矩阵键盘程序
2018-03-08 来源:eefocus
下面是一个stc89c52单片机下的矩阵键盘程序,P0口接键盘,显示在P2口.
#include
#define uchar unsigned char
#define uint unsigned int
sbit key1=P3^2;
sbit key2=P3^3;
uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //定义八个灯的工作状态。
uchar code wep[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};
void yanshi(uint t)
{
while(--t);
}
void main()
{
uchar han,lei,key;
while(1)
{
P0=0xf0; //初始化为开关状态。11110000
han=P0; //han变量读取P0口的值。第一次扫描键盘。
han=han&0xf0; //对han变量与0xf0与.
//如果结果等于P0口初值(0xf0)说明没有键被按下.
//如果结果不等于P0(0xf0)口初值,说明有键按下.
if(han!=0xf0)
yanshi(125*5); //延时消抖.
if(han!=0xf0) //语句执行到这里说明真的有键按下.
{ //例如按下S1键.则P0=1110 0000
lei=P0&0xf0; //lei读取P0口的值.
lei=lei|0x0f; //lei=11101111
P0=lei; //P0=11101111
han=P0; //han=11101110 第二次扫描键盘,
//因为这里按键S1还是闭合的状态。
han=han&0x0f; //han=00001110
lei=lei&0xf0; //lei=11100000
key=han+lei;
}
switch(key)
{
case 0xee: P2=tab[0]; break;
case 0xde: P2=tab[1]; break;
case 0xbe: P2=tab[2]; break;
case 0x7e: P2=tab[3]; break;
case 0xed: P2=tab[4]; break;
case 0xdd: P2=tab[5]; break;
case 0xbd: P2=tab[6]; break;
case 0x7d: P2=tab[7]; break;
case 0xeb: P2=tab[8]; break;
case 0xdb: P2=tab[9]; break;
case 0xbb: P2=tab[10]; break;
case 0x7b: P2=tab[11]; break;
case 0xe7: P2=tab[12]; break;
case 0xd7: P2=tab[13]; break;
case 0xb7: P2=tab[14]; break;
case 0x77: P2=tab[15]; break;
}
}
}
史海拾趣
|
怎么用电阻量啊?我单位的loadcell是梅特勒托利多的 和开创的,传感器传输的是数据TX+,TX-,RX+,RX-等。据说要通过测量频率来判断是否好的还是坏的。是吗?… 查看全部问答> |
|
CE60下的模拟器SDK的NK能不能直接用新版本去替换而用不着每次更新NK就得编译新SDK,卸载老SDK再重新装新SDK.这样用模拟器太不方便了. CE60下的模拟器SDK的NK能不能直接用新版本去替换而用不着每次更新NK就得编译新SDK,卸载老SDK再重新装新SDK.这样用模拟器太不方便了.… 查看全部问答> |
|
自己写了个嵌入式实时OS核,取名LOS,即Learn Operate System。LOS是应用于工业控制领域和车载设备中的可剪裁的嵌入式实时操作系统。 LOS具有的功能目录如下: 1 任 ...… 查看全部问答> |
|
wince windows mobile如何用c++实现通信,这个如何操作,包括与服务器的配置? wince windows mobile如何用c++实现通信,这个如何操作,包括与服务器的配置?… 查看全部问答> |
|
replyreload += \',\' + 1109623; 这个是实物效果哦! 这个是仿真图哦! 这是仿真显示部分。 电路包括温度检测、时钟控制、闹铃报警、液晶显示等、、、、 粗糙的焊接工艺,望大家见谅啊! 带纽扣电池,可以给时钟芯片 ...… 查看全部问答> |




