搜索
bottom↓
回复: 1

仿真ds12c887出现的怪现象,求各位高手指点迷津

[复制链接]

出0入0汤圆

发表于 2012-6-20 10:12:02 | 显示全部楼层 |阅读模式
我用proteus仿真了 ds12c887时钟芯片,51单片机控制,proteus使用7.7sp2破解版,出现了很奇怪的现象,如图所示;
每次仿真开始后,分显示80多分,当秒走到60后,分秒变0就正常了,再有每天上午仿真时小时没问题,但下午仿真时
小时和887内部时间差两个小时。请各位高手指点
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit duan=P1^0;
sbit wei=P1^1;
sbit sz_as=P1^2;
sbit sz_rw=P1^3;
sbit sz_ds=P1^4;
sbit sz_cs=P1^5;
sbit s1=P3^5;
sbit s2=P3^6;
sbit s3=P3^7;
uchar s1num,flag;
char shi,fen,miao;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};

void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}

void display(uchar shi,uchar fen,uchar miao)
{
        uchar shi1,shi2,fen1,fen2,miao1,miao2;
        shi1=shi/10;
        shi2=shi%10;
        fen1=fen/10;
        fen2=fen%10;
        miao1=miao/10;
        miao2=miao%10;

        P0=0xfe;
        wei=1;
        wei=0;
        P0=table[shi1];
        duan=1;
        duan=0;
        delay(5);

        P0=0xfd;
        wei=1;
        wei=0;
        P0=table[shi2];
        duan=1;
        duan=0;
        delay(5);

        P0=0xfb;
        wei=1;
        wei=0;
        P0=0x40;
        duan=1;
        duan=0;
        delay(5);

        P0=0xf7;
        wei=1;
        wei=0;
        P0=table[fen1];
        duan=1;
        duan=0;
        delay(5);

        P0=0xef;
        wei=1;
        wei=0;
        P0=table[fen2];
        duan=1;
        duan=0;
        delay(5);

        P0=0xdf;
        wei=1;
        wei=0;
        P0=0x40;
        duan=1;
        duan=0;
        delay(5);

        P0=0xbf;
        wei=1;
        wei=0;
        P0=table[miao1];
        duan=1;
        duan=0;
        delay(5);
       
        P0=0x7f;
        wei=1;
        wei=0;
        P0=table[miao2];
        duan=1;
        duan=0;
        delay(5);
}

void write_sz(uchar add,uchar date)
{
        sz_cs=0;
        sz_as=1;
        sz_ds=1;
        sz_rw=1;
        P2=add;
        sz_as=0;
        sz_rw=0;
        P2=date;
        sz_rw=1;
        sz_as=1;
        sz_cs=1;
}

uchar read_sz(uchar add)
{
        uchar sz_date;
        sz_as=1;
        sz_ds=1;
        sz_rw=1;
        sz_cs=0;
        P2=add;
        sz_as=0;
        sz_ds=0;
        P2=0xff;
        sz_date=P2;
        sz_ds=1;
        sz_as=1;
        sz_cs=1;
        return sz_date;       
}

void init()
{
        write_sz(0x0A,0x20);
        write_sz(0x0B,0x06);
}

void keyscan()
{
        if(s1==0)       
        {
                delay(5);
                if(s1==0)
                {       
                        s1num++;
                        flag=1;
                        while(!s1);
                        if(s1num==1)
                        {
                                wei=1;
                                P0=0xfc;
                                wei=0;
                                delay(300);
                                wei=1;
                                P0=0xff;
                                wei=0;
                                delay(300);
                        }
                        if(s1num==2)
                        {
                                wei=1;
                                P0=0xe7;
                                wei=0;
                                delay(300);
                                wei=1;
                                P0=0xff;
                                wei=0;
                                delay(300);
                        }
                        if(s1num==3)
                        {
                                wei=1;
                                P0=0x3f;
                                wei=0;
                                delay(300);
                                wei=1;
                                P0=0xff;
                                wei=0;
                                delay(300);
                        }
                        if(s1num==4)
                        {
                                s1num=0;
                                flag=0;
                        }       
                }
        }
                if(s1num!=0)
                {
                        if(s2==0)
                        {
                                delay(1);
                                if(s2==0)
                                {
                                        while(!s2);
                                        if(s1num==1)
                                        {
                                                shi++;
                                                if(shi==24)
                                                        shi=0;
                                                write_sz(4,shi);
                                        }
                                        if(s1num==2)
                                        {
                                                fen++;
                                                if(fen==60)
                                                        fen=0;
                                                write_sz(2,fen);
                                        }
                                        if(s1num==3)
                                        {
                                                miao++;
                                                if(miao==60)
                                                        miao=0;
                                                write_sz(0,miao);
                                        }
                                }
                        }
                        if(s3==0)
                        {
                                delay(1);
                                if(s3==0)
                                {
                                        while(!s3);
                                        if(s1num==1)
                                        {
                                                shi--;
                                                if(shi==-1)
                                                        shi=23;
                                                write_sz(4,shi);
                                        }
                                        if(s1num==2)
                                        {
                                                fen--;
                                                if(fen==-1)
                                                        fen=59;
                                                write_sz(2,fen);
                                        }
                                        if(s1num==3)
                                        {
                                                miao--;
                                                if(miao==-1)
                                                        miao=59;
                                                write_sz(0,miao);
                                        }
                                }
                        }
                }
}
void main()
{
        init();
        while(1)
        {
                keyscan();
                if(flag==0)
                {
                        keyscan();
                        shi=read_sz(4);
                        fen=read_sz(2);
                        miao=read_sz(0);
                        display(shi,fen,miao);
                }
                else
                {
                        display(shi,fen,miao);
                }
        }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2012-6-20 10:21:14 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-29 14:46

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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