基于DS1302与LCD1602的电子日历时钟的设计与实现


    XX学高职学院


    毕业设计(文)


    2014— 2015学年第 1 学期







    题目: 基DS1302LCD1602电子日历时 钟设计实现



    学生姓名
    学 号
    指导教师
    评阅教师
    时 间 2014年X月



    武汉纺织学高职学院毕业设计(文)开题报告
    课题名称(源类型):
    基 DS1302 1602LCD 电子日历时钟设计实现
    指导教师: 王骏 学生姓名: 曹强
    开题报告容:(调研资料准备设计文目求思路预期成果务完成阶段容时间安排完成设计(文)具备条件素等)
    1. 目:实现日历时钟显示够调整
    2. 求:完成电子日历时钟软件硬件设计包括单片机相关容日历时钟模块设计液晶显示模块设计控制程序编写等
    3. 预期成果:仿真成功做出实物
    (1) 显示初始值 日历时钟初始值
    4. 时间安排:第3周:熟悉课题基求查阅相关资料初步拟定设计
    整体方案完成开题报告
    第45周:学次课题涉相关容包括器件基础知识单片机DS1302时钟芯片工作原理相关软件LCD1602液晶显示屏相关容设计简单实际电路熟练学容加巩固
    第68周:设计DS1302时钟模块控制电路LCD1602液晶显示电路电源电路等硬件电路Proteus仿真
    第810周:焊接调试电路根部分作硬件进行调试联机调试
    第1012周:写毕业设计文作品展示完成全部毕业设计








    指导教师签名: 日期: 2014年















    目 录
    摘 1
    关键词 1
    Abstract 2
    Key Words 2
    第章 设计求方案证 3
    11 设计求: 3
    12 系统基方案选择证 3
    121 单片机芯片选择方案证 3
    122 显示模块选择方案证 3
    123 时钟芯片选择方案证 3
    13 电路设计终方案决定 4
    第二章 系统硬件设计实现 4
    21 电路设计框图 4
    22 系统硬件概述 4
    23 单元电路设计 5
    231 单片机控制模块设计 5
    232 时钟电路DS1302 5
    233 显示模块设计 8
    第三章 系统软件设计 10
    31 程序流程图 10
    32 DS1302子程序12
    33 LCD1602液晶子程序子程序 15
    34位定义18
    第四章 指标测试 19
    41 测试仪器 19
    42 硬件测试 19
    43 软件测试 19
    44 测试结果分析结 20
    441 测试结果分析 20
    442 测试结 20
    作品总结 20
    致谢词 20
    参考文献 21
    附录 系统电路图 21
    附录二 Proteus仿真图 22
    附录三 系统程序 22
    附录四 元器件清单实物图 30
    附录五 PCB图············································33






    着现代科技快速发展时间断流逝观太阳摆钟现电子时钟类非智慧断研究创造出新纪录美国Dallas公司推出种具涓细电流充电力低功耗实时时钟时钟芯片DS1302年月日星期时分秒进行计时具闰年补偿等种功DS1302寿命长误差调电子日历采直观数字显示时显示年月日星期时分秒信息具时间校准等功该电路采STC89C52单片机作核心功耗3V低压工作电压选35V电压供电LCD1602液晶显示较直观
    综述调电子日历具读取方便显示直观功样电路简洁成低廉等诸优点符合电子仪器仪表发展趋势具广阔市场前景




    关键词
    时钟电路DS1302LCD1602单片机STC89C52

















    Abstract
    With the rapid development of modern science and technology the passage of time from the view of the sun the pendulum clocks are now electronic clock human with extraordinary wisdom continuously research create a new record The Dallas company launched a has Juan fine current charge ability of the real time clock low power consumption DS1302 chip It can be to year month day week when minutes and seconds for the time also has a leap year compensation and other functions and the DS1302 long service life and small error For adjustable electronic calendar by using object digital display can also shows that year month day week when minutes and seconds information but also has time calibration etc Function This circuit STC89C52 single chip microcomputer as the core its power consumption is small can be in 3 V of lowpressure work voltage can choose 3 ~ 5 V voltage power supply With LCD1602 liquid crystal display more intuitive
    To sum up the adjustable electronic calendar has read the convenient direct display functional diversity simple circuit low cost and many other advantages conform to the trend of the development of electronic instruments and has a broad market prospect



    Key Words
    The clock DianZhong DS1302 LCD1602 STC89C52 single chip microcomputer









    第章 设计求方案证
    11 设计求:
    ① 具年月日星期时分秒等功
    12 系统基方案选择证
    121 单片机芯片选择方案证
    方案
    采STC89C52芯片作硬件核心采Flash ROM部具4KB ROM 存储空间3V超低压工作MCS51系列单片机完全兼容运电路设计中时具备ISP线编程技术 电路进行调试时程序错误修改程序新增功需烧入程序时芯片次拔插会芯片造成定损坏
    方案二
    采STC89C52芯片ROM全采Flash ROM3V超底压工作时MCS51系列单片机完全该芯片部存储器8KB ROM 存储空间样具STC89C52功具线编程擦技术载程序够加密较安全电路进行调试时程序错误修改程序新增功需烧入程序时需芯片次拔插会芯片造成损坏选择采STC89C52作控制系统
    122 显示模块选择方案证
    方案:
    采点阵式数码显示点阵式数码八行八列发光二极组成显示文字较适合采显示数字显太浪费价格相较高种作显示
    方案二:
    采LED数码动态扫描然LED数码价格适中显示数字需数偏功耗较种作显示
    方案三:
    采LCD液晶显示屏液晶显示屏显示功强显示量文字图形显示样清晰见普通数码相功耗较硬件连接简单显示部分采1602液晶显示
    123 时钟芯片选择方案证
    方案:
    直接采单片机定时计数器提供秒信号程序实现年月日星期时分秒计数采种方案然减少芯片节约成实现时间误差较采方案
    方案二:
    采DS1302时钟芯片实现时钟DS1302芯片种高性时钟芯片动秒分时周月年级闰年补偿年进行计数精度高
    RAM作数暂存区工作电压25V~55V范围25V时耗电300nA
    13 电路设计终方案决定
    综方案述次作品方案选定:采STC89C52作控制系统DS1302提供时钟LCD1602液晶作显示
    第二章 系统硬件设计实现
    21 电路设计框图

    图1电路设计框图
    22 系统硬件概述
    电路STC89C52单片机控制核心具线编程功低功耗3V超低压工作时钟电路DS1302提供种高性低功耗带RAM实时时钟电路年月日周日时分秒进行计时具闰年补偿功工作电压25V~55V采三线接口CPU进行步通信采突发方式次传送字节时钟信号RAM数DS1302部31*8时性存放数RAM寄存器产生年月日周日时分秒具寿命长精度高低功耗等特点时具掉电动保存功电路采DS1302单字节传送方式实现控机间数传送显示部分1602构成
    23 单元电路设计
    231 单片机控制模块设计
    STC89C52单片机40引脚双列直插芯片四IO口P0P1P2P3 MCS51单片机48位IO口(P0P1P2P3)条IO线独立作输出输入
    单片机系统图示18引脚19引脚接时钟电路XTAL1接外部晶振微调电容端片振荡器倒相放器输入XTAL2接外部晶振微调电容端片振荡器倒相放器输出第9引脚复位输入端接电容电阻开关够电复位电路 图2



    图2控制系统
    232 时钟电路DS1302
    1DS1302性特性
    DS1302种高性低功耗实时时钟芯片附加31字节静态RAM采SPI三线接口CPU进行通信采突发方式次传送字节时钟信号RAM数实时时钟提供秒分时日星期月年月31天时动调整具闰年补偿功工作电压宽达25~55V采双电源供电(电源备电源)设置备电源充电方式提供备电源进行涓细电流充电力

    图3示出DS1302引脚排列图中Vcc1备电源Vcc2电源电源关闭情况保持时钟连续运行DS1302Vcc1Vcc2两者中较者供电Vcc2Vcc1+02V时Vcc2DS1302供电Vcc2Vcc1时DS1302Vcc1供电X1X2振荡源外接32768KHz晶振RST复位片选线通RST输入驱动置高电启动数传送RST输入两种功:首先RST接通控制逻辑允许址命令序列送入移位寄存器次RST提供终止单字节字节数传送手段RST高电时数传送初始化允许DS1302进行操作果传送程中RST置低电会终止次数传送IO引脚变高阻态电动行时Vcc等25V前RST必须保持低电中SCLK 低电时RST置高电IO串行数输入端(双)SCLK始终输入端
    DS1302_SCLK 接P3^6 实时时钟时钟线引脚
    DS1302_IO 接P3^4 实时时钟数线引脚
    DS1302_RST 接P3^5 实时时钟复位线引脚

    图3 DS1302引脚图

    2DS1302数操作原理


    图4 DS1302数时序图

    DS1302通SPI串行总线单片机通信进行次读写操作时少读写两字节第字节控制字节命令告诉DS1302读写操作RAMCLOK寄存器操作第二字节读写数
    单字节读:SCLK低电时CE置高电进行操作前先SCLK置低电然CE置高电接着开始IO面放入传送电信号然跳变SCLK数SCLK升时DS1302读取数SCLK降时DS1302放置数IO
    3DS1302时钟寄存器

    图 5 时钟寄存器图
    时钟日历包含7寄存器中数时钟日历寄存器中二进制编码十进制格式存储常说BCD码存储时钟寄存器第8字节写保护寄存器WP1时候开启写保护时候禁止DS1302进行写操作WP0时候关闭写保护时候DS1302进行写操作

    4 关BCD码
    BCD码通4位二进制码表示1位十进制中0~910数码
    二进制码转换BCD码方式:4位二进制码1001时加6
    :BCD码00001100二进制码:00001100+600010010

    图6 DS1302 BCD代码
    233 显示模块设计
    1 1602介绍
    字符型液晶显示模块种专门显示字母数字符号等点阵式LCD目前常16*116*220*240*2行等模块面长沙太阳电子限公司1602字符型液晶显示器例介绍法般1602字符型液晶显示器实物图 4:


    图7 1602字符型液晶显示器实物图

    2 1602LCD基参数引脚功
    1602LCD分背光带背光两种基控制部分HD44780带背光带背光厚否带背光应中差引脚功说明
    1602LCD采标准14脚(背光)16脚(带背光)接口引脚接口说明表1示:
    编号
    符号
    引脚说明
    编号
    符号
    引脚说明
    1
    VSS
    电源
    9
    D2

    2
    VDD
    电源正极
    10
    D3

    3
    VL
    液晶显示偏压
    11
    D4

    4
    RS
    数命令选择
    12
    D5

    5
    RW
    读写选择
    13
    D6

    6
    E
    信号
    14
    D7

    7
    D0

    15
    BLA
    背光源正极
    8
    D1

    16
    BLK
    背光源负极
    表1:引脚接口说明表
    第1脚:VSS电源
    第2脚:VDD接5V正电源
    第3脚:VL液晶显示器度调整端接正电源时度弱接时度高度高时会产生鬼影时通10K电位器调整度
    第4脚:RS寄存器选择高电时选择数寄存器低电时选择指令寄器
    第5脚:RW读写信号线高电时进行读操作低电时进行写操作RSRW低电时写入指令者显示址RS低电RW高电时读忙信号RS高电RW低电时写入数
    第6脚:E端端E端高电跳变成低电时液晶模块执行命令
    第7~14脚:D0~D78位双数线
    第15脚:背光源正极
    第16脚:背光源负极
    1602LCD般初始化(复位)程
    延时15mS
    写指令38H(检测忙信号)
    延时5mS
    写指令38H(检测忙信号)
    延时5mS
    写指令38H(检测忙信号)
    次写指令读写数操作均需检测忙信号
    写指令38H:显示模式设置
    写指令08H:显示关闭
    写指令01H:显示清屏
    写指令06H:显示光标移动设置
    写指令0CH:显示开光标设置
    3 LCD1602液晶显示 图8示:

    图8 LCD液晶显示

    第三章 系统软件设计
    31 程序流程图


    图A 程序流程图






    程序:
    void LcdDisplay()

    *******************************************************************************
    * 函数名 main
    * 函数功 函数
    * 输入
    * 输出
    *******************************************************************************

    void main()
    {
    LcdInit()
    Ds1302Init()
    while(1)
    {
    Ds1302ReadTime()
    LcdDisplay()
    }

    }
    *******************************************************************************
    * 函数名 LcdDisplay()
    * 函数功 显示函数
    * 输入
    * 输出
    *******************************************************************************

    void LcdDisplay()
    {
    LcdWriteCom(0x80+0X40)
    LcdWriteData('0'+TIME[2]16) 时
    LcdWriteData('0'+(TIME[2]&0x0f))
    LcdWriteData('')
    LcdWriteData('0'+TIME[1]16) 分
    LcdWriteData('0'+(TIME[1]&0x0f))
    LcdWriteData('')
    LcdWriteData('0'+TIME[0]16) 秒
    LcdWriteData('0'+(TIME[0]&0x0f))

    LcdWriteCom(0x80)
    LcdWriteData('2')
    LcdWriteData('0')
    LcdWriteData('0'+TIME[6]16) 年
    LcdWriteData('0'+(TIME[6]&0x0f))
    LcdWriteData('')
    LcdWriteData('0'+TIME[4]16) 月
    LcdWriteData('0'+(TIME[4]&0x0f))
    LcdWriteData('')
    LcdWriteData('0'+TIME[3]16) 日
    LcdWriteData('0'+(TIME[3]&0x0f))
    LcdWriteCom(0x8D)
    LcdWriteData('0'+(TIME[5]&0x07)) 星期

    32 DS1302子程序
    #includeds1302h

    DS1302写入读取时分秒址命令
    秒分时日月周年 低位读写位
    uchar code READ_RTC_ADDR[7] {0x81 0x83 0x85 0x87 0x89 0x8b 0x8d}
    uchar code WRITE_RTC_ADDR[7] {0x80 0x82 0x84 0x86 0x88 0x8a 0x8c}

    DS1302时钟初始化2013年1月1日星期二12点00分00秒
    存储序秒分时日月周年存储格式BCD码
    uchar TIME[7] {0x00 0x24 0x12 0x01 0x01 0x02 0x13}

    *******************************************************************************
    * 函 数 名 Ds1302Write
    * 函数功 DS1302命令(址+数)
    * 输 入 addrdat
    * 输 出
    *******************************************************************************

    void Ds1302Write(uchar addr uchar dat)
    {
    uchar n
    RST 0
    _nop_()

    SCLK 0先SCLK置低电
    _nop_()
    RST 1 然RST(CE)置高电
    _nop_()

    for (n0 n<8 n++)开始传送八位址命令
    {
    DSIO addr & 0x01数低位开始传送
    addr >> 1
    SCLK 1数升时DS1302读取数
    _nop_()
    SCLK 0
    _nop_()
    }
    for (n0 n<8 n++)写入8位数
    {
    DSIO dat & 0x01
    dat >> 1
    SCLK 1数升时DS1302读取数
    _nop_()
    SCLK 0
    _nop_()
    }

    RST 0传送数结束
    _nop_()
    }

    *******************************************************************************
    * 函 数 名 Ds1302Read
    * 函数功 读取址数
    * 输 入 addr
    * 输 出 dat
    *******************************************************************************

    uchar Ds1302Read(uchar addr)
    {
    uchar ndatdat1
    RST 0
    _nop_()

    SCLK 0先SCLK置低电
    _nop_()
    RST 1然RST(CE)置高电
    _nop_()

    for(n0 n<8 n++)开始传送八位址命令
    {
    DSIO addr & 0x01数低位开始传送
    addr >> 1
    SCLK 1数升时DS1302读取数
    _nop_()
    SCLK 0DS1302降时放置数
    _nop_()
    }
    _nop_()
    for(n0 n<8 n++)读取8位数
    {
    dat1 DSIO低位开始接收
    dat (dat>>1) | (dat1<<7)
    SCLK 1
    _nop_()
    SCLK 0DS1302降时放置数
    _nop_()
    }

    RST 0
    _nop_() DS1302复位稳定时间必须
    SCLK 1
    _nop_()
    DSIO 0
    _nop_()
    DSIO 1
    _nop_()
    return dat
    }

    *******************************************************************************
    * 函 数 名 Ds1302Init
    * 函数功 初始化DS1302
    * 输 入
    * 输 出
    *******************************************************************************

    void Ds1302Init()
    {
    uchar n
    Ds1302Write(0x8E0X00) 禁止写保护关闭写保护功
    for (n0 n<7 n++)写入7字节时钟信号:分秒时日月周年
    {
    Ds1302Write(WRITE_RTC_ADDR[n]TIME[n])
    }
    Ds1302Write(0x8E0x80) 开写保护功
    }

    *******************************************************************************
    * 函 数 名 Ds1302ReadTime
    * 函数功 读取时钟信息
    * 输 入
    * 输 出
    *******************************************************************************

    void Ds1302ReadTime()
    {
    uchar n
    for (n0 n<7 n++)读取7字节时钟信号:分秒时日月周年
    {
    TIME[n] Ds1302Read(READ_RTC_ADDR[n])
    }

    }



    33 LCD1602液晶子程序
    #includelcdh

    *******************************************************************************
    * 函 数 名 Lcd1602_Delay1ms
    * 函数功 延时函数延时1ms
    * 输 入 c
    * 输 出
    * 说 名 该函数12MHZ晶振12分频单片机延时
    *******************************************************************************

    void Lcd1602_Delay1ms(uint c) 误差 0us
    {
    uchar ab
    for ( c>0 c)
    {
    for (b199b>0b)
    {
    for(a1a>0a)
    }
    }

    }

    *******************************************************************************
    * 函 数 名 LcdWriteCom
    * 函数功 LCD写入字节命令
    * 输 入 com
    * 输 出
    *******************************************************************************
    #ifndef LCD1602_4PINS 没定义LCD1602_4PINS时
    void LcdWriteCom(uchar com) 写入命令
    {
    LCD1602_E 0
    LCD1602_RS 0 选择发送命令
    LCD1602_RW 0 选择写入

    LCD1602_DATAPINS com 放入命令
    Lcd1602_Delay1ms(1) 等数稳定

    LCD1602_E 1 写入时序
    Lcd1602_Delay1ms(5) 保持时间
    LCD1602_E 0
    }
    #else
    void LcdWriteCom(uchar com) 写入命令
    {
    LCD1602_E 0 清零
    LCD1602_RS 0 选择写入命令
    LCD1602_RW 0 选择写入

    LCD1602_DATAPINS com 4位接线接P0口高四位传送高四位改
    Lcd1602_Delay1ms(1)

    LCD1602_E 1 写入时序
    Lcd1602_Delay1ms(5)
    LCD1602_E 0

    Lcd1602_Delay1ms(1)
    LCD1602_DATAPINS com << 4 发送低四位
    Lcd1602_Delay1ms(1)

    LCD1602_E 1 写入时序
    Lcd1602_Delay1ms(5)
    LCD1602_E 0
    }
    #endif
    *******************************************************************************
    * 函 数 名 LcdWriteData
    * 函数功 LCD写入字节数
    * 输 入 dat
    * 输 出
    *******************************************************************************
    #ifndef LCD1602_4PINS
    void LcdWriteData(uchar dat) 写入数
    {
    LCD1602_E 0 清零
    LCD1602_RS 1 选择输入数
    LCD1602_RW 0 选择写入

    LCD1602_DATAPINS dat 写入数
    Lcd1602_Delay1ms(1)

    LCD1602_E 1 写入时序
    Lcd1602_Delay1ms(5) 保持时间
    LCD1602_E 0
    }
    #else
    void LcdWriteData(uchar dat) 写入数
    {
    LCD1602_E 0 清零
    LCD1602_RS 1 选择写入数
    LCD1602_RW 0 选择写入

    LCD1602_DATAPINS dat 4位接线接P0口高四位传送高四位改
    Lcd1602_Delay1ms(1)

    LCD1602_E 1 写入时序
    Lcd1602_Delay1ms(5)
    LCD1602_E 0

    LCD1602_DATAPINS dat << 4 写入低四位
    Lcd1602_Delay1ms(1)

    LCD1602_E 1 写入时序
    Lcd1602_Delay1ms(5)
    LCD1602_E 0
    }
    #endif
    *******************************************************************************
    * 函 数 名 LcdInit()
    * 函数功 初始化LCD屏
    * 输 入
    * 输 出
    *******************************************************************************
    #ifndef LCD1602_4PINS
    void LcdInit() LCD初始化子程序
    {
    LcdWriteCom(0x38) 开显示
    LcdWriteCom(0x0c) 开显示显示光标
    LcdWriteCom(0x06) 写指针加1
    LcdWriteCom(0x01) 清屏
    LcdWriteCom(0x80) 设置数指针起点
    }
    #else
    void LcdInit() LCD初始化子程序
    {
    LcdWriteCom(0x32) 8位总线转4位总线
    LcdWriteCom(0x28) 四位线初始化
    LcdWriteCom(0x0c) 开显示显示光标
    LcdWriteCom(0x06) 写指针加1
    LcdWriteCom(0x01) 清屏
    LcdWriteCom(0x80) 设置数指针起点
    }
    #endif

    34 位定义
    PIN口定义
    sbit LCD1602_EP2^7
    sbit LCD1602_RWP2^5
    sbit LCD1602_RSP2^6
    定义ds1302IO口
    sbit DSIOP3^4
    sbit RSTP3^5
    sbit SCLKP3^6

    第四章 指标测试
    41 测试仪器
    测试表2 示
    序号
    名称
    型号
    1
    PC机

    2
    单片机仿真软件
    Proteuskeil C
    3
    数字万表
    DT9205B
    4
    ISP线载线

    表2 测试仪器
    42 硬件测试
    调电子日历电路焊接轻视出处错误会检测造成便种锋利引脚注意处理否会刺破带包皮导线会电路造成短路现象
    电子日历设计调试中遇问题回想问题认真思考避免问题:
    (1)单片机晶振起振
    (2)LCD1602液晶VDD VSS 引脚接反时没接保护电阻
    电容结果液晶发热烧坏
    解决:①:根仪器测试发现电路引脚接错现象重新焊接晶振
    复位正常程序够载②:重新买液晶VDDVSS重新接
    正确引脚
    43 软件测试
    电子日历功数字型前日期时间编写程序调试时出现较问题次模块子程序修改步步完成终解决软件
    44 测试结果分析结
    441 测试结果分析
    (1).测试中遇单片机晶振起振首先试测仪电路进行测试观察否存漏焊虚焊者元件损坏
    (2).LCD1602液晶显示时间日期首先试测仪电路进行测试观察电路否存短路现象然查程序否正确误程序进行认真修改
    442 测试结
    次反复测试分析电路原理功更加熟悉时提高设计力电路分析力时软件编程方面更提高编程力加强时学知识提高巩固
    作品总结
    整设计程中充分发挥观动性学学许没学知识较完成作品达预期目完初设想电路焊接时然没什问题中知道焊接整作品中重性电路焊接程中心急慢慢急求成反达事半功倍效果电路设计布局先构思显电路板美观方程序编写中思路清晰开始时遇问题静心思考理清思路反心应手通做次毕业设计知道做事颗常心想着走捷径步脚印练耐心做什事耐心次毕业设计中学东西重总毕业设计力全方位提高
    致谢词
    感谢学院感谢老师设计中予帮助次难煅炼机会动手力专业技提高
    设计制作程中深切体会实践重性次设计学知识次综合性检测动手力理知识运力提高时加深网络资源认识提高查阅资料效率充足时间投入电路设计中做作品日子里指导教师悉心指导指导教师致诚挚谢意感谢提供相关技术帮助老师学支持鼓励次作品完成信心动力私帮助支持深表谢意
    参考文献
    1:张毅刚彭喜元姜守达乔立言新编MCS51单片机应设计
    哈尔滨工业学出版社2008
    2:马忠梅单片机C语言应设计 北京航空航天学出版社 2008
    3:王静霞单片机应技术电子工业出版社 2009
    4: 张道德单片机接口技术中国水利水电出版社 2007
    5:石生电路基分析高等教育出版社2008
    6:谭浩强C语言程序设计(第2版)清华学出版社
    7:胡宴耿苏燕模拟电子技术高等教育出版社 2000
    8:谭永红雷跃莫振栋电子线路实验进阶教程
    北京航空航天学出版 2008
    9:刘国巍周晓萍周莉数字电子技术基础国防科技学出版社2009
    10:张永枫单片机应实训教程北京:清华学出版社2008
    11:刘守义单片机应技术(第2版)西安电子科技学出版社2007
    12:先锋工作室单片机程序设计实例北京:清华学出版社2003
    13:广州周立功单片机发展限公司Keil C51技巧实战2003
    14:李群芳单片机微型计算机接口技术(第2版)北京:电子工业出版
    15:徐玮C51单片机高效入门北京:机械工业出版社2006
    附录 系统电路图

    附图1系统电路图
    附录二 Proteus仿真图

    附图2 Proteus仿真图
    附录三 系统程序
    源程序:
    #include
    #includelcdh
    #includeds1302h
    #define uchar unsigned char
    #define uint unsigned int
    DS1302写入读取时分秒址命令
    秒分时日月周年 低位读写位
    uchar code READ_RTC_ADDR[7] {0x81 0x83 0x85 0x87 0x89 0x8b 0x8d}
    uchar code WRITE_RTC_ADDR[7] {0x80 0x82 0x84 0x86 0x88 0x8a 0x8c}

    DS1302时钟初始化2013年1月1日星期二12点00分00秒
    存储序秒分时日月周年存储格式BCD码
    uchar TIME[7] {0x00 0x24 0x12 0x01 0x01 0x02 0x13}
    sbit DSIOP3^4
    sbit RSTP3^5
    sbit SCLKP3^6
    sbit LCD1602_EP2^7
    sbit LCD1602_RWP2^5
    sbit LCD1602_RSP2^6
    *******************************************************************************
    * 函 数 名 Lcd1602_Delay1ms
    * 函数功 延时函数延时1ms
    * 输 入 c
    * 输 出
    * 说 名 该函数12MHZ晶振12分频单片机延时
    *******************************************************************************

    void Lcd1602_Delay1ms(uint c) 误差 0us
    {
    uchar ab
    for ( c>0 c)
    {
    for (b199b>0b)
    {
    for(a1a>0a)
    }
    }

    }

    **************************************************************************
    * 函 数 名 LcdWriteCom
    * 函数功 LCD写入字节命令
    * 输 入 com
    * 输 出
    *******************************************************************************
    void LcdWriteCom(uchar com) 写入命令
    {
    LCD1602_E 0
    LCD1602_RS 0 选择发送命令
    LCD1602_RW 0 选择写入

    LCD1602_DATAPINS com 放入命令
    Lcd1602_Delay1ms(1) 等数稳定

    LCD1602_E 1 写入时序
    Lcd1602_Delay1ms(5) 保持时间
    LCD1602_E 0
    }
    #else
    void LcdWriteCom(uchar com) 写入命令
    {
    LCD1602_E 0 清零
    LCD1602_RS 0 选择写入命令
    LCD1602_RW 0 选择写入

    LCD1602_DATAPINS com 4位接线接P0口高四位传送高四位改
    Lcd1602_Delay1ms(1)

    LCD1602_E 1 写入时序
    Lcd1602_Delay1ms(5)
    LCD1602_E 0

    Lcd1602_Delay1ms(1)
    LCD1602_DATAPINS com << 4 发送低四位
    Lcd1602_Delay1ms(1)

    LCD1602_E 1 写入时序
    Lcd1602_Delay1ms(5)
    LCD1602_E 0
    }
    *******************************************************************************
    * 函 数 名 LcdWriteData
    * 函数功 LCD写入字节数
    * 输 入 dat
    * 输 出
    ******************************************************************************
    void LcdWriteData(uchar dat) 写入数
    {
    LCD1602_E 0 清零
    LCD1602_RS 1 选择输入数
    LCD1602_RW 0 选择写入

    LCD1602_DATAPINS dat 写入数
    Lcd1602_Delay1ms(1)

    LCD1602_E 1 写入时序
    Lcd1602_Delay1ms(5) 保持时间
    LCD1602_E 0
    }
    #else
    void LcdWriteData(uchar dat) 写入数
    {
    LCD1602_E 0 清零
    LCD1602_RS 1 选择写入数
    LCD1602_RW 0 选择写入

    LCD1602_DATAPINS dat 4位接线接P0口高四位传送高四位改
    Lcd1602_Delay1ms(1)

    LCD1602_E 1 写入时序
    Lcd1602_Delay1ms(5)
    LCD1602_E 0

    LCD1602_DATAPINS dat << 4 写入低四位
    Lcd1602_Delay1ms(1)

    LCD1602_E 1 写入时序
    Lcd1602_Delay1ms(5)
    LCD1602_E 0
    }
    *******************************************************************************
    * 函 数 名 LcdInit()
    * 函数功 初始化LCD屏
    * 输 入
    * 输 出
    *******************************************************************************
    #ifndef LCD1602_4PINS
    void LcdInit() LCD初始化子程序
    {
    LcdWriteCom(0x38) 开显示
    LcdWriteCom(0x0c) 开显示显示光标
    LcdWriteCom(0x06) 写指针加1
    LcdWriteCom(0x01) 清屏
    LcdWriteCom(0x80) 设置数指针起点
    }
    #else
    void LcdInit() LCD初始化子程序
    {
    LcdWriteCom(0x32) 8位总线转4位总线
    LcdWriteCom(0x28) 四位线初始化
    LcdWriteCom(0x0c) 开显示显示光标
    LcdWriteCom(0x06) 写指针加1
    LcdWriteCom(0x01) 清屏
    LcdWriteCom(0x80) 设置数指针起点
    }
    void Ds1302Write(uchar addr uchar dat)
    {
    uchar n
    RST 0
    _nop_()

    SCLK 0先SCLK置低电
    _nop_()
    RST 1 然RST(CE)置高电
    _nop_()

    for (n0 n<8 n++)开始传送八位址命令
    {
    DSIO addr & 0x01数低位开始传送
    addr >> 1
    SCLK 1数升时DS1302读取数
    _nop_()
    SCLK 0
    _nop_()
    }
    for (n0 n<8 n++)写入8位数
    {
    DSIO dat & 0x01
    dat >> 1
    SCLK 1数升时DS1302读取数
    _nop_()
    SCLK 0
    _nop_()
    }

    RST 0传送数结束
    _nop_()
    }

    *******************************************************************************
    * 函 数 名 Ds1302Read
    * 函数功 读取址数
    * 输 入 addr
    * 输 出 dat
    *******************************************************************************

    uchar Ds1302Read(uchar addr)
    {
    uchar ndatdat1
    RST 0
    _nop_()

    SCLK 0先SCLK置低电
    _nop_()
    RST 1然RST(CE)置高电
    _nop_()

    for(n0 n<8 n++)开始传送八位址命令
    {
    DSIO addr & 0x01数低位开始传送
    addr >> 1
    SCLK 1数升时DS1302读取数
    _nop_()
    SCLK 0DS1302降时放置数
    _nop_()
    }
    _nop_()
    for(n0 n<8 n++)读取8位数
    {
    dat1 DSIO低位开始接收
    dat (dat>>1) | (dat1<<7)
    SCLK 1
    _nop_()
    SCLK 0DS1302降时放置数
    _nop_()
    }

    RST 0
    _nop_() DS1302复位稳定时间必须
    SCLK 1
    _nop_()
    DSIO 0
    _nop_()
    DSIO 1
    _nop_()
    return dat
    }

    *******************************************************************************
    * 函 数 名 Ds1302Init
    * 函数功 初始化DS1302
    * 输 入
    * 输 出
    *******************************************************************************

    void Ds1302Init()
    {
    uchar n
    Ds1302Write(0x8E0X00) 禁止写保护关闭写保护功
    for (n0 n<7 n++)写入7字节时钟信号:分秒时日月周年
    {
    Ds1302Write(WRITE_RTC_ADDR[n]TIME[n])
    }
    Ds1302Write(0x8E0x80) 开写保护功
    }

    *******************************************************************************
    * 函 数 名 Ds1302ReadTime
    * 函数功 读取时钟信息
    * 输 入
    * 输 出
    *******************************************************************************

    void Ds1302ReadTime()
    {
    uchar n
    for (n0 n<7 n++)读取7字节时钟信号:分秒时日月周年
    {
    TIME[n] Ds1302Read(READ_RTC_ADDR[n])
    }

    }

    void LcdDisplay()
    {
    LcdWriteCom(0x80+0X40)
    LcdWriteData('0'+TIME[2]16) 时
    LcdWriteData('0'+(TIME[2]&0x0f))
    LcdWriteData('')
    LcdWriteData('0'+TIME[1]16) 分
    LcdWriteData('0'+(TIME[1]&0x0f))
    LcdWriteData('')
    LcdWriteData('0'+TIME[0]16) 秒
    LcdWriteData('0'+(TIME[0]&0x0f))

    LcdWriteCom(0x80)
    LcdWriteData('2')
    LcdWriteData('0')
    LcdWriteData('0'+TIME[6]16) 年
    LcdWriteData('0'+(TIME[6]&0x0f))
    LcdWriteData('')
    LcdWriteData('0'+TIME[4]16) 月
    LcdWriteData('0'+(TIME[4]&0x0f))
    LcdWriteData('')
    LcdWriteData('0'+TIME[3]16) 日
    LcdWriteData('0'+(TIME[3]&0x0f))
    LcdWriteCom(0x8D)
    LcdWriteData('0'+(TIME[5]&0x07)) 星期
    }

    void main()
    {
    LcdInit()
    Ds1302Init()
    while(1)
    {
    Ds1302ReadTime()
    LcdDisplay()
    }

    }

    附录四 元器件清单实物图
    元器件名称
    数量
    洞洞板
    1
    电解电容 100uF + 10uF
    1+1
    STC89C52RC单片机+底座
    1+1
    瓷片电容 10uF + 30pF
    7+3
    锁开关
    1

    1
    COM口
    1
    电阻 10K+1K
    2+10
    USBB
    1
    3V电子
    1
    MAX232+底座
    1+1
    DS1302 +底座
    1+1
    LED红
    1
    排针
    2
    排针插
    1
    LCD1602液晶
    1


    附图3采购元器件清单

    附图 4 实物图

    附图5 实物显示图








    附录五 PCB图


    文档香网(httpswwwxiangdangnet)户传

    《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
    该内容是文档的文本内容,更好的格式请下载文档

    下载文档到电脑,查找使用更方便

    文档的实际排版效果,会与网站的显示效果略有不同!!

    需要 5 香币 [ 分享文档获得香币 ]

    下载文档

    相关文档

    毕业论文(设计)基于安卓的多功能时钟app设计与实现

    目 录摘 要 1ABSTRACT 2第1章 绪论 31.1 开发背景 31.2 研究现状 51.3 本文的主要工作 61.4 论文的组织结构 6第2章 安卓相关介绍 72.1 安卓系统...

    4年前   
    1064    0

    基于STC89C52的电子时钟设计课程设计

    目 录1.前言 12.整体设计方案 23.硬件设计方案 23.1 复位电路 23.2 晶振电路 33.3 LED显示电路 43.4 按键输入电路 43.5 蜂鸣器电路 54....

    1年前   
    370    0

    基于单片机的时钟设计

    随着时间的推移,事物的发展越来越趋向于高科技,单片机的出现,受到了社会各界的广泛关注,这是由于单片机具备丰富的功能。单片机的特点为:尺寸小,价格低,抗干扰强,开发容易等。运用的范围也很广,如检测...

    3年前   
    1009    0

    基于ARM的智能电子秤系统的设计与实现

    随着现代社会的发展,对称重技术提出了更高的要求。目前,台式电子秤在商业贸易中的使用已相当普遍,但是仍存在较大的局限性:体积大、成本高、需要工频交流电源供应、携带不便、应用场所受到制约。现有的便携...

    3年前   
    1142    0

    数电课程设计数字电子时钟的实现

    课 程 设 计 报 告设计题目:数字电子时钟的设计与实现班 级:学 号:姓 名: 指导教师:设计时间:摘 要钟表的数字化给人们生产生活带来了极大的方便,大大的扩展了原先钟表...

    4年前   
    1850    0

    单片机课程设计用proteus实现一个电子时钟的设计

    单片机原理课程设计任务书 课程名称 单片机原理 专 业 通信工程级 指导教师 职 ...

    3年前   
    443    0

    桌面时钟设计与实现实习报告

    XX大学信息工程学院桌面时钟设计与实现实习报告桌面时钟设计与实现学 号 姓 名 专业班级 指导教师 实践日期2014年1月6日-2014年1月17日目 录一、综合训练目的与要求 1...

    3年前   
    695    0

    数电电子时钟课程设计

    专业课程设计报告题目:数字电子钟课程设计系 别 电气工程系 专业班级 电气班 学生姓名 指导教师...

    3年前   
    655    0

    电子信息工程基于视频导航的智能车系统的设计与实现

     基于视频导航的智能车系统的设计与实现 ...

    1年前   
    280    0

    基于Android的电子书阅读器的设计与实现

    毕业设计说明书(论文)中文摘要Android平台现在非常的火,我们平时使用的智能手机,平板电脑,还有新的智能电视,有很大部分是基于Android平台的,很显然,它在人们生活中的表现得越来越重要...

    3年前   
    621    0

    电子信息工程基于单片机的指纹密码锁设计与实现

    基于单片机的指纹密码锁设计与实现 Design and implementation of fingerpri...

    1年前   
    258    0

    基于SpringBoot博客系统的设计与实现

     基于SpringBoot博客系统的设计与实现Design and implementation of bl...

    2年前   
    951    0

    基于node的微博的设计与实现

    基于node的微博的设计与实现design and implementation of microblog based on node 摘要千禧年后, Twitter开始进...

    9个月前   
    265    0

    基于matlab的电力电子仿真设计报告

    课程设计(综合实验)报告( 2010-- 2011 年度第 1 学期)名 称:电力电子技术课程设计院 系:电气与电子工程学院班 级: 电气班 学 号:...

    4年前   
    959    0

    电子公文管理系统设计与实现

    电子公文管理系统设计与实现  1 引言   公文是政府军队等各类部门请示汇报、命令下达等工作中的重要部分。传统的公文归档以纸质原件为主,存放在档案局等部门,当归档公文数目逐渐增多时,公文的查找...

    8年前   
    816    0

    最终电子教务管理系统设计与实现

    随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。

    2年前   
    658    0

    电子商务网站设计与实现

    XX大学软件学院期末课程报告Term Examination ReportSchool of Software, XX University个人成绩序号学号专业姓名成绩1234学  期: ...

    2年前   
    422    0

    基于web学生成绩管理系统设计与实现

    随着计算机技术在各行各业的广泛应用,将计算机技术应用到学校中去,将大大提高学校管理的效率。学生成绩管理系统将在提高学校管理效率中发挥重要作用。

    3年前   
    921    0

    基于SSH框架的图书管理系统的设计与实现

    基于SSH框架的图书管理系统的设计与实现基于SSH框架的图书管理系统摘 要 如今已经我们已经步入了信息时代,而在信息科技快速发展的形势下,网络现已成为我们工作和日常生活中必不可少的一部分...

    2年前   
    739    0

    基于opencv的车牌识别系统设计与实现

     基于opencv的车牌识别系统设计与实现 ...

    2年前   
    723    0

    文档贡献者

    文***品

    贡献于2022-10-01

    下载需要 5 香币 [香币充值 ]
    亲,您也可以通过 分享原创文档 来获得香币奖励!
    下载文档

    该用户的其他文档