请各位大佬帮忙看看,为什么这个程序在proteus中不能显示256
#include<reg52.h>
#define uint unsigned int//宏定义
#define uchar unsigned char//宏定义
sbit wela=P2^7;//数码管位选锁存端
sbit dula=P2^6;//数码管段选锁存端
uchar disnum,temp,key,num;
uchar keyscan(); //键盘扫描函数声明
display(uchar);
delay (uchar); //延时函数声明
uchar code table_du[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0};
void main()
{
disnum=256;
while(1)
{
num=keyscan(); //用num读取矩阵键盘扫描函数的返回值
display(num); //数码管显示
}
}
uchar keyscan() //矩阵键盘扫描函数
{
P3=0xf0;//让P3.0,P3.1,P3.2,P3.3等于0,P3.4,P3.5,P3.6,P3.7等于1
temp=P3;//用temp读取P3口当前的值
temp=temp&0xf0;//把temp的值和0xf0作与运算,即保持高4位变,低4位为0
if(temp!=0xf0)//如果此时的temp不等于0xf0,说明有按键被按下了
{
delay(10);//延时约10ms
if(temp!=0xf0)//再次判断是否真的有按键按下(即消除前沿抖动)
{
temp=P3;//如果有按键按下,temp重新读取P3口的值
temp=temp|0x0f;//作按位或,即保持高4位不变,低4位为1
P3=temp;//把temp的值赋给P3口
key=P3;//然后用key读取P3口的值,作为按键的键值
switch(key)//让每一个键值和数码管显示的数对应起来
{
case 0xee:disnum=1;//当key的值为0xee时,disnum的值为1
break;
case 0xde:disnum=4;//当key的值为0xde时,disnum的值为4
break;
case 0xbe:disnum=9;
break;
case 0x7e:disnum=16;
break;
case 0xed:disnum=25;
break;
case 0xdd:disnum=36;
break;
case 0xbd:disnum=49;
break;
case 0x7d:disnum=64;
break;
case 0xeb:disnum=81;
break;
case 0xdb:disnum=100;
break;
case 0xbb:disnum=121;
break;
case 0x7b:disnum=144;
break;
case 0xe7:disnum=169;
break;
case 0xd7:disnum=196;
break;
case 0xb7:disnum=225;
break;
case 0x77:disnum=256;
break;
}
}
}
return disnum;
}
display(uchar disnum) //数码管显示函数
{
wela=1;
P0=0xfe; //第1个数码管位选
wela=0;
dula=1;
P0=table_du[disnum/100]; //百位上的数
dula=0;
P0=0xff;
delay(10);
wela=1;
P0=0xfd; //第2个数码管位选
wela=0;
dula=1;
P0=table_du[disnum%100/10]; //十位上的数
dula=0;
P0=0xff;
delay(10);
wela=1;
P0=0xfb; //第3个数码管位选
wela=0;
dula=1;
P0=table_du[disnum%100%10]; //个位上的数
dula=0;
P0=0xff;
delay(10);
}
delay(uchar x)
{
uchar a,b;
for(a=x;a>0;a--)
for(b=200;b>0;b--);
}
|