发 帖  
原厂入驻New
[问答] 51时钟程序不知道为什么会出现一下情况,程序感觉没错
414 51单片机 时钟
分享
时钟程序显示时间,有三个按钮K0.K1.K2,可以调时间,按一下K0开始调分,按两下K0开始调时位,按三下退出调时间。K1加K2减。电路图:程序:#include<reg52.h>
#define u16 unsigned int
#define u8 unsigned char
u8 T=0,con=0x00,con1=0x00,con2=0x00;
u8 duanxuan[11]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40};
u8 weixuan[8]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE};
u8 dis[8]={0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A};
u8 time[3]={0x00,0x00,0x00};/*秒分时*/
sbit k0=P1^0;
sbit k1=P1^1;
sbit k2=P1^2;
void delay(u16 j)
{
        u16 i;
        while(j--)
        for(i=0;i<100;i++);
}


void SCAN()
{
        u8 k=0;
        dis[0]=time[2]/10;dis[1]=time[2]%10;
        dis[3]=time[1]/10;dis[4]=time[1]%10;
        dis[6]=time[0]/10;dis[7]=time[0]%10;
        for(k=0;k<8;k++)
        {P2=weixuan[k];P0=duanxuan[dis[k]];delay(1);P0=0x00;}
}


void key()
{
        IF(k0==0)
        {
                delay(100);
                while(k0==0);
                EA=0;con++;
                if(con>=3){con=0;EA=1;}
        }
        if(con!=0)
        {
                if(k1==0)
               
                {
                        delay(100);
                        while(k1==0);
                        time[con]++;
                        if(con==1)con1=60;else con1=24;
                        if(time[con]>=con1)time[con]=0;
                }
        }
        if(con!=0)
        {
                if(k2==0)
                {
                        delay(100);
                        while(k2==0);
                        time[con]--;
                        if(con==1)con2=59;else con2=23;
                        if(time[con]<=-1)time[con]=con2;
                }
        }
}


void main()
{
        EA=1;ET0=1;
        TR0=1;
        TMOD=0x01;
        TH0=0x3c;TL0=0xb0;
        while(1)
        {
                SCAN();
                key();
        }
}


void time_1() interrupt 1
{
        TH0=0x3c;TL0=0xb0;
        T++;
        if(T==20)
        {
                T=0;
                time[0]++;
                if(time[0]==60)
                {
                        time[0]=0x00;time[1]++;
                        if(time[1]==60)
                        {
                                time[1]=0;time[2]++;
                                if(time[2]==24)
                                {
                                        time[2]=0x00;
                                }
                        }
                }
               
        }                                 
}
我感觉没错啊,按道理讲时位分位都是00时,减的话应该是23和59.。。但是是这个样子。。求助啊实在找不出错误。



0
QQ图片20191129174048.png
QQ图片20191129173720.png
奖励5积分
2019-11-29 17:41:35   评论 分享淘帖 邀请回答

相关问题

1个回答
数据连续用错,无符号字符型数据的0-1=255
错误u8 time[3]={0x00,0x00,0x00};/*秒分时*/
正确char time[3]={0x00,0x00,0x00};/*秒分时*/
最佳答案

评分

参与人数 1积分 +1 收起 理由
智减法 + 1

查看全部评分

2019-11-29 17:41:36 评论

举报

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

我要提问
关闭

站长推荐 上一条 /6 下一条

快速回复 返回顶部 返回列表