找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4368|回复: 0
打印 上一主题 下一主题
收起左侧

DS1302在数码管显示时,分,秒, 为什么显示错误,时间不走

[复制链接]
跳转到指定楼层
楼主
# include <reg52.h>
# define uchar unsigned char
# define uint unsigned int
       
sbit        P_HC595_SER   = P2^7;        //pin 14        SER                data input
sbit        P_HC595_RCLK  = P2^5;        //pin 12        RCLk        store (latch) clock
sbit        P_HC595_SRCLK = P2^6;        //pin 11        SRCLK        Shift data clock

sbit rst = P1^0;
sbit io = P1^1;
sbit sclk  = P1^2;

//uchar disp[8];

uchar code t_display[]={
//         0    1    2    3    4    5    6    7    8    9  //
        0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F, 0x40};        // 断选
uchar code wei[] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f};    //  位选


void Send_595(uchar dat);
void init();
void write_byte(uchar date);
uchar read_byte();
void write_ds1302(uchar add, uchar date);
uchar read_ds1302(uchar add);
void set_ds1302();
void display();
void write_sfm(uchar, uchar);
void delay(uint z);

uchar shi1,shi2,fen1,fen2,miao1,miao2, miao, shi, fen;
       
       
void main()
{
        init();
        set_ds1302();
        while(1)
        {
                display();
               
                //delay(5);
        }
       
}

void Send_595(uchar dat)
{       
        uint         i;
        for(i=0; i<8; i++)
        {
                if(dat & 0x80)        P_HC595_SER = 1;
                else                        P_HC595_SER = 0;
                P_HC595_SRCLK = 0;
                P_HC595_SRCLK = 1;
                dat = dat << 1;
        }
}
/***** 数码管初始化 ***/
void init()
{
        Send_595(0x00);
        Send_595(0x00);
        P_HC595_RCLK = 0;
        P_HC595_RCLK = 1;
       
        rst = 0;
      sclk = 0;
}
/***** DS1302  写一个字节*****/
void write_byte(uchar date)
{
        uchar i, temp;
        temp = date;
        for(i=0; i<8; i++)
        {
                if((temp&0x01) == 1)
                        io = 1;
                else
                        io =0;
                sclk = 0;
                sclk = 1;
                temp >>= 1;
        }
}
/***** DS1302 读一个字节******/
uchar read_byte()
{
        uchar i, temp;
        for(i=0; i<8; i++)
        {
                temp >>= 1;
                if(io == 1)
                        temp |= 0x01;
                sclk = 1;
                sclk =0;
        }
        return temp;
}
/****** 特定位置写 ****/
void write_ds1302(uchar add, uchar date)
{
        rst = 0;
        sclk = 0;
        rst =1;
       
        write_byte(add);
        write_byte(date);
       
        sclk = 1;
        rst = 0;
}
/**** 特定位置读 ***/
uchar read_ds1302(uchar add)
{
        uchar date;
        rst = 0;
        sclk =0;
        rst = 1;
       
        write_byte(add);
        date = read_byte();
       
        sclk = 1;
        rst = 0;
       
        return date;
}
/***** DS1302 初始化 **** */
void set_ds1302()
{
        write_ds1302(0x8e, 0x00);
       
        write_ds1302(0x80, 0x55);
        write_ds1302(0x82, 0x55);
        write_ds1302(0x84, 0x11);
       
        write_ds1302(0x8e, 0x80);       
}
/*****  在数码管显示 ***** /
void display()
{
        uchar d;
        write_ds1302(0x8e, 0x00);
       
        d = read_ds1302(0x81);
        miao =  d;
        write_sfm(6, miao);
       
        Send_595(wei[2]);
        Send_595(0x40);
        P_HC595_RCLK = 0;
        P_HC595_RCLK = 1;
        delay(2);
       
        d = read_ds1302(0x83);
        fen = d;
        write_sfm(3, fen);

        Send_595(wei[5]);
        Send_595(0x40);
        P_HC595_RCLK = 0;
        P_HC595_RCLK = 1;
       
        delay(2);
       
        d = read_ds1302(0x85);
        shi = d;
        write_sfm(0, shi);
       
        write_ds1302(0x8e, 0x80);
}

void delay(uint z)
{
        uint x, y;
        for(x=z; x>0; x--)
          for(y=110; y>0; y--);
}
/******* 时分秒 分离个,十位 ***/
void write_sfm(uchar add, uchar date)
{
        uchar shi, ge;
        shi = date/10;
        ge = date%10;
       
        Send_595(wei[add]);
        Send_595(t_display[shi]);
        P_HC595_RCLK = 0;
        P_HC595_RCLK = 1;
       
        delay(2);

        Send_595(wei[add+1]);
        Send_595(t_display[ge]);
        P_HC595_RCLK = 0;
        P_HC595_RCLK = 1;
       
        delay(2);
}

IMG_20171127_172347.jpg (3.28 MB, 下载次数: 87)

显示的结果

显示的结果

JW-51开发板.pdf

99.63 KB, 下载次数: 4

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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