今日学习任务 | 用矩阵按键控制LED灯按二进制形式点亮设计。 |
今日任务完成情况 (详细说明本日任务是否按计划完成,开发的代码量。)
| 有些地方完成的还不是特别好,比如总是会有其他的地方不按照设想的样子点亮。 |
今日开发中遇到的问题汇总 | 不能将数字按键和确定按键区分开。 不能够实现两位数的按下而不被清零。
|
今日开发收获 | 矩阵按键的扫描代码。 |
自我评价 (是否规范完成指定任务,需要改进的地方,与他人合作等。) | 实际操作还是很有必要的,而且在这个不断发现错误更改错误的过程中也可以收获很多。 |
#include<reg51.h>
#define LED P0
int main()
{
int flag = 0,j;
int a,key;
LED = 0xff;
key = 0;
P3 = 0xf0;
//第一次按下按键
while(1)
{
key = 0;
P3 = 0xf0;
if((P3 != 0xf0)&&(flag == 0))
{
switch(P3)
{
case 0xe0: key = 0; break;
case 0xd0: key = 1; break;
case 0xb0: key = 2; break;
case 0x70: key = 3; break;
}
P3 = 0x0f;//判断哪一行被按下
switch(P3)
{
case 0x0e: key += 1;while(P3 != 0x0f) P3 = 0x0f;break;
case 0x0d: key += 5;while(P3 != 0x0f) P3 = 0x0f; break;
case 0x0b: key += 9;while(P3 != 0x0f) P3 = 0x0f; break;
case 0x07: key += 13;while(P3 != 0x0f) P3 = 0x0f; break;
}
flag = 1;
a = key*10;
P3 = 0xf0;
LED = 0xff;
}
j = 20000;
while(j--);
//第二次按下按键
if((P3 != 0xf0)&&(flag == 1))
{
switch(P3)
{
case 0xe0: key = 0; break;
case 0xd0: key = 1; break;
case 0xb0: key = 2; break;
case 0x70: key = 3; break;
}
P3 = 0x0f;//判断哪一行被按下
switch(P3)
{
case 0x0e: key += 1;while(P3 != 0x0f); break;
case 0x0d: key += 5;while(P3 != 0x0f); break;
case 0x0b: key += 9;while(P3 != 0x0f); break;
case 0x07: key += 13;while(P3 != 0x0f); break;
}
flag = 0;
LED = ~(0x00+a+key);
P3 = 0xf0;
}
}
return 0;
}