回复 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;
}
}
}
}