打印
[51单片机]

DS12c887与数码管的电子时钟

[复制链接]
1523|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1154490629|  楼主 | 2014-1-6 11:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是程序,不知带为什么用protues仿真都显示5,求教
#include<reg52.h>
#define uchar unsigned char
#define uint  unsigned int
#define M 1
sbit sp=P3^0;
sbit dscs=P2^4;
sbit dsas=P2^5;
sbit dsrw=P2^6;
sbit dsds=P2^7;
sbit duan=P2^0;
sbit wei=P2^1;
sbit k1=P3^4;
sbit k2=P3^5;
sbit k3=P3^6;
sbit k4=P3^7;
void delay(uint);
void init();
void display_sfm(uchar,uchar,uchar);
void display_nyr(uchar,uchar,uchar);
void write_ds(uchar,uchar);
void set_time();
uchar read_ds(uchar);
uchar shi,fen,miao,month,day;
uchar year,num1,num2,num3,num4,num5,num6;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
void delay(uint x)
{
        uint i,j;
        for(i=x;i>0;i--)
                for(j=110;j>0;j--);
}
void init()
{
        write_ds(0x0a,0x20);
        write_ds(0x0b,0x26);
        set_time();
}
void display_sfm(uchar sh,uchar fe,uchar mia)
{
        uchar sg,ss,fg,fs,mg,ms;
        sg=sh%10;
        ss=sh/10;
        fg=fe%10;
        fs=fe/10;
        mg=mia%10;
        ms=mia/10;

        duan=1;
        P0=table[ss];
        duan=0;
        P0=0xfe;
        wei=1;
        wei=0;
        P0=0x00;
        delay(M);

        duan=1;
        P0=table[sg];
        duan=0;
        P0=0xfd;
        wei=1;
        wei=0;
        P0=0x00;
        delay(M);

        duan=1;
        P0=table[10];
        duan=0;
        P0=0xfb;
        wei=1;
        wei=0;
        P0=0x00;
        delay(M);
       
        duan=1;
        P0=table[fs];
        duan=0;
        P0=0xf7;
        wei=1;
        wei=0;
        P0=0x00;
        delay(M);

        duan=1;
        P0=table[fg];
        duan=0;
        P0=0xef;
        wei=1;
        wei=0;
        P0=0x00;
        delay(M);

        duan=1;
        P0=table[10];
        duan=0;
        P0=0xdf;
        wei=1;
        wei=0;
        P0=0x00;
        delay(M);
               
        duan=1;
        P0=table[ms];
        duan=0;
        P0=0xbf;
        wei=1;
        wei=0;
        P0=0x00;
        delay(M);

        duan=1;
        P0=table[mg];
        duan=0;
        P0=0x7f;
        wei=1;
        wei=0;
        P0=0x00;
        delay(M);
}
void display_nyr(uchar yea,uchar mon,uchar sec)
{
        uchar sg,ss,fg,fs,mg,ms;
        sg=yea%10;
        ss=yea%100/10;
        fg=mon%10;
        fs=mon/10;
        mg=sec%10;
        ms=sec/10;

        duan=1;
        P0=table[ss];
        duan=0;
        P0=0xfe;
        wei=1;
        wei=0;
        P0=0x00;
        delay(M);

        duan=1;
        P0=table[sg];
        duan=0;
        P0=0xfd;
        wei=1;
        wei=0;
        P0=0x00;
        delay(M);

        duan=1;
        P0=table[10];
        duan=0;
        P0=0xfb;
        wei=1;
        wei=0;
        P0=0x00;
        delay(M);
       
        duan=1;
        P0=table[fs];
        duan=0;
        P0=0xf7;
        wei=1;
        wei=0;
        P0=0x00;
        delay(M);

        duan=1;
        P0=table[fg];
        duan=0;
        P0=0xef;
        wei=1;
        wei=0;
        P0=0x00;
        delay(M);

        duan=1;
        P0=table[10];
        duan=0;
        P0=0xdf;
        wei=1;
        wei=0;
        P0=0x00;
        delay(M);
               
        duan=1;
        P0=table[ms];
        duan=0;
        P0=0xbf;
        wei=1;
        wei=0;
        P0=0x00;
        delay(M);

        duan=1;
        P0=table[mg];
        duan=0;
        P0=0x7f;
        wei=1;
        wei=0;
        P0=0x00;
        delay(M);
}
void write_ds(uchar add,uchar date)
{
        dsas=1;
        dsds=1;
        dsrw=1;
        dscs=0;
        P1=add;
        dsas=0;
        dsrw=0;
        P1=date;
        dsrw=1;
        dsas=1;
        dscs=1;
}
uchar read_ds(uchar add)
{
        uchar ds_date;
        dscs=0;
        dsas=1;
        dsds=1;
        dsrw=1;
        P1=add;
        dsas=0;
        dsds=0;
        P1=0xff;
        ds_date=P1;
        dsas=1;
        dsds=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 main()
{
        init();
        while(1)
        {
                year=read_ds(9);       
                month=read_ds(8);               
                day=read_ds(7);               
                shi=read_ds(4);               
                fen=read_ds(2);               
                miao=read_ds(0);               
                display_nyr(year,month,day);
        }
}

课设1.rar

80.15 KB

这是硬件与软件

相关帖子

沙发
cjseng| | 2014-1-6 12:31 | 只看该作者
因为你读到的数据都是0XFF=255,所以显示都是5。如果你确认你的硬件、程序都没问题,建议上电时,在main()函数里,先先延时一段时间再执行初始化,然后再延时一段时间,开始正式运行。

使用特权

评论回复
板凳
1154490629|  楼主 | 2014-1-6 15:07 | 只看该作者
cjseng 发表于 2014-1-6 12:31
因为你读到的数据都是0XFF=255,所以显示都是5。如果你确认你的硬件、程序都没问题,建议上电时,在main() ...

嗯,我调了一下的确都是255,请问为什么读到的都是255,是哪里出错了,该怎么编写程序

使用特权

评论回复
地板
中国机器| | 2014-1-6 18:09 | 只看该作者
都显示5,就是单片机与时钟芯片没正常通讯造成的,或者时钟芯片没工作,或者驱动程序写的不对

使用特权

评论回复
5
airwill| | 2014-1-6 18:27 | 只看该作者
呵呵, 又是个一句注释都没有的连篇代码.
拿出来交流的代码, 最好能清晰而易懂.

使用特权

评论回复
6
ningling_21| | 2014-1-6 21:24 | 只看该作者
还不如画出流程图...

使用特权

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

本版积分规则

1

主题

2

帖子

1

粉丝