黎穆晨曦 2022-12-11 20:03 采纳率: 80%
浏览 26
已结题

请问这个宏定义99是什么意思

问题遇到的现象和发生背景

请问这个宏定义99是什么意思,程序的功能就是完成数码管显示时分秒和闹钟的时,分,秒
程序是网上找的上面的注释是这个 “//99是任意一个数,用于后面条件检测”,但是我没看懂,所以想请教一下各位

#define SHISHE shi,99,99     
#define FENSHE 99,fen,99
#define MIAOSHE 99,99,miao
#define NAO_S nao_s,99,99      
#define NAO_F 99,nao_f,99
#define NAO_M 99,99,nao_m

img


这是全部代码

#include"reg52.h"
#define uchar unsigned char
#define uint unsigned int

#define ulong unsigned long
#define XIANSHI shi,fen,miao  
#define SHISHE shi,99,99     //99是任意一个数,用于后面条件检测
#define FENSHE 99,fen,99
#define MIAOSHE 99,99,miao
#define NAO_S nao_s,99,99       //闹钟的宏
#define NAO_F 99,nao_f,99
#define NAO_M 99,99,nao_m     //宏定义结束

sbit key1=P3^0;                   //定义按键所连51单片机的引脚
sbit key2=P3^1;
sbit key3=P3^2;

sbit duan_1 =P2^0;           //虽然声明是duan但是其实是用来位选的
sbit duan_2 =P2^1;
sbit duan_3 =P2^2;
sbit duan_4 =P2^3;
sbit duan_5 =P2^4;
sbit duan_6 =P2^5;
sbit huxiled=P2^6;          //呼吸灯
sbit nzled=P3^3;          //D2灯用来指示设置的闹钟时间到

sbit BEEP=P1^5; 

uchar shijian[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};     

uchar shi,fen,miao,nao_s=0,nao_f=0,nao_m=15,num_1=0,num_2=0,b=1,c=0;
uchar a=0,n=0;

                      
            
void delayms(uint x)                
{
    uint a,b;
    for(a=x;a>0;a--)
        for(b=110;b>0;b--);        //延时1ms   
}

void xianshi(uchar S,F,M)           //时间和闹钟显示函数
{
    uchar shi_1,shi_2,fen_1,fen_2,miao_1,miao_2;

    shi_1=S/10;shi_2=S%10;
    fen_1=F/10;fen_2=F%10;
    miao_1=M/10;miao_2=M%10;
    
    if(S==99) {shi_1=10;shi_2=10;}//和设置按键有关,为了单独显示某一时或者分、秒。
    if(F==99) {fen_1=10;fen_2=10;}
    if(M==99) {miao_1=10;miao_2=10;}

    duan_1=1;P0=shijian[shi_1];delayms(5);duan_1=0;      //位选
    duan_2=1;P0=shijian[shi_2];delayms(5);duan_2=0;
    duan_3=1;P0=shijian[fen_1];delayms(5);duan_3=0;
    duan_4=1;P0=shijian[fen_2];delayms(5);duan_4=0;
    duan_5=1;P0=shijian[miao_1];delayms(5);duan_5=0;
    duan_6=1;P0=shijian[miao_2];delayms(5);duan_6=0;


}

void keyscan()
{
    uint time=0;
    if(key1==0)
    {
        while(!key1) 
        {
            time++;
            if(time>40000){a=5;break;} //这是一个长按进入闹钟模式设置键
        }
        if(time<39999)    
        a++;
    }
    if(key2==0)                           //key2控制时间加
    {

        delayms(90);

        if(key2==0)
        {
            if(a==1) {delayms(90);shi++;if(shi==24) shi=0;}    
            if(a==2) {delayms(90);fen++;if(fen==60) fen=0;}
            if(a==3) {delayms(90);miao++;if(miao==60) miao=0;}

            if(a==6) {delayms(90);nao_s++;if(nao_s==24) nao_s=0;}
            if(a==7) {delayms(90);nao_f++;if(nao_f==60) nao_f=0;}
            if(a==8) {delayms(90);nao_m++;if(nao_m==60) nao_m=0;}
        }while(!key2);
    }
    if(key3==0)                          //key3控制时间减
    {
        delayms(90);
        if(key3==0)
        {
            if(a==1) {delayms(90);shi--;if(shi>=0&&shi<24);else shi=23;}
            if(a==2) {delayms(90);fen--;if(fen>=0&&fen<60);else fen=59;}
            if(a==3) {delayms(90);miao--;if(miao>=0&&miao<60);else miao=59;}

            if(a==6) {delayms(90);nao_s--;if(nao_s>=0&&nao_s<24);else nao_s=23;}
            if(a==7) {delayms(90);nao_f--;if(nao_f>=0&&nao_f<60);else nao_f=59;}
            if(a==8) {delayms(90);nao_m--;if(nao_m>=0&&nao_m<60);else nao_m=59;}    
        }while(!key3); 
    }
    if(a==4||a==9){a=0;}             //归零
}

void init()
{
    nzled=0;   //给D2灯一个预设熄灭
    TMOD=0x01; //工作方式1 

    TH0=0x4C;  //定时器T0  定时19ms
    TL0=0x00;
    ET0=1; 
    ET1=1;

    TH1=0xc0; //定时器T1   定时56ms
    TL1=0x00;
    ET0=1; 
    ET1=1;
    TR1=1; 

    EA=1;     //总中断
}

void nzhongled()              //闹钟和时间一致时让数码管和D2一起在将近10秒内频闪不断
{
    uint g;
    for(g=0;g<23;g++)
    {
        nzled=1;                  //闹钟显示灯开始闪烁
        delayms(200);
        xianshi(XIANSHI);
        nzled=0;
        delayms(200);
        xianshi(XIANSHI);
        BEEP=~BEEP;              //取反输出到喇叭的信号
            
        
    }    
}

void main()
{
    
    init();
    while(1)
    {    
        switch(a)
        {    
            case 0:TR0=1;keyscan();xianshi(XIANSHI);break;
            case 1:TR0=0;keyscan();xianshi(SHISHE);break;//中断关闭,时间停止
            case 2:keyscan();xianshi(FENSHE);break;
            case 3:keyscan();xianshi(MIAOSHE);break;
            case 5:;
            case 6:keyscan();xianshi(NAO_S);break;
            case 7:keyscan();xianshi(NAO_F);break;
            case 8:keyscan();xianshi(NAO_M);break;
        }
        if(a==0&&(nao_s==shi&&nao_f==fen&&nao_m==miao))
        {
            nzhongled();     //闹钟与时间一致进入nzhongled函数
            
        }

    }
}

void zhongduan1() interrupt 1        //精确计时       定时器中断T0
{
    TH0=0x4C;
    TL0=0x00;
    num_1++;
    if(num_1==20)
    {
        num_1=0;
        miao++;
        if(miao==60)
        {
            miao=0;
            fen++; 
            if(fen==60)
            {
                fen=0;
                shi++;
                if(shi==24) shi=0;    
            }
        }
    }
}

void zhongduan2() interrupt 3    
//呼吸灯程序,具体体现为D1灯,
//在proteus中无呼吸效果猜测是因为proteus模拟时每次刷新每帧是0.05秒太久

{
    TH1=0xc0;
    TL1=0x00;
    num_2++;
    if(b<=6)
    {
        if(num_2<b) huxiled=1;
        else huxiled=0;
    }
    else
    {
        if((num_2+6)<b) huxiled=0;
        else huxiled=1;    
    }
    if(num_2==6)
    {
        num_2=0;c++;
        if(c==4)
        {
            b++;c=0;
            if(b==13) b=0;
        }
    }
}


  • 写回答

1条回答 默认 最新

  • ShowMeAI 2022-12-11 20:21
    关注

    望采纳


    这个宏定义的作用是定义一组数码管显示的时分秒数值。其中,宏定义 SHISHE 的值为 shi,99,99,表示时钟的时位和分秒位的数值分别为 shi 和 99;宏定义 FENSHE 的值为 99,fen,99,表示时钟的分位和秒位的数值分别为 fen 和 99;宏定义 MIAOSHE 的值为 99,99,miao,表示时钟的秒位的数值为 miao;宏定义 NAO_S 的值为 nao_s,99,99,表示闹钟的时位和分秒位的数值分别为 nao_s 和 99;宏定义 NAO_F 的值为 99,nao_f,99,表示闹钟的分位和秒位的数值分别为 nao_f 和 99;宏定义 NAO_M 的值为 99,99,nao_m,表示闹钟的秒位的数值为 nao_m。


    这些宏定义的作用是在程序中方便地设置时钟和闹钟的时分秒数值,以便进行显示。例如,在设置时钟的时分秒数值时,可以使用如下代码:

    shi = 10;
    fen = 20;
    miao = 30;
    set_time(SHISHE);
    set_time(FENSHE);
    set_time(MIAOSHE);
    
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月13日
  • 修改了问题 12月12日
  • 修改了问题 12月11日
  • 修改了问题 12月11日
  • 展开全部

悬赏问题

  • ¥15 SPSS分类模型实训题步骤
  • ¥15 求解决扩散模型代码问题
  • ¥15 工创大赛太阳能电动车项目零基础要学什么
  • ¥20 limma多组间分析最终p值只有一个
  • ¥15 nopCommerce开发问题
  • ¥15 torch.multiprocessing.spawn.ProcessExitedException: process 1 terminated with signal SIGKILL
  • ¥15 QuartusⅡ15.0编译项目后,output_files中的.jdi、.sld、.sof不更新怎么解决
  • ¥15 pycharm输出和导师的一样,但是标红
  • ¥15 想问问富文本拿到的html怎么转成docx的
  • ¥15 我看了您的文章,遇到了个问题。