請各位大佬幫忙看看,為什么這個程序在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--);
}
|