ImageVerifierCode 换一换
格式:DOC , 页数:16 ,大小:132.68KB ,
资源ID:851599      下载积分:20 积分
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 微信支付   
验证码:   换一换

加入VIP,免费下载资源
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【http://www.wodocx.com/d-851599.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(电子钟串口课程设计报告.doc)为本站会员(精***)主动上传,沃文网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知沃文网(发送邮件至2622162128@qq.com或直接QQ联系客服),我们立即给予删除!

电子钟串口课程设计报告.doc

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

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

3、件连接图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 PCF856

4、3_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

5、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

6、 ;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;

7、 /*发送起始信号*/ _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(); _No

8、p();/写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位发送完

9、后释放数据线,准备接收应答位*/ _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(); _

10、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的个

11、数)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);/指定地址读

12、状态/数据(地址=从地址+子地址,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;/*读分并处理*

13、/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(0x8

14、0); 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:在显示年月时由于对其有效位未理解透彻,因而出现了显示乱码,在经过改正后得到了结果. 五、系统运行报告 对

15、程序运行下载到单片机后,串口液晶屏上第一行显示出“DATA/2003/12/4。第二行显示TIME/19:59:50。六、总结1:在对时钟芯片8563的数据读回时未理解程序的读回命令,其实就是读回命令将数据读回对其进行显示就可以了,尝试一个数进行显示,最终将数据显示在了LCD上。2:因为串口液晶只能显示ASII码,因此对其进行转换是必须的。在做时直接进行显示,则显示出乱码。经过查资料修正后得出了正确结果。3:通过本次实验,加深了对电路的整体设计思想。对51单片机的设计流程有了一定的了解。对硬件的调试与软件的修改掌握了一些技巧。对51单片机的C程序设计有了一定的掌握。七、参考书目1:马忠梅,单片机的c语言应用程序设计,北京航空航天大学出版社2:王福瑞,单片微机测控系统设计大全,北京航空航天大学出版社3:徐爱钧,单片机高级语言C51应用程序设计,电子工业出版社 4:杨振江,智能仪器与数据采集系统中的新器件及应用,西安电子科技大学出版社

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922