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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(13 实时时钟.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

13 实时时钟.docx

1、13 实时时钟 重庆理工大学实 验 报 告题目: DS1302实时时钟 二级学院 计算机科学与工程 专 业 计算机科学与技术 班 级 113030701 学生姓名 刘勇 学号11303070134 教 师 刘小洋 时 间 2014-3-25 目 录一 实验名称二 实验目的三 实验设备与环境四 实验基本原理五 实验内容(包括主要算法分析与流程图)六 实验运行结果及分析七 实验心得体会一 实验名称 DS1302实时时钟二 实4验目的 DS时钟芯片包括实时时钟/日历,提供秒、分、时、日、周、月和年等信息 用LCD1602显示从DS1302读出的年、月、日、星期、时、分、秒的实时值 同时按下K1和K4

2、键将由程序预设的日期和时间数据写入DS1302芯片内三 实验设备与环境 实验芯片(AT89S52) ME850单片机开发实验仪 USB通讯线 串口通讯线四 实验基本原理 将JP24的ON端短接,使LCD1602使能 将JP25背光短接子短接,使LCD1602的背光灯点亮 将JP18短接子短接,使芯片管脚与P1.0P1.2端口接通五 实验内容(包括主要算法分析与流程图)#include #include /#define uchar unsigned char/#define uint unsigned intsbit LCD_RS = P2 0;sbit LCD_RW = P2 1;sbit

3、LCD_EN = P2 2;sbit K1 = P1 4;sbit K2 = P1 5;sbit K3 = P1 6;sbit K4 = P1 7;sbit reset = P1 2; /DS1302sbit sclk = P1 0;sbit io = P1 1;sbit BEEP = P3 7;unsigned char str1 = - - Week: ;unsigned char str2 = Time: : : ;unsigned char init = 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;unsigned char init1 = 0x0

4、0, 0x00, 0x20, 0x08, 0x08, 0x05, 0x08;/秒, 分, 时, 日, 月,星期,年char code reserve3_at_ 0x3b; /保留0x3b开始的3个字节/*us延时子函数 (4.34us) */void delayNOP() _nop_(); _nop_(); _nop_(); _nop_();/*ms延时子函数 */void delayms(unsigned int ms) unsigned char y; while (ms-) for (y = 0; y 114; y+) ; /*x*0.14MS 延时子函数 */void delayus(

5、unsigned char x) unsigned char i; while (x-) for (i = 0; i 14; i+) ; /*蜂鸣器驱动子函数 */void beep() unsigned char y; for (y = 0; y 180; y+) delayus(6); BEEP = !BEEP; /BEEP取反 BEEP = 1; /关闭蜂鸣器 delayms(150);/*检查LCD忙状态lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。 */unsigned char lcd_busy() bit result; LCD_RS = 0; L

6、CD_RW = 1; LCD_EN = 1; delayNOP(); result = (bit)(P0 &0x80); LCD_EN = 0; return (result);/*写指令数据到LCDRS=L,RW=L,E=高脉冲,D0-D7=指令码。 */void lcd_wcmd(unsigned char cmd) while (lcd_busy() ; LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_(); P0 = cmd; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0;/*写显示数据

7、到LCDRS=H,RW=L,E=高脉冲,D0-D7=数据。 */void lcd_wdat(unsigned char dat) while (lcd_busy() ; LCD_RS = 1; LCD_RW = 0; LCD_EN = 0; P0 = dat; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0;/*LCD初始化设定 */void lcd_init() delayms(50); /延时等待上电稳定 lcd_wcmd(0x38); /16*2显示,5*7点阵,8位数据 delayms(5); lcd_wcmd(0x38); delayms

8、(5); lcd_wcmd(0x38); delayms(5); lcd_wcmd(0x0c); /显示开,关光标 delayms(5); lcd_wcmd(0x06); /移动光标 delayms(5); lcd_wcmd(0x01); /清除LCD的显示内容 delayms(5);/*写字符串函数 */void write_str(unsigned char addr, unsigned char *p) unsigned char i = 0; lcd_wcmd(addr); while (pi != 0) lcd_wdat(pi); i+; /*设定显示位置row 取值为1-2 col

9、 取值为1-16 */void write_position(unsigned char row, unsigned char col) unsigned char place; if (row = 1) place = 0x80 + col - 1; lcd_wcmd(place); if (row = 2) place = 0xc0 + col - 1; lcd_wcmd(place); /*DS1302 写字节子函数 */void write_byte(unsigned char inbyte) unsigned char i; for (i = 0; i 1; /右移一位,最低位移入C

10、Y io = CY; /写入CY sclk = 1; delayNOP(); /*DS1302 读字节子函数 */unsigned char read_byte() unsigned char i, temp = 0; io = 1; /设置为输入口 for (i = 0; i 1; /右移一位,最高位补0 if (io = 1) /读 temp = temp | 0x80; /最高位补1 sclk = 1; delayNOP(); return (temp);/*往ds1302的某个地址写入数据 */void write_ds1302(unsigned char cmd, unsigned

11、char indata) reset = 0; delayNOP(); sclk = 0; /为低电平时 delayNOP(); reset = 1; /才能置为高电平 delayNOP(); write_byte(cmd); /先写地址 write_byte(indata); /然后再写数据 sclk = 1; reset = 0;/*读ds1302某地址的的数据 */unsigned char read_ds1302(unsigned char addr) unsigned char backdata; reset = 0; delayNOP(); sclk = 0; /为低电平时 del

12、ayNOP(); reset = 1; /才能置为高电平 delayNOP(); write_byte(addr); /先写地址 backdata = read_byte(); /然后再读数据 sclk = 1; reset = 0; return (backdata);/*写入初始时间子函数 */void set_ds1302(unsigned char addr, unsigned char *p, unsigned char n) /写入n个数据 write_ds1302(0x8e, 0x00); /写控制字,允许写操作 for (; n 0; n-) write_ds1302(addr

13、, *p); p+; addr = addr + 2; write_ds1302(0x8e, 0x80); /写保护,不允许写/*读取当前时间子函数 */void read_nowtime(unsigned char addr, unsigned char *p, unsigned char n) for (; n 0; n-) *p = read_ds1302(addr); p+; addr = addr + 2; /*DS1302初始化 */void init_ds1302() reset = 0; sclk = 0; write_ds1302(0x8e, 0x00); /写控制字,允许写

14、操作 write_ds1302(0x80, 0x00); /时钟启动 write_ds1302(0x90, 0xa6); /一个二极管4K电阻充电 write_ds1302(0x8e, 0x80); /写控制字,禁止写操作/*显示当前时间 */void Play_nowtime() read_nowtime(0x81, init, 7); /读出当前时间,读出7个字节 write_position(2, 7); lcd_wdat(init2 &0xf0) 4) + 0x30); /时 lcd_wdat(init2 &0x0f) + 0x30); write_position(2, 10); l

15、cd_wdat(init1 &0xf0) 4) + 0x30); /分 lcd_wdat(init1 &0x0f) + 0x30); write_position(2, 13); lcd_wdat(init0 &0x70) 4) + 0x30); /秒 lcd_wdat(init0 &0x0f) + 0x30); write_position(1, 1); /年 lcd_wdat(init6 &0xf0) 4) + 0x30); lcd_wdat(init6 &0x0f) + 0x30); write_position(1, 4); lcd_wdat(init4 &0xf0) 4) + 0x3

16、0); /月 lcd_wdat(init4 &0x0f) + 0x30); write_position(1, 7); lcd_wdat(init3 &0xf0) 4) + 0x30); /日 lcd_wdat(init3 &0x0f) + 0x30); write_position(1, 15); lcd_wdat(init5 &0x0f) + 0x30); /周/*主函数 */void main(void) P0 = 0xff; /端口初始化 P1 = 0xff; P2 = 0xff; lcd_init(); /初始化LCD write_str(0x80, str1); /液晶显示字符串

17、write_str(0xc0, str2); /液晶显示字符串 init_ds1302(); /初始化ds1302 while (1) if (K1 | K4) = 0) /K1和K4键同时按下? delayms(20); /延时20ms if (K1 | K4) = 0) /K1和K4键同时按下? set_ds1302(0x80, init1, 7); /写入初始值 beep(); delayms(100); /100ms更新一次数据 Play_nowtime(); /*/2、流程图 六 实验运行结果及分析 与预期的结果相符。七 实验心得体会同过这次试验,对于单片机的实验原理有了更加深的理解。虽然途中遇到一些不懂的知识点以及程序错误,只要我们认真观察,不断努力,相信我们的能力必定得到提升。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1