




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计报告设计课题: 电子钟 (串口) 专业班学生姓名: 指导教师: 设计时间: 电子钟(二)一、 课程设计目的:通过对设计电子钟的设计了解89C51,PCF8563及液晶显示的工作原理与编程方法.二、 课程设计要求:通过单片机控制应用时钟芯片8563和串口液晶,实现电子钟。要求显示年、月、日、时、分、秒。三、 系统分析与设计:1:系统总体设计 本实验中的器件:PCB开发板一块;89C51模块;PCF8563时钟芯片一片;串口液晶一个; MAX232芯片一片;该电子钟分为数据产生,数据传输和数据显示三个部分.其中数据产生的是PCF8563模块,数据传输的是89C52和74HC573模块。数据显示的是在串口液晶上。89C51模块:实验中利用89C52模块的P3.4及P3.5引脚向PCF8563的6脚和5脚即SCL和SDA传输数据,来对PCF8563进行初始化,在利用采来的数据将数据地址锁存在74HC573内并在串口液晶上显示。PCF8563模块:该模块是时钟芯片,是低功耗的CMOS时钟芯片,其所有的地址和数据都是通过I2C总线接口串行传递的。每次读写数据后,内嵌的地址寄存器会自动产生增量。本实验就是利用该芯片传来的数据进行显示。串口液晶LCD:该液晶有两行地址,将要显示的数据分别放在这两行中进行显示。2:系统详细设计系统总体框架:系统的总体电路图如图1所示:图1 系统电路图 图2 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 0x02#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 0x03 /分#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 /星期报警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,延时*/ _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; /*发送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(); _Nop(); 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+) _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 no) uchar idata i; Start_I2c(); /*启动总线*/ SendByte(sla); /*发送器件地址*/ if(ack=0)return(0); SendByte(suba); /*发送器件子地址*/ if(ack=0)return(0);/ reset_wdt(); for(i=0;ino;i+) SendByte(*s); /*发送数据*/ if(ack=0)return(0); s+; Stop_I2c(); /*结束总线*/ return(1);/指定地址读状态/数据(地址=从地址+子地址,no为从指针*s的个数)bit IRcvStr(uchar sla,uchar suba,uchar *s,uchar no) uchar idata i; Start_I2c(); /*启动总线*/ SendByte(sla); /*发送器件地址*/ if(ack=0)return(0); SendByte(suba); /*发送器件子地址*/ if(ack=0)return(0); Start_I2c(); SendByte(sla+1); if(ack=0)return(0); for(i=0;i4;a1=(b0&0x0f);a2=34;/*读分并处理*/a3=(b1&0x0f);b1=b14;a4=(b1&0x0f);a5=34;/*读时并处理*/a6=(b2&0x0f);b2=b24;a7=(b2&0x03);/*读日并处理*/a8=(b3&0x0f); b3=b34;a9=(b3&0x03);a10=34;/*读月并处理*/a11=(b5&0x0f);b5=b54;a12=(b5&0x01);a13=34;/*读年并处理*/a14=(b6&0x0f);b6=b64;a15=(b6&0x0f); for(n=0;n8;n+) d=a7-n; display_buffn=memd; display_slcd(8); delay_ms(0x80); if(a0=5) for(n=0;n8;n+) d=a15-n; display_buffn=memd; display_slcd(8); delay_ms(0x80); delay_ms(0xff); delay_ms(0xff); delay_ms(0xff); delay_ms(0xff); delay_ms(0xff); delay_ms(0xff); 四、系统调试过程中出现的问题1:液晶最初是无显示的,必须通过调节电位器才能显示.GAL在显示是出现了问题,对其进行烧制.2:在显示年月时由于对其有效位未理解透彻,因而出现了显示乱码,在经过改正后得到了结果. 五、系统运行报告 对程序运行下载到单片机后,串口液晶屏上第一行显示出“DATA/2003/12/4。第二行显示TIME/19:59:50。六、总结1:在对时钟芯片8563的数据读回时未理解程序的读回命令,其实就是读回命令将数据读回对其进行显示就可以了,尝试一个数进行显示,最终将数据显示在了LCD上。2:因为串口液晶只能显示ASII码,因此对其进行转换是必须的。在做时直接进行显示,则显示出乱码。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 哈尔滨市中储粮2025秋招面试半结构化模拟题30问及答案
- 中国移动宝鸡市2025秋招技术岗专业追问清单及参考回答
- 国家能源烟台市2025秋招面试专业追问及参考能源与动力工程岗位
- 昌都市中储粮2025秋招面试专业追问题库财务资产岗
- 中国移动宜昌市2025秋招计算机类专业追问清单及参考回答
- 宁德市中储粮2025秋招写作案例分析万能模板直接套用
- 银川市中储粮2025秋招面试专业追问题库质检化验岗
- 中国广电济宁市2025秋招计算机类专业追问清单及参考回答
- 乌海市中石油2025秋招笔试模拟题含答案法律与合规岗
- 朔州市中石油2025秋招笔试综合知识专练题库及答案
- 福利彩票数字化转型总结
- 护理心理学自我意识
- 餐饮企业税务管理制度
- 《中央管理企业负责人薪酬制度改革方案》
- 个人贷款管理办法(2024年第3号)
- 小学语文课程与教第二章:小学语文课程教材
- 苏教版一年级上册科学素材期末复习知识点总结
- 废铅酸电池中回收高纯度金属铅和α-PbO新工艺及其电化学性能研究
- 露天停车场施工方案
- 山东省青岛第三十九中学2023-2024学年九年级上学期月考数学试卷(10月份) (月考)
- GB/T 43063-2023集成电路CMOS图像传感器测试方法
评论
0/150
提交评论