回复 2楼 rjsp
您好,麻烦再看看。1)我是先定义的uchar k[3],所以后面直接赋值,可是如图那样出现语法错误,您所说的定义一样出现语法错误,而下文所写编译成功。2)还有一个问题,用b计数定时器0溢出次数,无论把b定义成int,uint还是long,都是计数显示到256便重0开始,我不清楚是什么原因,怎么才能把b变成16位二进制数,使他能计数到999,再往上计数到9999之类的该怎么处理。十分感谢!!!
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit we = P2^7;
sbit du = P2^6;
sbit LED1=P1^0;
sbit key_s2=P3^0;
sbit key_s3=P3^1;
sbit key_s4=P3^2;
uchar code leddata[]={
0x3F,
//"0"
0x06,
//"1"
0x5B,
//"2"
0x4F,
//"3"
0x66,
//"4"
0x6D,
//"5"
0x7D,
//"6"
0x07,
//"7"
0x7F,
//"8"
0x6F,
//"9"
0x77,
//"A"
0x7C,
//"B"
0x39,
//"C"
0x5E,
//"D"
0x79,
//"E"
0x71,
//"F"
0x76,
//"H"
0x38,
//"L"
0x37,
//"n"
0x3E,
//"u"
0x73,
//"P"
0x5C,
//"o"
0x40,
//"-"
0x00,
//熄灭
0x00
//自定义
};
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=114;y>0;y--);
}
void display(uchar i)
{
uchar bai,shi,ge,w,e,k[3];
bai=i/100;
shi=i%100/10;
ge=i%10;
k[0] = bai;
k[1]=shi;
k[2]=ge;
for(w=0;w<3;w++)
{
P0=0xff;
e=0xfe;
we=1;
P0=_crol_(e,w);
we=0;
du=1;
P0=leddata[k[w]];
du=0;
delay(2);
}
w=0;
}
void main()
{
uchar a;
uint b;
TR0=1;
TMOD=0x61;
TH0=0x4b;
TL0=0xfc;
while(1)
{
if(key_s2==0)
{
delay(5);
if(key_s2==0)
{
TR0=0;
}
}
if(key_s3==0)
{
delay(5);
if(key_s3==0)
{
TR0=1;
}
}
if(TF0==1)
{
TH0=0x4b;
TL0=0xfc;
TF0=0;
a++;b++;
}
if(a==2)
{
a=0;
LED1=~LED1;
}
display(b);
if(key_s4==0)
{
delay(5);
if(key_s4==0)
{
b=0;
}
}
}
}