找回密码
 立即注册

QQ登录

只需一步,快速开始

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

DS1302和液晶1602中显示时钟,为什么不走,显示是时间也是错误的

[复制链接]
跳转到指定楼层
楼主
# include <reg52.h>
# define uchar unsigned char
# define uint unsigned int


sbit lcden = P3^4;
sbit rs = P3^5;
sbit wr = P3^6;

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

uchar code dage[] = "2017-11-17   FRI";
uchar code dage1[] = "     :   :  ";


uchar miao, fen, shi, i;
/*  ***  函数声明 ****/
void display();
void write_sfm(uchar, uchar);
void Send_595(uchar);
void delay(uint);
void write_com(uchar);
void write_date(uchar);
void write_byte(uchar);
void init_lcd();
void set_ds1302();
uchar read_ds1302(uchar);
uchar read_byte();


void main()
{
        init_lcd();
        set_ds1302();
        while(1)
        {
                display();
        }
}

void delay(uint z)
{
        uint x, y;
        for(x=z; x>0; x--)
           for(y=110; y>0; y--);
}
/****** 往1602液晶 写入指令 ****/

void write_com(uchar com)
{
        rs = 0;
        P0 = com;
        delay(5);
        lcden = 1;
        delay(5);
        lcden = 0;
}
/*****  1602液晶 初始化  ******/
void init_lcd()
{
        /*Send_595(0xff);
        Send_595(0x00);
        P_HC595_RCLK = 0;
        P_HC595_RCLK = 1;*/
       
        wr = 0;
        lcden = 0;
       
        write_com(0x38);
        write_com(0x0c);
        write_com(0x06);
        write_com(0x01);
       
        for(i=0; i<16; i++)
        {
        write_date(dage[i]);
        delay(5);
        }

        write_com(0x80+0x40);
       
        for(i=0; i<13; i++)
        {
                write_date(dage1[i]);
                delay(5);
        }
}
/*  *****往1602液晶写入数据 ****** */
void write_date(uchar date)
{
        rs = 1;
        P0 = date;
        delay(5);
        lcden = 1;
        delay(5);
        lcden = 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 = 1;
                sclk = 0;
                temp >>= 1;
        }
}
/*****′ ***/
uchar read_byte()
{
        uchar i, temp;
        for(i=0; i<8; i++)
        {
                temp>>=1;
                if(io == 1)
                        temp|=0x80;
                 sclk = 1;
                 sclk = 0;       
        }
        return temp;
}
       
/***** Ö¸¶¨Î»ÖÃD′ ****/
void write_ds1302(uchar addr, uchar date)
{
        rst = 0;
        sclk = 0;
        rst = 1;
       
        write_byte(addr);
        write_byte(date);
       
        sclk = 1;
        rst = 0;
}
/****** Ö¸¶¨Î»Ööá ***/
uchar read_ds1302(uchar addr)
{
        uchar date;
        rst = 0;
        sclk = 0;
        rst = 1;
        write_byte(addr);
        date = read_byte();
        sclk = 1;
        rst = 0;
       
  return date;
}
/******  3õê¼»ˉDS1302  *****/
void set_ds1302()
{
        write_ds1302(0x8e, 0x00);
       
        write_ds1302(0x80, 0x00);
        write_ds1302(0x82, 0x00);
        write_ds1302(0x84, 0x00);
       
        write_ds1302(0x8e, 0x80);       
}
/****** ê±£¬·Ö£¬Ãë £¬·Öàë¸ö£¬ ê®Î»  ****/
void write_sfm(uchar addr, uchar date)
{
        uchar shi, ge;
        shi = date/10;
        ge = date%10;
        write_com(0x80+0x40+addr);
        write_date(0x30+shi);
        write_date(0x30+ge);
}

/****** íù1602ÖDÏÔê¾êy¾Y ****/
void display()
{
        uchar d;
        write_ds1302(0x8e, 0x00);
       
        d = read_ds1302(0x81);
        miao = (d/16)*10 + d%16;
  write_sfm(11, miao);       
       
        d = read_ds1302(0x83);
        miao = (d/16)*10 + d%16;
  write_sfm(7, fen);       
       
        d = read_ds1302(0x85);
        miao = (d/16)*10 + d%16;
  write_sfm(3, shi);       
       
        write_ds1302(0x8e, 0x80);
}


IMG_20171121_170928.jpg (3.78 MB, 下载次数: 40)

IMG_20171121_170928.jpg

JW-51开发板.pdf

99.63 KB, 下载次数: 3

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

使用道具 举报

沙发
ID:251992 发表于 2017-11-21 18:26 | 只看该作者
最好把DS1302的各个寄存器的功能贴出来就好了,
回复

使用道具 举报

板凳
ID:231984 发表于 2017-11-22 20:57 | 只看该作者
计时的功能都没有,怎么让时间加?
回复

使用道具 举报

地板
ID:111634 发表于 2017-11-22 21:22 | 只看该作者
好像给你介绍过一个正确有效案例,仔细去研读啊!
回复

使用道具 举报

5#
ID:244748 发表于 2017-11-26 15:23 | 只看该作者
gaohan130 发表于 2017-11-22 20:57
计时的功能都没有,怎么让时间加?

DS1302有自动计时的功能,不用计时器
回复

使用道具 举报

6#
ID:254058 发表于 2017-11-27 10:53 | 只看该作者
建议去共享区下载一个现成的,吃透的再改,看完看懂这个程序时间足够吃透一个正确的程序了,
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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