基于时钟芯片的电脑时钟设计.doc

上传人:文库蛋蛋多 文档编号:3926338 上传时间:2023-03-28 格式:DOC 页数:29 大小:546KB
返回 下载 相关 举报
基于时钟芯片的电脑时钟设计.doc_第1页
第1页 / 共29页
基于时钟芯片的电脑时钟设计.doc_第2页
第2页 / 共29页
基于时钟芯片的电脑时钟设计.doc_第3页
第3页 / 共29页
基于时钟芯片的电脑时钟设计.doc_第4页
第4页 / 共29页
基于时钟芯片的电脑时钟设计.doc_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《基于时钟芯片的电脑时钟设计.doc》由会员分享,可在线阅读,更多相关《基于时钟芯片的电脑时钟设计.doc(29页珍藏版)》请在三一办公上搜索。

1、重庆科技学院学生实习(实训)总结报告 学 院:_ 电气与信息工程学院 专业班级:_电自普1103班_学生姓名:_杜天宇 _ 学 号:_2011441888 _实习(实训)地点:_逸夫科技大楼_512_ _ _报告题目:_基于时钟芯片的电脑时钟设计_ 报告日期: 2014年 1月10日 指导教师评语: _ _ _ _ 成绩(五级记分制):_ _ 指导教师(签字) :_目录一、前言 3 1.实训目的3 2.实训内容与要求3二、主体 5 1.自己的实习计划52.电脑时钟程序用到的STC89C52RC单片机电路图及部分元件原理图.5 2.1 STC89C52RC单片机电路图.52.2 晶振电路电路图.

2、62.3 复位电路电路图.6 2.4 四个独立按键电路图.6 2.5 四个数码管显示电路电路图.72.6四个LED指示灯及TTL串口下载电路图.82.7 电源开关电路图.92.8实时时钟模块电路图.93. 电脑时钟软件设计.93.1简单时钟的主程序流程图.93.2主程序设计.123.3显示函数子程序设计.133.4按键输入子程序设计.143.5闹钟子程序设计.163.6 TO中断服务程序164. 调试程序及电脑时钟基本功能的实现17三、实训心得体会.18参考文献.18附录一 电脑时钟电路图19附录二 电脑时钟程序20关于单片机的实习(实训)报告一、前言1.实训目的 通过单片机系统综合训练这一实

3、践教学环节的训练让学生在已有的单片机的基本知识和基本实验能力基础上,让学生初步掌握单片机应用系统的软硬件设计及调试的方法,培养学生工程设计能力和实践创新能力。2.实训内容与要求 设计题目:基于时钟芯片的电脑时钟设计学生姓名杜天宇课程名称单片机系统综合训练专业班级电气2011地 点实验楼I512起止时间18-19周设计内容及要求采用时钟芯片DS1302实现以下功能:1. 基本功能实时显示当前时间按设定时间用蜂鸣器报时能修改当前时钟。2. 扩展功能实现室内温度检测功能等。设计参数显示时间时,4位数码管显示,2位显示小时,2位显示分钟,第2位小数点0.5秒亮,0.5秒灭;蜂鸣器报时时间以每生学号最末

4、位确定。 进度要求时间内容地点指导教师12.30布置设计任务及要求,查资料,程序设计练习I512、506钟、辜李、吴12.31程序设计练习(时钟程序设计)硬件电路画图练习(课后)I512、506钟、翟李、王1.1元旦1.2程序设计练习(时钟程序设计)硬件电路画图练习(课后)I512、506辜、钟吴、王1.3总体方案设计,硬件设计、画硬件电路原理图I512、506翟、辜李、吴1.6软件方案设计,画软件流程图I512、506钟、翟李、王1.7程序设计、调试I512、506钟、辜吴、王1.8程序设计、调试,讲解设计报告要求I512、506钟、翟李、吴1.9程序设计、调试,撰写设计报告I512、506

5、辜、翟李、王1.10设计答辩验收I512、506全部参加参考资料1. 王景景. 单片机原理及应用. 机械工业出版社2. 自编.单片机应用设计指导书其它说明.本表应在每次实施前一周由负责教师填写二份,院系审批后交院系办备案,一份由负责教师留用。.若填写内容较多可另纸附后。3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。教研室主任: 指导教师:钟秉翔/李作进/吴英/王雪/辜小花/翟渊2013年 12月 二、主体1.自己的实习计划 1.查阅资料将老师布置的时钟程序设计出来,并调试下载至单片机上,实时显示时间,做到可以修改时间。(2013年12月30-31日)2.图书馆借一本关于Pro

6、tel 99 se软件操作画图的书,并掌握基本作图的方法,做出自己所用单片机(STC89C52RC)的实现时钟功能用到的部件电路图。(2014年1月2-6日)3.在之前时钟程序的基础上,完善闹钟功能。并完善时钟功能所用到的单片机部件电路图。(2014年1月79日)4.答辩并且完成实习实训总结报告。(2014年1月10日) 2.电脑时钟程序用到的STC89C52RC单片机电路图及部分元件原理图图一 STC89C52RC单片机电路图晶振可以说是单片机的时钟,有着固定稳固的频率,是一个标准,没有它的话,单片机的程序会乱跑,也有可能运行不了,反正是不正常。图二 晶振电路电路图图三 复位电路电路图注释:

7、以上三幅图的STC89C52RC、晶振电路和复位电路组成单片机的最小系统。图四 四个独立按键电路图LED数码管(LED Segment Displays)由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。这些段分别由字母a,b,c,d,e,f,g,dp来表示。当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼睛看到的字样了。如:显示一个“2”字,那么应当是a亮b亮g亮e亮d亮f不亮c不亮dp不亮。LED数码管有一般亮和超亮等不同之分,也有0.5寸、1寸等不同的尺寸。

8、小尺寸数码管的显示笔画常用一个发光二极管组成,而大尺寸的数码管由二个或多个发光二极管组成,一般情况下,单个发光二极管的管压降为1.8V左右,电流不超过30mA。发光二极管的阳极连接到一起连接到电源正极的称为共阳数码管,发光二极管的阴极连接到一起连接到电源负极的称为共阴数码管。常用LED数码管显示的数字和字符是0、1、2、3、4、5、6、7、8、9、A、而此次实训所用的STC89C52RC单片机上的数码管有四个,属于共阴极数码管。电路图如下图五所示。图五 四个数码管显示电路电路图四个LED灯如下图所示,因为STC89C52RC单片机没有蜂鸣器,所以闹钟提醒的时候用D1闪烁来代替。TTL串口下载为

9、电脑与单片机连接接收电源和下载程序的端口。图六 四个LED指示灯及TTL串口下载电路图电源开关关断后再次打开,时钟会重置。实时时钟模块DS1302芯片是本次实训用到的主要芯片,是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个318的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对

10、后备电源进行涓细电流充电的能力。DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据传送的方法。当RST为高电平时,所有的数据传送

11、被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc2.0V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),后面有详细说明。SCLK为时钟输入端。DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字。DS1302与CPU的连接需要三条线,即SCLK、I/O、RST。 图七 电源开关电路图 图八 实时时钟模块电路图3.电脑时钟软件设计3.1简单时钟的主程序流程图开始计时是否调时是否调

12、分修改小时修改分钟简单时钟的程序流程图全部代码#include#define THC0 0xee#define TLC0 0x00#define uchar unsigned charuchar Data_Buffer4=1,2,3,4;uchar code Duan17=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x76;uchar count,sec,min,h;uchar Mode=0;sbit P14=P14;sbit P24=P24;sbit P25=P25;sbit

13、 P26=P26;sbit P27=P27;sbit LED1=P34; /四个指示灯sbit LED2=P35;sbit LED3=P36; sbit LED4=P37;sbit K_Mode=P20; /按键定义sbit K_UP=P21;sbit K_DN=P22;void time1();void main() P14=0; count=0; sec=0; min=0; h=0; TMOD=0x01; TH0=THC0; TL0=TLC0; TR0=1; ET0=1; EA=1; while(1)time1(); void time1() if(count=200) count=0;

14、sec+; if(sec=60)sec=0;min+;if(min=60)min=0;h+;if(h=24) h=0; void time(void) interrupt 1 static unsigned char Bit=0;/静态变量,退出程序后,值保留 static unsigned char K_count=0; TL0=TLC0; TH0=THC0; count+; Bit+; if(Bit=4)Bit=0; P2|=0xf0; P0=DuanData_BufferBit; if(count=30)/消抖处理 K_count=0;if(K_Mode=0)/修改Mode, Mode+

15、; if(Mode=3)Mode=0; if(Mode=0)LED1=1;LED2=1;LED3=1;LED4=1;/实时时间 else if(Mode=1)LED1=0; /修改小时 else if(Mode=2)LED1=1;LED2=0;/修改分钟 else if(K_UP=0) if(Mode=1) /实时时间小时加 h+; if(h=24)h=0; else if(Mode=2)/实时时间分钟加 min+; if(min=60)min=0; else if(K_DN=0) if(Mode=1) /小时减 if(h=0)h=23; else h-; else if(Mode=2) /分

16、钟减 if(min=0)min=59; else min-; else K_count=0;3.2主程序设计开始计时是否调时是否修改闹钟是否闹钟修改时间修改闹钟时间D1亮结束主程序流程图void main() DS1302_init(); /调用时钟芯片DS1302的初始化函数 init(); while(1) P0=0x00; /数码管消影DS1302_read_time(); /调用读取DS1302时间参数函数if(page=0)display(shi,fen);if(page=1) /调时时间display1(nzshi,nzfen);if(page=2) /调试闹钟display1(n

17、aozhongshi,naozhongfen);if(naozhongshi=shi)&(naozhongfen=fen)LED5=0;key(); 3.3显示函数子程序设计开始开位码送断码关位码动态显示结束子程序流程图void DS1302_set_time() /设置时间DS1302_write(0x8e,0x00); /关写保护DS1302_write(0x80,0x80); /关时间DS1302_write(0x84,(shi/104)|(shi%10);DS1302_write(0x82,(fen/104)|(fen%10); DS1302_write(0x8e,0x80); /开写

18、保护DS1302_write(0x80,0x00); /关时间3.4按键输入子程序设计开始K4是否按下修改时间K4是否按下修改闹钟时间K4是否按下退出修改等待K4按下K4按下等待K4按下K4按下按键输入子程序流程图void main() DS1302_init(); /调用时钟芯片DS1302的初始化函数 init(); while(1) P0=0x00; /数码管消影DS1302_read_time();/调用读取DS1302时间参数函数if(page=0)display(shi,fen);if(page=1) /调时时间display1(nzshi,nzfen);if(page=2) /调

19、试闹钟display1(naozhongshi,naozhongfen);if(naozhongshi=shi)&(naozhongfen=fen)LED5=0;key(); 3.5闹钟子程序设计void display1(uchar s,uchar f)uchar h,l,m,n;m=s/10; n=s%10; h=f/10;l=f%10; LED1=0; P0=code1m; delay_ms(2);LED1=1;LED2=0; P0=code1n; delay_ms(2);LED2=1;LED3=0; P0=code1h; delay_ms(2);LED3=3;LED4=0; P0=co

20、de1l; delay_ms(2);LED4=1;3.6 TO中断服务程序void timer0(void) interrupt 1 using 3 TH0=(65536-50000)/256;/定时器0重装初值TL0=(65536-50000)%256;count+;if(count=10) /定时时间为t=50ms*20=1sflag=flag;count=0;4.调试程序及电脑时钟基本功能的实现从一开始简单的时钟程序,只能修改时间,没有闹钟,且没有用到STC89C52RC单片机的DS1302芯片,到最后查找资料修改程序,用DS1302芯片实现简单的修改时间、定时、闹铃闪烁这些基本功能,不

21、太容易。最后做出来的电脑时钟还是有一些性能上的缺陷,即使时间大概15秒为一分钟,而且STC89C52RC单片机的四个按键有些不够用,只能ENT键修改模式,在实时时间、修改时间、调节闹钟定时这三个模式间转换。而修改时间和闹钟只能往上加而不能减,比较不方便。且可能是DS1302芯片的原因,数码管显示有一些小问题,隔一段时间或者键按下去的时候会有些显示错乱。这还待改进。三、实训体会在重庆科技学院已经读了两年半了,感触颇深,大一和大二的时候还不怎么觉得累,但是自从大三这第一个学期开了这么多门专业课以后,感觉学习和生活一下子紧张了起来。其中单片机就感觉很难,自己对这个不是很感兴趣,下的精力少,最后的期末

22、考试马马虎虎的及格,等到期末最后两周单片机系统实训的时候感觉非常的恼火,很简单的一个程序甚至一个语句都搞不明白,数字符号所代表的意思也都忘光了,但是实训要做程序的,所以只好算是从头再来了,不会的就翻书或者百度搜索,这样又通过本次实训捡起了不少单片机及C语言方面的知识。并且手拿单片机电路板手把手的操作,通过Keil uvision4软件创建工程,写入程序,通过STC-ISp-15xx-v6.60软件来打开工程里的程序并连接下载至单片机上。操作方面熟练了许多,这些程序也熟练的掌握了一部分,不敢说全部。最令自己感到满意的是单片机电路板电路图的画法,自学并熟练的掌握了画图软件Protel 99 se

23、的基本功能,完全是自己将电路图给画了出来。本来一些原件像四位数码管没有查找到,于是自己新建了一个元件,最后弄在了电路图上。确实掌握了不少,而且做的过程中,同学们互相帮助,认识了许多新的朋友。我认为这次实训非常的有意义,让我们对自己这学期甚至是这大学几年的学习来检验一下,看自己知识联系实际能应用多少。发现并找到自己的不足以及知识上的漏洞,刺激自己及时的改正不足,填补漏洞。参考文献1.王景景.单片机原理及应用.机械工业出版社2.郭勇.Protel 99 se印制电路板设计教程.机械工业出版社3.宋戈.51单片机应用开发范例大全(第二版)人民邮电出版社附录一 电脑时钟电路图附录二 电脑时钟程序#in

24、clude#define uchar unsigned char#define uint unsigned intsbit DS1302_SCLK=P36;/定义时钟芯片DS1302时钟线sbit DS1302_IO=P37;/定义时钟芯片DS1302数据线sbit DS1302_RST=P23;/定义时钟芯片DS1302复位线uchar code110=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;void DS1302_writebyte(uchar writebyte); /往DS1302写一个字节uchar DS1302_readb

25、yte(); /往DS1302读一个字节uchar DS1302_read(uchar DS1302_add); /往DS1302指定地址读数据void DS1302_write(uchar DS1302_add,uchar DS1302_data); /往DS1302指定地址写数据void DS1302_init(); /DS1302初始化函数void DS1302_set_time(); /设置时间 void DS1302_read_time(); /读取时间sbit ACC0=ACC0;sbit ACC7=ACC7;sbit key1=P20;sbit key2=P21;sbit key

26、3=P22;sbit key4=P32;sbit LED1=P24;sbit LED2=P25;sbit LED3=P26;sbit LED4=P27;sbit LED5=P34;/指示灯char shi=23,fen=45,key5=0,flag;char nzshi=0,nzfen=0,page;char naozhongshi=0,naozhongfen=1;uchar count=0;/* DS1302 的 初 始 化 */功能:上电时对时钟芯片DS1302里面的数据全部清零/*/void DS1302_init() /DS1302 的 初 始 化,将所有参数全清零DS1302_wri

27、te(0x8e,0x00); /关写保护DS1302_write(0x80,0x80); /关时间DS1302_write(0x80,0x00);DS1302_write(0x82,0x00);DS1302_write(0x84,0x00);DS1302_write(0x86,0x00);DS1302_write(0x88,0x00);DS1302_write(0x8a,0x00); DS1302_write(0x8c,0x00);DS1302_write(0x80,0x00); /开时间DS1302_write(0x8e,0x80); /开写保护/* DS1302 读 一 个 字 节 */u

28、char DS1302_readByte() uchar i; for(i=8;i0;i-) ACC=ACC1; ACC7=DS1302_IO; DS1302_SCLK=1; DS1302_SCLK=0; return(ACC);/*/* DS1302 写 一 个 字 节 */void DS1302_writeByte(uchar tdata) uchar i; ACC=tdata; for(i=8;i0;i-) DS1302_IO=ACC0; DS1302_SCLK=1; DS1302_SCLK=0; ACC=ACC1; /*/* DS1302 写 操 作 */void DS1302_wri

29、te(uchar tadd,uchar tdata) DS1302_RST=0; DS1302_SCLK=0; DS1302_RST=1; DS1302_writeByte(tadd); DS1302_writeByte(tdata); DS1302_RST=0; DS1302_SCLK=1;/*/* DS1302 读 操 作 */uchar DS1302_read(uchar tadd) uchar tdata; DS1302_RST=0; DS1302_SCLK=0; DS1302_RST=1; DS1302_writeByte(tadd); tdata=DS1302_readByte()

30、; DS1302_RST=0; DS1302_SCLK=1; return(tdata);/*DS1302 设 置 时 间*/功能:对已经调节好的时间参数写到DS1302中/*/void DS1302_set_time() /设置时间DS1302_write(0x8e,0x00); /关写保护DS1302_write(0x80,0x80); /关时间DS1302_write(0x84,(shi/104)|(shi%10);DS1302_write(0x82,(fen/100;i-)for(j=110;j0;j-);void display(uchar s,uchar f)uchar h,l,m

31、,n;m=s4; n=s&0xff; h=f4;l=f&0xff; LED1=0; P0=code1m; delay_ms(2);LED1=1;LED2=0; if(flag=0)P0=code1n|0x80; else P0=code1n; delay_ms(2);LED2=1;LED3=0; P0=code1h; delay_ms(2);LED3=3;LED4=0; P0=code1l; delay_ms(2);LED4=1;void display1(uchar s,uchar f)uchar h,l,m,n;m=s/10; n=s%10; h=f/10;l=f%10; LED1=0;

32、P0=code1m; delay_ms(2);LED1=1;LED2=0; P0=code1n; delay_ms(2);LED2=1;LED3=0; P0=code1h; delay_ms(2);LED3=3;LED4=0; P0=code1l; delay_ms(2);LED4=1;void init() TMOD=0x01;/定时器工作于方式1TH0=(65536-50000)/256;/定时器赋初值(一次定时50ms)TL0=(65536-50000)%256;EA=1; /CPU开中断总允许ET0=1;/开定时中断TR0=1;/启动定时void key() if(key1=0)&(key5=0) /加小时delay_ms(5);if(key1=0) key5=1;if(page=1)nzshi+;if(page=2)naozhongshi+;if(nzshi23)nzshi=0;if(naozhongshi23)naozhongshi=0;shi=nzshi;DS1302_set_time(); /设置时间 if(key2=0)&(key5=0) /加分钟 dela

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号