单片机/MCU论坛
直播中

jf_21811294

3年用户 4经验值
私信 关注
[问答]

跪求大佬讲解这个电子时钟!不然要挂科了!

#include
#define uint unsigned int
#define uchar unsigned char
uchar code LED[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};
uchar code rectm[2]={7,3};
int code day1[3]={31,12,99};
int code day2[3]={1,1,0};
int code sec1[3]={59,59,24};
uchar aa,bb[8]={0,0,11,0,0,11,0,0};
int sec[3]={50,29,15};
int day[3]={22,11,21};
int msec=0,msec1=0;
uchar p=0,dsptm=0,moditm=0;
bit flsh=0,tm1ms=0,dspymd=0,inmodi=0;
int item=0;
void delay(unsigned int n)
{
        uint k;//,j;
        for(k=0;k         {       
                while(!tm1ms)tm1ms=0;
               
        }
}
void display(void)
{
        uint i;
        for(i=0;i<3;i++)
        {
                if(dspymd)
                {
                bb[i*3+1]=day[i]/10;
                bb[i*3]=day[i]-bb[i*3+1]*10;
                }
                else
                {
                bb[i*3+1]=sec[i]/10;
                bb[i*3]=sec[i]-bb[i*3+1]*10;
                }
       
        }
        if(flsh&&inmodi)
        {
        bb[item*3+1]=10;
        bb[item*3]=10;
        }
        aa=0xfe;
        for(i=0;i<8;i++)
        {
                P0=0xff;
                P2=0xff;
                P0=LED[bb[i]];
                P2=aa;
                aa=(aa<<1)|0x01;
                delay(1);
        }
}
void  get_key() interrupt 0 using 2
{
        uchar temp;
        temp=P1&0x1f;
        EA=0;
        switch(temp)
        {
                case 0x1e:p=1;break;
                case 0x1d:p=2;break;
                case 0x1b:p=3;break;
                case 0x17:p=4;break;
                case 0x0f:p=5;break;
                default:p=0;break;
        }
        EA=1;
        //return p;
}
void time0() interrupt 1 using 1
{
        TH0=(65536-1000)/256;
        TL0=(65536-1000)%256;
        tm1ms=1;
        msec=msec+1;
        msec1=msec1+1;
        if(msec1>=500)
        {
                msec1=0;
                flsh=!flsh;
        }
                if(msec>=1000)
                {
                        if(inmodi)
                        {
                        moditm=moditm+1;
                        if(moditm>=10)
                        {
                        inmodi=0;
                        moditm=0;
                        }
                        }
                        msec=0;
                        if(!inmodi)
                        {
                        dsptm=dsptm+1;
                        if(dsptm>=rectm[dspymd])
                        {
                        dsptm=0;
                        dspymd=!dspymd;
                        }
                        }
                        sec[0]=sec[0]+1;
                        if(sec[0]>=60)
                        {
                                sec[0]=0;
                                sec[1]=sec[1]+1;
                                if(sec[1]>=60)
                                {
                                        sec[2]=sec[2]+1;
                                        if(sec[2]>=24)sec[2]=0;
                                }
                        }
                }
}

main()
{
uint key=0,j=0;

uchar bk=0;
        TMOD=0x01;
        TH0=(65536-1000)/256;
        TL0=(65536-1000)%256;
  IT0=1;
  EX0=1;
        ET0=1;
        EA=1;
        TR0=1;
tm1ms=0;
dspymd=0;
while(1)
        {
                        if(p)
                        {
                                //delay(2);
                                if(p&&bk==0)
                                {
                                        key=p;//get_key();
                                        bk=1;
                                        p=0;
                                        inmodi=1;
                                        moditm=0;
                                        switch(key)
                                        {
                                                case 1:
                                                        if(dspymd)
                                                        {
                                                        day[item]=day[item]+1;
                                                        if(day[item]>day1[item])day[item]=day2[item];
                                                        }
                                                        else
                                                        {
                                                        sec[item]=sec[item]+1;
                                                        if(sec[item]>sec1[item])sec[item]=0;
                                                        }
                                                               
                                                        break;
                                                case 2:
                                                        if(dspymd)
                                                        {
                                                        day[item]=day[item]-1;
                                                        if((item==2)?(day[item]<0):(day[item]<=0))day[item]=day1[item];
                                                        }
                                                        break;
                                                case 3:
                                                        item=0;
                                                        break;
                                                case 4:
                                                        item=1;
                                                        break;
                                                case 5:
                                                        item=2;
                                                        break;
                                        }
                                }
                               
                        }
                        display();
                        bk=0;//if(!get_key())bk=0;
                               
        }
}

回帖(2)

jf_21811294

2021-12-13 15:59:00
数组ietm的作用
变量inmodi的理论取值有多少个,实际取值是什么
还有改成共阴怎么改
球球了!!!
举报

阿信509

2021-12-13 20:52:38
先不要看程序,先想想电子钟是怎么回事,怎么显示,然后在看程序
举报

更多回帖

发帖
×
20
完善资料,
赚取积分