|用数码管做跑表
时间:10-02
整理:3721RD
点击:
数码管前三位显示一个000-999每隔1%s走一次的跑表,键盘按下跑表停止,松开跑表继续走。我的代码如下:
编译的时候总是显示switch循环第一个case那里语句无效,而且等号附近出现语法错误,但是我看来看去似乎没什么错误,大神请指教[抱拳],多谢了
/************ ******************************************
数码管前三位显示一个000-999每隔1%s走一次的跑表,
键盘按下跑表停止,松开跑表继续走
********************************************************/
#include"reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
#define dig P0; //数码管接在P0口
u8 a,b,s,g;
u8 code smgduan[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
sbit k1=P3^0; //独立键盘k1
sbit LSA=P2^2; //138译码器三个输入端
sbit LSB=P2^3;
sbit LSC=P2^4;
void delay(u16 i);
void initial();
void digdisplay();
void main()
{
initial(); //a是每1%秒自加1的数
while(1)
{
b=a/100; //a的百位
s=a%100/10; //a的十位
g=a%10; //a的个位
digdisplay(); //数码管显示子函数
if(k1==0) //判断按键按下
{ //消抖
delay(1000);
if(k1==0)
{
TR0=0; //按下则关闭定时器T0
}
while(k1) //松开则启动
{
TR0=1;
}
}
}
}
void delay(u16 i)
{
while(i--);
}
void initial() //初始化子函数
{
a=0;
b=0;
s=0;
g=0;
TMOD=0x01;
TH0=(65535-10000)/256;
TL0=(65535-10000)%256;
EA=1;
ET0=1;
TR0=1;
}
void digdisplay() //数码管前三位显示子函数:动态扫描
{
u8 i;
for(i=0;i<3;i++)
{
switch(i)
{
case(0):
LSA=0;LSB=0;LSC=0;dig=smgduan[g]; break;
case(1):
LSA=1;LSB=0;LSC=0;dig=smgduan[s];break;
default:
LSA=0;LSB=1;LSC=0;dig=smgduan[b];break;
}
delay(1000);
}
}
void timer0() interrupt 1 //中断函数
{
TH0=(65535-10000)/256;
TL0=(65535-10000)%256;
a++;
}
编译结果:
MAIN.C(72): warning C275: expression with possibly no effect //在第一个case一行
MAIN.C(72): error C141: syntax error near '=' //在第一个case那一行
MAIN.C(74): error C141: syntax error near '=' //在第二个case那一行
MAIN.C(76): error C141: syntax error near '=' //在第三个case那一行
编译的时候总是显示switch循环第一个case那里语句无效,而且等号附近出现语法错误,但是我看来看去似乎没什么错误,大神请指教[抱拳],多谢了
/************ ******************************************
数码管前三位显示一个000-999每隔1%s走一次的跑表,
键盘按下跑表停止,松开跑表继续走
********************************************************/
#include"reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
#define dig P0; //数码管接在P0口
u8 a,b,s,g;
u8 code smgduan[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
sbit k1=P3^0; //独立键盘k1
sbit LSA=P2^2; //138译码器三个输入端
sbit LSB=P2^3;
sbit LSC=P2^4;
void delay(u16 i);
void initial();
void digdisplay();
void main()
{
initial(); //a是每1%秒自加1的数
while(1)
{
b=a/100; //a的百位
s=a%100/10; //a的十位
g=a%10; //a的个位
digdisplay(); //数码管显示子函数
if(k1==0) //判断按键按下
{ //消抖
delay(1000);
if(k1==0)
{
TR0=0; //按下则关闭定时器T0
}
while(k1) //松开则启动
{
TR0=1;
}
}
}
}
void delay(u16 i)
{
while(i--);
}
void initial() //初始化子函数
{
a=0;
b=0;
s=0;
g=0;
TMOD=0x01;
TH0=(65535-10000)/256;
TL0=(65535-10000)%256;
EA=1;
ET0=1;
TR0=1;
}
void digdisplay() //数码管前三位显示子函数:动态扫描
{
u8 i;
for(i=0;i<3;i++)
{
switch(i)
{
case(0):
LSA=0;LSB=0;LSC=0;dig=smgduan[g]; break;
case(1):
LSA=1;LSB=0;LSC=0;dig=smgduan[s];break;
default:
LSA=0;LSB=1;LSC=0;dig=smgduan[b];break;
}
delay(1000);
}
}
void timer0() interrupt 1 //中断函数
{
TH0=(65535-10000)/256;
TL0=(65535-10000)%256;
a++;
}
编译结果:
MAIN.C(72): warning C275: expression with possibly no effect //在第一个case一行
MAIN.C(72): error C141: syntax error near '=' //在第一个case那一行
MAIN.C(74): error C141: syntax error near '=' //在第二个case那一行
MAIN.C(76): error C141: syntax error near '=' //在第三个case那一行
case(0): 去掉括号 case 0:
我发的帖子电子钟里面就有个跑秒功能