新闻动态
资质荣誉
联系我们
【新手求助[抱拳]】|用数码管做跑表
发布时间:2021-05-31 09:07:11 来源:大电流电感厂家 查看: 次
数码管前三位显示一个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:
我发的帖子电子钟里面就有个跑秒功能
高频开关电源主要磁性元件的设计引言 在电力直流系统中,由于普遍采用高频模块,对于高频模块的设计是功率越来越大,而体积却是越来越小,这就对其设计提出了一个关键的问题,那就是如何解决磁性元件的损耗及发热问题。 高频开关电源中大量使用各
[稳压电源]LM317用3055扩流失败我的变压器有足够功率不用怀疑32V100W,抽头后整流还有24V,足以满足测试5W LED灯。 正电源测试负载是5WLED灯(21V 350mA),接上电源只有150mA,再并联一个LED灯有压降2V总电流175mA。 测试2个三极管都是好的,不解。 负电源测试最开始只能到-10V,后来拆掉Q4后一切正常,也是不解。 主要疑惑是正电源扩流问题,我是用的官网图。 我也考虑过
隔离变压器原副边的电气间隙和爬电距离是多少呢请大神帮忙指点一下,下面的表格具体值是多大?
保险丝之前 L、N线之间隔离方案的变压器原副边 电气间隙爬电距离电气间隙爬电距离北美欧洲中国
一般保险丝两