微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > |用数码管做跑表

|用数码管做跑表

时间: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那一行

case(0):  去掉括号 case 0:

我发的帖子电子钟里面就有个跑秒功能

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top