我用的是51学习板 ,这个板子P2口直接 4X4的键盘, P1口控制数码管位选,P0口是段选。下面的数码管显示函数单独运行没有问题,直接给(0-99)的数就会直接显示。。。 我的思路就是把 4x4按下的相应代码编成数组,然后取P2口的值,用for来一个一个对比。对比出来了,再直接显数。看教程都是用swich-case 来做,只是觉得那个太长。想换一种思路。可就是不行,按了不显示,有时候狂按,会显示出一个数来。但是基本上按不出来。
#include<reg52.h>#define uint unsigned int#define uchar unsigned char
uchar code table[]={0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xa7,0xa1,0x86,0x8e,0xff};//0-F
uchar temp,num=0;
void delay(uint z);void main(){ P1=0xff; // 开数码管位选 P0=0xff; // 关数码管段选 while(1) { P2=0xfe; //矩阵位11111110 temp=P2; temp=temp&0xf0; if(temp!=0xfe) { delay(1); if(temp!=0xfe) { temp=P2; switch(temp) { case 0xee : num=0; break; case 0xde : num=1;
YZ200原理图.pdf
(144.69 KB, 下载次数: 30)
2012-4-11 17:28 上传
点击文件名下载附件
单片机的原理图
break; case 0xbe : num=2; break; case 0x7e : num=3; break; }
P0=table[num];
// while(temp!=0xf0)// {// temp=P3;// temp=temp&0xf0;// } } } }}
void delay(uint z){ uint x,y; for(x=120;x>0;x--) for(y=z;y>0;y--);}
此帖出自
小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>