ww4160
获得 1 次赞
帮助过13人
原理图是参考网上的资料就不发上来了,pcb没有认真走线,用的是自动布局,这个板子主要是显示3d功能,附件为pcb文件和3dpcb.lib的库 软件用的ad winter 09
分析思路: 行列扫描法: 第一步:先把第一行值0,(p3=0xfe) 第二步:把p3赋值给temp,(temp= p3) 第三步:temp和0xf0与后再赋值给temp,(temp=temp&0xf0) 第四步:判断temp是否等于0xf0,(if(temp!=0xf0)) 第五步:如果temp!=0xf0说明 p3口高4位有按键按下,具体是哪个用switch case语句来判断 第六步:延时10ms 第七步:重复第二步,第三步和第四步操作,确认有按键按下 第八步:把新的p3赋值给temp 第九步:switch语句,判断出是哪个按键按下 switch (temp) { case 0x7e: key1=0;break; 第1个按键按下 (最左上角为第一个按键) case 0xbe: key2=0;break; 第2个按键按下 case 0xde: key3=0;break; 第3个按键按下 case 0xee: key4=0;break; 第4个按键按下 } 第十步:检测按键释放 while(temp!=0xf0) { temp=p3; temp=temp&0xf0; } 只要有按键按下 temp不等于0xf0为真,就不断读取p3口的值,然后与0xf0做与运算,再赋值给temp,只要有结果不等于0xf0,说明按键没有释放,只有按键释放后,p3高四位全部为1111,然后temp=temp&0xf0的结果为0xf0 , 然后while语句判断0xf0!=0xf0为假,程序才推出while语句 第十一步:执行相应的代码 第二行 第三行 第四行也是完全一样的操作,第一行写出来以后,后面三行都是复制,稍微改一些数值就可以。 原理图: 程序如下: #include #define uint unsigned int #define uchar unsigned char uchar code smg_dm;break; default: break; } while(temp!=0xf0) { t