微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 这个0x80是干什么的?程序高手看进来

这个0x80是干什么的?程序高手看进来

时间:10-02 整理:3721RD 点击:
void display(uchar shi2,uchar shi1,uchar fen2,uchar fen1,uchar miao2,uchar miao1)
{
   dula=0;
   P0=table[shi2];
   dula=1;
   dula=0;
   wela=0;
   P0=0xfe;
   wela=1;
   wela=0;
   delay(5);
   P0=table[shi1]|0x80;
   dula=1;
   dula=0;
   P0=0xfd;
   wela=1;
   wela=0;
   delay(5);
   P0=table[fen2];
   dula=1;
   dula=0;
   P0=0xfb;
   wela=1;
   wela=0;
   delay(5);
  P0=table[fen1]|0x80;
   dula=1;
   dula=0;
   P0=0xf7;
   wela=1;
   wela=0;
   delay(5);
   P0=table[miao2];
   dula=1;
   dula=0;
   P0=0xef;
   wela=1;
   wela=0;
   delay(5);
   P0=table[miao1];
   dula=1;
   dula=0;
   P0=0xdf;
   wela=1;
   wela=0;
   delay(5);
}
void main()
{
        TMOD=0x01;
        TH0=(65536-46080)/256;// 由于晶振为11.0592,故所记次数应为46080,计时器每隔50000微秒发起一次中断。
        TL0=(65536-46080)%256;//46080的来历,为50000*11.0592/12
        ET0=1;
        EA=1;
       
        while(1)
        {        keyscan0();
               
                if(ok==1)
                {        TR0=1;
                        wei=0;
               
                if(pp==20)
                {        pp=0;
                        m++;
                        if(m==60)
                        {
                                m=0;
                                f++;
                                if(f==60)
                                {
                                        f=0;
                                        s++;
                                        if(s==24)  //为24h一个循环,若要12h,只需在此改为12即可。
                                        {
                                                s=0;
                                        }
                                }
                        }
                }
               
                a0=s%10;
                a1=s/10;
                b0=f%10;
                b1=f/10;
                c0=m%10;
                c1=m/10;
                display(a1,a0,b1,b0,c1,c0);
        }
        else
        {
        if(change==1)
        {        TR0=0;
                keyscan();
                if(key!=10)
                {
               
                switch(wei)
                {
                        case 1: if(key<3)                //小时最高位为2
                                        a1=key;
                                        else
                                        wei--;
                                        break;
                        case 2: if(a1==1|a1==0)
                                        a0=key;
                                        else
                                        if(key<5)
                                        a0=key;                   //当小时最高位为2时,低位最高为4
                                        break;
                        case 3: if(key<6)                //分钟最高位为5
                                        b1=key;
                                        else
                                        wei--;
                                        break;
                        case 4: b0=key; break;
                        case 5: if(key<6)                //秒最高位为5
                                        c1=key;
                                        else
                                        wei--;
                                        break;
                        case 6: c0=key; break;
                }
                key=10;
                }
                        m=c1*10+c0;
                        f=b1*10+b0;
                        s=a1*10+a0;
                display(a1,a0,b1,b0,c1,c0);
        }
        if(dingshi==1)
        {
                TR0=0;
                display(shi20,shi10,fen20,fen10,miao20,miao10);       
                keyscan();
                if(key!=10)
                {
                switch(wei)
                {
                        case 1: if(key<3)                //小时最高位为2
                                        shi20=key;
                                        else
                                        wei--;
                                        break;
                        case 2: if(a1==1|a1==0)
                                        shi10=key;
                                        else
                                        if(key<5)
                                        a0=key;                   //当小时最高位为2时,低位最高为4
                                        break;
                        case 3: if(key<6)                //分钟最高位为5
                                        fen20=key;
                                        else
                                        wei--;
                                        break;
                        case 4: fen10=key; break;
                        case 5: if(key<6)                //秒最高位为5
                                        miao20=key;
                                        else
                                        wei--;
                                        break;
                        case 6: miao10=key; break;
                }
                key=10;
                }
                yidingshi=1;
                display(shi20,shi10,fen20,fen10,miao20,miao10);       
        }       
        }
        if(yidingshi==1)
        {
        if((a1==shi20)&&(a0==shi10)&&(b1==fen20)&&(b0==fen10)&&(c1==miao20)&&(c0==miao10))
                beep=0;
        }
        if(((a1==shi20)&&(a0==shi10)&&(b1==fen20)&&(b0==fen10+1)&&(c1==miao20)&&(c0==miao10))||(yidingshi==0))//一分钟报时提示
                beep=1;
        }
}

显示小数点的,也就数码管那个H

显示小数点的,类似于这样
小时。分。秒

额,这样啊,懂了

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

网站地图

Top