打印
[51单片机]

自制的电子时钟显示出问题

[复制链接]
900|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
冰封小肥牛|  楼主 | 2015-5-11 15:46 | 只看该作者
#include<reg52.h>
#include"tou.h"
void delay(uint z)
{
    uint x,y;
    for(x=z;x>0;x--)
        for(y=110;y>0;y--);
}

void di()
{
    beep=0;
    delay(100);
    beep=1;
}

void write_com(uchar com)
{
    rs=0;
    lcden=0;
    P0=com;
    delay(1);
    lcden=1;
    delay(1);
    lcden=0;
}

void write_date(uchar date)
{
    rs=1;
    lcden=0;
    P0=date;
    delay(1);
    lcden=1;
    delay(1);
    lcden=0;
}

void init()
{
    uchar num;
    EA=1;
    EX1=1;
    IT1=1;
    flag1=0;
    t0_num=0;
    s1num=0;
    week=1;
    lcden=0;
    rd=0;
    write_ds(0x0a,0x20);
    write_ds(0x0b,0x26);
    set_time();
    write_com(0x38);
    write_com(0x0c);
    write_com(0x06);
    write_com(0x01);
    write_com(0x80);
    for(num=0;num<15;num++)
        {
            write_date(table[num]);
            //delay(1);
        }
    write_com(0x80+0x40);
    for(num=0;num<11;num++)
    {
        write_date(table1[num]);
        //delay(1);
    }
}

void write_sfm(uchar add,char date)
{
    char shi,ge;
    shi=date/10;
    ge=date%10;
    write_com(0x80+0x40+add);
    write_date(0x30+shi);
    write_date(0x30+ge);
}

void write_nyr(uchar add,char date)
{
    char shi,ge;
    shi=date/10;
    ge=date%10;
    write_com(0x80+add);
    write_date(0x30+shi);
    write_date(0x30+ge);
}

void write_week(char we)
{
    write_com(0x80+12);
    switch(we)
    {
        case 1:write_date('M');delay(5);
               write_date('O');delay(5);
               write_date('N');
               break;
        case 2:write_date('T');delay(5);
               write_date('U');delay(5);
               write_date('E');
               break;
        case 3:write_date('W');delay(5);
               write_date('E');delay(5);
               write_date('D');
               break;
        case 4:write_date('T');delay(5);
               write_date('H');delay(5);
               write_date('U');
               break;
        case 5:write_date('F');delay(5);
               write_date('R');delay(5);
               write_date('T');
               break;
        case 6:write_date('S');delay(5);
               write_date('A');delay(5);
               write_date('T');
               break;
        case 7:write_date('S');delay(5);
               write_date('U');delay(5);
               write_date('N');
               break;
    }
}

void keyscan()
{
    if(flag_ri==1)
    {
        if((s1==0)||(s2==0)||(s3==0)||(s4==0))
        {
            delay(5);
            if((s1==0)||(s2==0)||(s3==0)||(s4==0))
            {
                while(!(s1&s2&s3&s4));di();
                flag_ri=0;
            }
        }
    }
    if(s1==0)
    {
        delay(5);
        if(s1==0)
        {
            s1num++;
            if(flag1==1)
                if(s1num==4)
                    s1num=1;
            flag=1;
            while(!s1);di();
            switch(s1num)
            {
                case 1:write_com(0x80+0x40+10);
                       write_com(0x0f);
                       break;
                case 2:write_com(0x80+0x40+7);
                       break;
                case 3:write_com(0x80+0x40+4);
                       break;
                case 4:write_com(0x80+12);
                       break;
                case 5:write_com(0x80+9);
                       break;
                case 6:write_com(0x80+6);
                       break;
                case 7:write_com(0x80+3);
                       break;
                case 8:s1num=0;
                       write_com(0x0c);
                       flag=0;
                       write_ds(0,miao);
                       write_ds(2,fen);
                       write_ds(4,shi);
                       write_ds(6,week);
                       write_ds(7,day);
                       write_ds(8,month);
                       write_ds(9,year);
                       break;
            }
        }
    }
    if(s1num!=0)
    {
        if(s2==0)
        {
            delay(1);
            if(s2==0)
            {
                while(!s2);di();
                switch(s1num)
                {
                    case 1:miao++;
                           if(miao==60)
                                miao=0;
                           write_sfm(10,miao);
                           write_com(0x80+0x40+10);
                           break;
                    case 2:fen++;
                           if(fen==60)
                                fen=0;
                           write_sfm(7,fen);
                           write_com(0x80+0x40+7);
                           break;
                    case 3:shi++;
                           if(shi==24)
                                shi=0;
                           write_sfm(4,shi);
                           write_com(0x80+0x40+4);
                           break;
                    case 4:week++;
                           if(week==8)
                                week=1;
                           write_week(week);
                           write_com(0x80+12);
                           break;
                    case 5:day++;
                           if(day==32)
                                day=1;
                           write_nyr(9,day);
                           write_com(0x80+9);
                           break;
                    case 6:month++;
                           if(month==13)
                                month=1;
                           write_nyr(6,month);
                           write_com(0x80+6);
                           break;
                    case 7:year++;
                           if(year==100)
                                year=0;
                           write_nyr(3,year);
                           write_com(0x80+3);
                           break;
                }
            }
        }
        if(s3==0)
        {
            delay(1);
            if(s3==0)
            {
                while(!s3);di();
                switch(s1num)
                {
                    case 1:miao--;
                           if(miao==-1)
                                   miao=59;
                           write_sfm(10,miao);
                           write_com(0x80+0x40+10);
                           break;
                    case 2:fen--;
                           if(fen==-1)
                                   fen=59;
                           write_sfm(7,fen);
                           write_com(0x80+0x40+7);
                           break;
                    case 3:shi--;
                           if(shi==-1)
                                   shi=23;
                           write_sfm(4,shi);
                           write_com(0x80+0x40+4);
                           break;
                    case 4:week--;
                           if(week==0)
                                   week=7;
                           write_week(week);
                           write_com(0x80+12);
                           break;
                    case 5:day--;
                           if(day==0)
                                   day=31;
                           write_nyr(9,day);
                           write_com(0x80+12);
                           break;
                    case 7:year--;
                           if(year==-1)
                                   year=99;
                           write_nyr(3,year);
                           write_com(0x80+3);
                           break;
                }
            }
        }
    }
    if(s4==0)
    {
        delay(5);
        if(s4==0)
        {
            flag1=~flag1;
            while(!s4);di();
            if(flag1==0)
            {
                flag=0;
                write_com(0x80+0x40);
                write_date(' ');
                write_date(' ');
                   write_com(0x0c);
                write_ds(1,miao);
                write_ds(3,fen);
                write_ds(5,shi);
            }
            else
            {
                read_alarm();
                miao=amiao;
                fen=afen;
                shi=ashi;
                write_com(0x80+0x40);
                write_date('R');
                write_date('i');
                write_com(0x80+0x40+3);
                write_sfm(4,ashi);
                write_sfm(7,afen);
                write_sfm(10,amiao);
            }
        }
    }
}

void write_ds(uchar add,uchar date)
{
    dscs=0;
    dsas=1;
    dsds=1;
    dsrw=1;
    P0=add;
    dsas=0;
    dsrw=0;
    P0=date;
    dsrw=1;
    dsas=1;
    dscs=1;
}

uchar read_us(uchar add)
{
    uchar ds_date;
    dsas=1;
    dsds=1;
    dsrw=1;
    dscs=0;
    P0=add;
    dsas=0;
    dsds=0;
    P0=0xff;
    ds_date=P0;
    dsds=1;
    dsas=1;
    dscs=1;
    return ds_date;
}

void set_time()
{
    write_ds(0,0);
    write_ds(1,0);
    write_ds(2,0);
    write_ds(3,0);
    write_ds(4,0);
    write_ds(5,0);
    write_ds(6,0);
    write_ds(7,0);
    write_ds(8,0);
    write_ds(9,0);
}

void read_alarm()
{
    amiao=read_ds(1);
    afen=read_ds(3);
    ashi=read_ds(5);
}

void main()
{
    init();
    while(1)
    {
        keyscan();
        if(flag_ri==1)
        {
            di();
            //delay(100);
            di();
            //delay(500);
        }
        if(flag==0&&flag1==0)
        {
            keyscan();
            year=read_ds(9);
            month=read_ds(8);
            day=read_ds(7);
            week=read_ds(6);
            shi=read_ds(4);
            fen=read_ds(2);
            miao=read_ds(0);
            write_sfm(10,miao);
            write_sfm(7,fen);
            write_sfm(4,shi);
            write_week(week);
            write_nyr(3,year);
            write_nyr(6,month);
            write_nyr(9,day);
        }
    }
}

void exter() interrupt 2
{
    uchar c;
    flag_ri=1;
    c=read_ds(0x0c);
}

















使用特权

评论回复
板凳
xiaoliping1945| | 2015-6-8 22:18 | 只看该作者
找下你程序中,在进行刷新显示的过程中,有不有清屏的命令,总是有清屏的话,就会出现闪的现象,另外程序没个注释,不规范!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

201

帖子

1

粉丝