电子钟 (串口).doc

上传人:hs****ma 文档编号:548071986 上传时间:2022-11-20 格式:DOC 页数:17 大小:117.51KB
返回 下载 相关 举报
电子钟 (串口).doc_第1页
第1页 / 共17页
电子钟 (串口).doc_第2页
第2页 / 共17页
电子钟 (串口).doc_第3页
第3页 / 共17页
电子钟 (串口).doc_第4页
第4页 / 共17页
电子钟 (串口).doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《电子钟 (串口).doc》由会员分享,可在线阅读,更多相关《电子钟 (串口).doc(17页珍藏版)》请在金锄头文库上搜索。

1、课程设计报告设计课题: 电子钟 (串口) 专业班学生姓名: 指导教师: 设计时间: 电子钟(二)一、 课程设计目的:通过对设计电子钟的设计了解89C51,PCF8563及液晶显示的工作原理与编程方法.二、 课程设计要求:通过单片机控制应用时钟芯片8563和串口液晶,实现电子钟。要求显示年、月、日、时、分、秒。三、 系统分析与设计:1:系统总体设计 本实验中的器件:PCB开发板一块;89C51模块;PCF8563时钟芯片一片;串口液晶一个; MAX232芯片一片;该电子钟分为数据产生,数据传输和数据显示三个部分.其中数据产生的是PCF8563模块,数据传输的是89C52和74HC573模块。数据

2、显示的是在串口液晶上。89C51模块:实验中利用89C52模块的P3.4及P3.5引脚向PCF8563的6脚和5脚即SCL和SDA传输数据,来对PCF8563进行初始化,在利用采来的数据将数据地址锁存在74HC573内并在串口液晶上显示。PCF8563模块:该模块是时钟芯片,是低功耗的CMOS时钟芯片,其所有的地址和数据都是通过I2C总线接口串行传递的。每次读写数据后,内嵌的地址寄存器会自动产生增量。本实验就是利用该芯片传来的数据进行显示。串口液晶LCD:该液晶有两行地址,将要显示的数据分别放在这两行中进行显示。2:系统详细设计系统总体框架:系统的总体电路图如图1所示:图1 系统电路图 图2

3、74HC573与单片机连接图 图3 GAL16V8与单片机连接图图4 单片机与外接器件连接图3:系统流程图:开始8563初始化,LCD初始化向8563写入初始化值读回数据并锁存将数据送入串口液晶显示时间4:原程序清单#include#include#include#define uchar unsigned char#define uint unsigned int#define ulong unsigned long#include #define PCF8563_W 0xa2#define PCF8563_R 0xa3#define WRADDR 0x00#define RDADDR 0x

4、02#define _Nop() _nop_();/*/#define PCF8563_CONTROL_STATE0 0x00 /控制状态寄存器1#define PCF8563_CONTROL_STATE1 0x01 /控制状态寄存器2#define PCF8563_CLKOUT 0x0d /CLKOUT频率寄存器#define PCF8563_TIMER_CONTROL 0x0e /定时器控制寄存器#define PCF8563_TIMER_DATA 0x0f /定时器倒计数数值寄存器#define PCF8563_MINUTE 0x02 /秒#define PCF8563_SECOND 0

5、x03 /分#define PCF8563_HOUR 0x04 /时#define PCF8563_DATE 0x05 /日#define PCF8563_WEEK 0x06 /星期#define PCF8563_MONTH 0x07 /月/世纪#define PCF8563_YEAR 0x08 /年#define PCF8563_MINUTE_ALARM 0x09 /分钟报警#define PCF8563_SECOND_ALARM 0x0a /小时报警#define PCF8563_YEAR_ALARM 0x0b /日报警#define PCF8563_WEEK_ALARM 0x0c /星期

6、报警uchar b16;/*/uchar code CS12= 0x00, 0x28 ;uchar code CS22= 0x12, 0x02 ;uchar code CLKOUT4= 0x80, 0x81, 0x82, 0x83 ;/*/sbit SDA=P35;sbit SCL=P34;/*/sbit bflag=ACC7;uchar FUNC(uchar a,uchar b);/右循环n,m位/*/bit ack;/起动IICvoid Start_I2c() SDA=1; /*发送起始条件的数据信号*/ _Nop(); SCL=1; _Nop(); /*起始条件建立时间大于4.7us,延

7、时*/ _Nop(); _Nop(); _Nop(); _Nop(); SDA=0; /*发送起始信号*/ _Nop(); /* 起始条件锁定时间大于4s*/ _Nop(); _Nop(); _Nop(); _Nop(); SCL=0; /*钳住I2C总线,准备发送或接收数据 */ _Nop(); _Nop();/*/停止IICvoid Stop_I2c() SDA=0; /*发送结束条件的数据信号*/ _Nop(); /*发送结束条件的时钟信号*/ SCL=1; /*结束条件建立时间大于4s*/ _Nop(); _Nop(); _Nop(); _Nop(); _Nop(); SDA=1; /

8、*发送I2C总线结束信号*/ _Nop(); _Nop(); _Nop(); _Nop();/写1BYTE数据(上传数据、释放IIC、ack确认)void SendByte(uchar c) uchar idata BitCnt; for(BitCnt=0;BitCnt8;BitCnt+) /*要传送的数据长度为8位*/ if(cBitCnt)&0x80)SDA=1; /*判断发送位*/ else SDA=0; _Nop(); SCL=1; /*置时钟线为高,通知被控器开始接收数据位*/ _Nop(); _Nop(); /*保证时钟高电平周期大于4s*/ _Nop(); _Nop(); _No

9、p(); SCL=0; _Nop(); _Nop(); SDA=1; /*8位发送完后释放数据线,准备接收应答位*/ _Nop(); _Nop(); SCL=1; _Nop(); _Nop(); _Nop(); if(SDA=1)ack=0; else ack=1; /*判断是否接收到应答信号*/ SCL=0; _Nop(); _Nop();/读1BYTE数据(置输入状态、读数据)uchar RcvByte() uchar idata retc=0; uchar idata BitCnt; SDA=1; /*置数据线为输入方式*/ for(BitCnt=0;BitCnt8;BitCnt+) _

10、Nop(); SCL=0; /*置时钟线为低,准备接收数据位*/ _Nop(); _Nop(); /*时钟低电平周期大于4.7s*/ _Nop(); _Nop(); _Nop(); SCL=1; /*置时钟线为高使数据线上数据有效*/ _Nop(); _Nop(); retc=retc 失败)bit ISendByte(uchar sla,uchar c) Start_I2c(); /启动总线 SendByte(sla); /发送器件地址 if(ack=0)return(0); SendByte(c); /发送数据 if(ack=0)return(0); Stop_I2c(); /结束总线 return(1);/指定地址写命令/数据(地址=从地址+子地址,no为从指针*s的个数)bit ISendStr(uchar sla,uchar suba,uchar *s,uchar

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号