哪位大侠帮我看看我这仿真为什么会这样,感激不尽了,小时的位置乱码了,不知道哪里出问题了

2019-07-18 11:46发布

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
9条回答
楚项羽金飞
2019-07-18 12:37
这是程序部分
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit lcdrs=P2^4;
sbit lcden=P2^6;
sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^2;
sbit dscs=P1^4;
sbit dsas=P1^5;
sbit dsrw=P1^6;
sbit dsds=P1^7;
sbit dsirq=P3^3;
sbit beep=P2^3;
uchar count,key1_num,flag,flag1;
char shi,fen,miao;
uchar read_ds(uchar);
void set_time();
void write_ds(uchar,uchar);
void set_alarm(uchar a_shi,uchar a_fen,uchar a_miao);
uchar code table[]="  2015-10-14 Wed";
uchar code table1[]="      :  :  ";//第十二步
void delay(uint z)
{
    uint x,y;
    for(x=z;x>0;x--)
        for(y=110;y>0;y--);
}
void write_com(uchar com)
{
    lcdrs=0;
    lcden=0;
    P0=com;
    delay(5);
    lcden=1;
    delay(5);
    lcden=0;
}
void write_data(uchar date)
{
    lcdrs=1;
    lcden=0;
    P0=date;
    delay(5);
    lcden=1;
    delay(5);
    lcden=0;
}
void init()
{
    uchar num;
    EA=1;//第十七步
    EX0=1;
    IT0=1;
    flag1=0;
    lcdrs=1;
    lcden=0;
//    set_time();//第六步
    set_alarm(10,32,55);//第十五步
    write_ds(0x0A,0x20);//打开振荡器
    write_ds(0x0B,0x26);//启动闹钟,第十三步
    read_ds(0x0c);//第十八步
    write_com(0x38);
    write_com(0x0c);
    write_com(0x06);
    write_com(0x01);
    write_com(0x80);
    for(num=0;num<16;num++)
        {
            write_data(table[num]);
            delay(5);
        }
    write_com(0xc0);
    for(num=0;num<12;num++)
        {
            write_data(table1[num]);
            delay(5);
        }
   
}
void write_time(uchar add,uchar date)
{
    uchar shi,ge;
    shi=date/10;
    ge=date%10;
    write_com(0xc0+add);
    write_data(0x30+shi);
    write_data(0x30+ge);
   
}
void keyscan()
{
    if(flag1==1)//二十三
        {
                if(key2==0)//关闭闹钟,二十三步
                    {
                        delay(10);   
                        if(key2==0)
                            {
                                while(!key2);
                                flag1=0;
                            }
                    }
                if(key3==0)//关闭闹钟,二十三步
                    {
                        delay(10);
                        if(key3==0)
                            {
                                while(!key3);
                                flag1=0;
                            }
                    }
        }
    if(key1==0)
        {
            delay(10);
            if(key1==0)
                {
                    key1_num++;
                    flag=1;//第九步
                    flag1=0;//关闭闹钟,二十二步
                    while(!key1);
                    TR0=0;
                    write_com(0x0f);
                    if(key1_num==1)
                        write_com(0xc0+10);
                    if(key1_num==2)
                        write_com(0xc0+7);
                    if(key1_num==3)
                        write_com(0xc0+4);
                    if(key1_num==4)
                        {
                            key1_num=0;
                            write_com(0x0c);
                            flag=0;//第十步
                            write_ds(0,miao);//按下确认键,重新继续显示时钟,第十一步
                            write_ds(2,fen);
                            write_ds(4,shi);
                        }
                }
        }
    if(key1_num!=0)
        {
            if(key2==0)
                {
                    delay(10);
                    if(key2==0)
                        {
                            while(!key2);
                            if(key1_num==1)
                                {
                                    miao++;
                                    if(miao==60)
                                        miao=0;   
                                    write_time(10,miao);
                                    write_com(0xc0+10);
                                }
                                if(key1_num==2)
                                    {
                                        fen++;
                                        if(fen==60)
                                            fen=0;
                                        write_time(7,fen);
                                        write_com(0xc0+7);   
                                    }
                                    if(key1_num==3)
                                    {
                                        shi++;
                                        if(shi==24)
                                            shi=0;   
                                        write_time(4,shi);
                                        write_com(0xc0+4);
                                    }
                        }
                }
            if(key3==0)
                {
                    delay(10);
                    if(key3==0)
                        {
                            while(!key3);
                            if(key1_num==1)
                                {
                                    miao--;
                                    if(miao==-1)
                                        miao=59;
                                    write_time(10,miao);
                                    write_com(0xc0+10);
                                }
                            if(key1_num==2)
                                {
                                    fen--;
                                    if(fen==-1)
                                        fen=59;
                                    write_time(7,fen);
                                    write_com(0xc0+7);
                                }
                            if(key1_num==3)
                                {
                                    shi--;
                                    if(shi==-1)
                                        shi=23;
                                    write_time(4,shi);
                                    write_com(0xc0+4);
                                }
                        }
                }
        }
}
void write_ds(uchar add,uchar date)//向ds12c887写数据,第一步
{

    dsas=1;
    dsds=1;
    dsrw=1;
    dscs=0;//选通片选
    P0=add;//地址写进来
    dsas=0;//地址信息锁存至ds12c887
    dsrw=0;
    P0=date;//数据写到ds12c887
    dsrw=1;
    dsas=1;
    dscs=1;
}
uchar read_ds(uchar add)//读ds12c887中数据,第二步
{
    uchar ds_data;

    dsas=1;
    dsds=1;
    dsrw=1;
    dscs=0;
    P0=add;//建立地址
    dsas=0;//地址联通
    dsds=0;
    P0=0xff;//读数据前将I/O拉高
    ds_data=P0;//读走数据
    dsds=1;
    dsas=1;
    dscs=1;   
    return ds_data;
}
/*void set_time()//设置时间,第五步
{
    write_ds(4,10);
    write_ds(2,32);
    write_ds(0,30);
}*/
void set_alarm(uchar a_shi,uchar a_fen,uchar a_miao)//设置闹钟,第十四步
{
    write_ds(1,a_miao);
    write_ds(3,a_fen);
    write_ds(5,a_shi);
}
void didi()//第二十一步
{
    beep=0;
    delay(50);
    beep=1;
    delay(50);
    beep=0;
    delay(50);
    beep=1;
}
void main()
{
   
    init();
    while(1)
    {
        keyscan();//第七步
        if(flag1==1)//第二十步
            didi();
        if(flag==0)//第八步
        {
            miao=read_ds(0);//读秒,第三步
            fen=read_ds(2);
            shi=read_ds(4);
            write_time(10,miao);//把秒显示在液晶中,第四步
            write_time(7,fen);
            write_time(4,shi);
        }
    }
   
}
void exter() interrupt 2//第十六步
{
    uchar c;
    flag1=1;//第十九步
      c=read_ds(0x0c);
}

一周热门 更多>