大众信息网

矩阵键盘的疑惑。。。P3=0xf0; //为什么一开始要赋值???见下面的程序,又为什么不可以赋其他值。

关注:104  答案:1  手机版
解决时间 2021-01-11 11:21
#include<reg52.h> #define uint unsigned int #define uchar unsigned char sbit dula=P2^6; sbit wela=P2^7; sbit key1=P3^4; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,0}; uchar num,temp,num1; void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } uchar keyscan(); void display(uchar aa); void main() { num=16; dula=1; P0=0; dula=0; wela=1; P0=0xc0; wela=0; while(1) { display(keyscan()); } } void display(uchar aa) { dula=1; P0=table[aa]; dula=0; } uchar keyscan() { uchar key_l,key_h,key; P3=0xf0; //为什么一开始要赋值??? key_l=P3; key_l=key_l&0xf0; if(key_l!=0xf0) { delay(10); if(key_l!=0xf0) { key_l=P3&0xf0; //11100000 key_l=key_l|0x0f;//11101111 P3=key_l; key_h=P3; key_h=key_h&0x0f;//00001110 key_l=key_l&0xf0;//11100000 key=key_h|key_l; //11101110 } } switch (key) { case 0xee:num=0;break; case 0xde:num=1;break; case 0xbe:num=2;break; case 0x7e:num=3;break; case 0xed:num=4;break; case 0xdd:num=5;break; case 0xbd:num=6;break; case 0x7d:num=7;break; case 0xeb:num=8;break; case 0xdb:num=9;break; case 0xbb:num=10;break; case 0x7b:num=11;break; case 0xe7:num=12;break; case 0xd7:num=13;break; case 0xb7:num=14;break; case 0x77:num=15;break; default:break; } return num; }
最佳答案
仔细看底下不是用它来做判断的条件了嘛、

*****************************************
P3=0xf0; //为什么一开始要赋值???
key_l=P3;
key_l=key_l&0xf0;
if(key_l!=0xf0){
delay(10);
if(key_l!=0xf0){
key_l=P3&0xf0; //11100000
key_l=key_l|0x0f;//11101111
P3=key_l;
key_h=P3;
key_h=key_h&0x0f;//00001110
key_l=key_l&0xf0;//11100000
key=key_h|key_l; //11101110
}
}
*****************************************
超级乱的代码.......没有一个注释,没有缩进....
不晕死才怪...
建议自己一行一行注释,慢慢看懂.....
你什么都没有标明,你自己定义的是什么东西...教谁能看懂?
我觉得单片机的程序,只要思路正确,
很简单的..
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!