使用两个按键S22,S23控制数码管上显示的数加减
#include<reg52.h>
#define uchar unsigned char
sbit P10=P1^0;
sbit P11=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;
/*sbit P14=P1^4;
sbit P15=P1^5;
sbit P16=P1^6;
sbit P17=P1^7;*/
sbit add=P2^6;
sbit dec=P2^7;
uchar m;
unsigned int d;
void display(uchar d1,uchar d2,uchar d3,uchar d4);
uchar a[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0x86,0x8e,0x82};
void int1() interrupt 3
{
uchar d1,d2,d3,d4;
TR1=0;
TH1=0xfd;
TL1=0xff;
TR1=1;
ET1=1;
d4=d%10;
d3=(d/10)%10;
d2=(d/100)%10;
d1=(d/1000)%10;
display(d1,d2,d3,d4);
}
void main()
{
unsigned int i;
m=1;
d=1234;
TMOD=0x10;
TH1=0xfd;
TL1=0xff;
TR1=1;
EA=1;
ET1=1;
while(1)
{
if(add==0||dec==0)
{
P2=P3;
i=10000;
while(i--);
if(add==0)
d++;
if(dec==0)
d--;
}
}
}
void display(uchar d1,uchar d2,uchar d3,uchar d4)
{
if(m==1)
{
P10=0;
P11=P12=P13=1;
P0=a[d1];
}
if(m==2)
{
P11=0;
P10=P12=P13=1;
P0=a[d2];
}
if(m==3)
{
P12=0;
P11=P10=P13=1;
P0=a[d3];
}
if(m==4)
{
P13=0;
P11=P12=P10=1;
P0=a[d4];
}
m++;
if(m>=5)
m=1;
}
问题一:变量d,为整型unsigned int d;开始显示1234,改为字符型则显示为0210,是因为字符型的要转化为整型来处理么?
问题二:主函数中的 unsigned int i;我把他放在P2=P3;的前面或者放在while(1)的前面都不对,按S32,S33都没反应,什么道理,请赐教!
谢谢! |