单片机应用系统设计课程设计日历时钟.doc

上传人:土8路 文档编号:9965746 上传时间:2021-04-07 格式:DOC 页数:54 大小:372.50KB
返回 下载 相关 举报
单片机应用系统设计课程设计日历时钟.doc_第1页
第1页 / 共54页
单片机应用系统设计课程设计日历时钟.doc_第2页
第2页 / 共54页
单片机应用系统设计课程设计日历时钟.doc_第3页
第3页 / 共54页
单片机应用系统设计课程设计日历时钟.doc_第4页
第4页 / 共54页
单片机应用系统设计课程设计日历时钟.doc_第5页
第5页 / 共54页
点击查看更多>>
资源描述

《单片机应用系统设计课程设计日历时钟.doc》由会员分享,可在线阅读,更多相关《单片机应用系统设计课程设计日历时钟.doc(54页珍藏版)》请在三一文库上搜索。

1、课 程 设 计 任 务 书题 目 单片机应用系统设计 学 院 信息学院 专 业 电气工程及自动化 班 级 10电气升本 学生姓名 陈 慧 学 号 103040002 7 月 日至 7 月 日 共 2 周 年 月 日一、设计内容及要求必做实验内容: 1.使用中文液晶128x64点阵LCD,采用16点阵字库显示当前时间“时时:分分:秒秒” 2.用4个按键设置现在时间:K1进入设置现在时间;K2调整小时;K3调整分;K4设置完成。3.增加闹铃功能,时间到了使用音乐声可选实验内容:4.增加闹铃功能, 时间到发出声响并启动继电器5.增加秒表计数功能,精度为0.01秒6.增加万年历显示“年月日”课程设计要

2、求方案设计前要求完成设计报告,每个组一份;方案实施过程中完善设计报告,每个成员独立进行;方案实施结束,经过指导老师验收后完成设计报告,每个成员独立完成,其中设计图纸每个组只需要1份。二、设计原始资料单片机原理及应用教程 范立南 2006年 1月单片机原理及应用教程 刘瑞新 2003年07月五、主要参考资料单片机的C语言应用程序设计 北京航空航天大学出版社C8051F02器件手册S3530器件手册四、进程安排教学内容 学时 地点资料查阅与学习讨论 1天 单片机实验室分散设计 5天 单片机实验室编写报告 3天 单片机实验室成果验收 1天 单片机实验室 指导老师成绩答辩小组成绩总成绩(单片机应用系统

3、设计 )课程设计说明书学 院: 信息学院 班 级: 10电气升本 学生姓名: 陈慧 学号 103040002 指导教师: 时间: 2011年 月 日 到 2011 年 月 日摘要 本设计涉及到C8051F020芯片、LCD12864液晶显示、按键电路和复位电路等,主要用THGQC-1型实验设备实现日历时钟实现显示年月日时分秒。 本设计基于C8051F020芯片,通过上网、图书馆借书查资料了解了C8051F020芯片、LCD的功能及应用,进行编写C语言,并在THGQC-1型实验设备最终实现日历时钟的设计。 关键字:C8051F020、THGQC-1、LCD12864目录一、概述11、选题背景12

4、、设计项目内容介绍1二、硬件电路图及说明31、硬件电路图32、器件简介3三、软件流程图及说明7四、设计特点16五、调试17六、总结及体会19八、附录20九、使用说明书21十、程序及简单注解22一、 概述1、选题背景在实时监控系统的设计中,要实时监测各个控制信号,更重要的是在发生故障时能准确记录故障数据,以便准确分析排除错误。监控系统中一般都要定时采集现场数据,对某些重要的信息不仅要记录其内容,还要记录下该信息发生的准确时间,所记录的实时时间信息应长期保存,因此需要实时时钟来实现。常用的单片机没有实时时钟,若需采用定时器实现,一旦系统掉电,时钟就不能运行,这是实时监控系统不允许的,而采用独立运行

5、的实时时钟便可实现。但一般的时钟芯片在系统掉电时,其数据也会丢失,需提供备用电池。而时钟芯片DS12887在系统掉电时数据不丢失,广泛应用于测量和控制系统。因此,这里给出了实时时钟DS12887在单片机应用系统中的应用。2、实验要求必做实验内容: 1.使用中文液晶128x64点阵LCD,采用16点阵字库显示当前时间“时时:分分:秒秒” 2.用4个按键设置现在时间:K1进入设置日期;(K11)时 钟 09年 06月24日 22时33分24秒 K2调整 年;K3调整 月;K4调整 日。K1进入设置现在时间;(K12)K2调整 小时 ;K3调整 分 ;K4调整 秒。K1设置完成(K13)增加闹铃功能

6、,时间到了使用音乐声(指示灯闪动10秒)可选实验内容增加闹铃功能, 三次闹铃增加秒表计数功能,精度为0.01秒 0.00200.00 增加万年历显示“年月日” 二月 28天、29天增加星期显示增加整点闹铃 指示灯闪动5次增加整点闹铃开关秒表反字 小图形 被设置的数字闪动,其他自己认为可添加的内容课程设计要求方案设计前要求完成设计报告,每个组一份;方案实施过程中完善设计报告,每个成员独立进行;方案实施结束,经过指导老师验收后完成设计报告,每个成员独立完成,其中设计图纸每个组只需要1份。 二、硬件电路图及说明1、硬件电路图 LCD时钟控制系统利用C8051F020芯片作为控制中心,配合液晶显示12

7、8*64液晶显示模块 、独立式键盘模块、实时时钟/日历芯片模块等电路,实现日历时钟实现显示年月日时分秒。总体设计方框图如图1所示: 图12、器件简介微控制器C8051F020C8051F020器件是完全集成的混合信号系统级MCU 芯片,具有64 个数字I/O 引脚(C8051F020/2)或32 个数字I/O 引脚(C8051F021/3)。下面列出了一些主要特性: 高速、流水线结构的8051 兼容的CIP-51 内核(可达25MIPS) 全速、非侵入式的在系统调试接口(片内) 真正12 位(C8051F020/1)或10 位(C8051F022/3)、 100 ksps 的8 通道ADC,带

8、PGA和模拟多路开关 真正8 位500 ksps 的ADC,带PGA 和8 通道模拟多路开关 两个12 位DAC,具有可编程数据更新方式 64K 字节可在系统编程的FLASH 存储器 4352(4096+256)字节的片内RAM 可寻址64K 字节地址空间的外部数据存储器接口 硬件实现的SPI、SMBus/ I2C 和两个UART 串行接口 5 个通用的16 位定时器 具有5 个捕捉/比较模块的可编程计数器/定时器阵列 片内看门狗定时器、VDD 监视器和温度传感器 2、液晶显示实验本实验系统使用内置12864点阵液晶屏。它由两片带控制器的列驱动电路KS0108和一片行驱动电路KS0107组成,

9、另外还附加负压发生电路,显示由一片128*64点的液晶片组成。KS0108将显示区分为左右半屏,整个屏从上至下64行分为8页,每页8行,页地址范围为:0B8H-0BFH。列地址范围为:40H-7FH。数据为纵向读写,即每页的第一行对应D0,第八行对应D7。左右半屏由CS1、CS2选择。控制器KS0108的指令相当简单,总共7条指令:显示开关设定(3EH/3FH),显示起始行设定(C0HFFH),页地址设定(B0HBFH),列地址设定(40H7FH),状态读取,写数据,读数据。12864接口定义及其与C8051F020的接口:引脚及内部结构如图2所示: 图2 液晶显示电路 3、按键电路K1连接P

10、3.0口,K2连接P3.1口, K3;连接P3.2口, K4连接P3.3口 键盘是由若干按键组成的开关矩阵,它是微型计算机最常用的输入设备,用户可以通过键盘向计算机输入指令、地址和数据。一般单片机系统中采和非编码键盘,非编码键盘是由软件来识别键盘上的闭合键,它具有结构简单,使用灵活等特点,因此被广泛应用于单片机系统。按键开关的抖动问题,键盘与单片机的连接组成键盘的按键有触点式和非触点式两种,单片机中应用的一般是由机械触点构成的。当开关S未被按下时,P3.0输入为高电平,S闭合后,P3.0输入为低电平。而按键会有抖动现象,因此必须考虑如何去除抖动,常用的去抖动的方法有两种:硬件方法和软件方法。单

11、片机中常用软件法。软件法其实很简单,就是在单片机获得P3.0口为低的信息后,不是立即认定S1已被按下,而是延时10毫秒或更长一些时间后再次检测P3.0口,如果仍为低,说明S1的确按下了,这实际上是避开了按键按下时的抖动时间。而在检测到按键释放后(P3.0为高)再延时5-10个毫秒,消除后沿的抖动,然后再对键值处理。本次实验去抖动采用软件方式。四个按键分别接到P3.1 、P3.2、P3.3和P3.4。对于这种键各程序可以采用不断查询的方法,功能就是:检测是否有键闭合,如有键闭合,则去除键抖动,判断键号并转入相应的键处理。4、实时时钟芯片 S-3530AS-3530是一款低功耗的CMOS实时时钟/

12、日历芯片,它提供二个中断输出和掉电检测器,所有的地址和数据通过I2C总线接口串行传递。最大总线速度为400Kbits/s,每次读写数据后,内嵌的字地址寄存器会自动增加。(1)器件特性:l 低工作电流:典型值为0.7A(VDD=3.0V);l 世纪标志;l 大工作电压范围:1.05.5V;l BCD码设置时间参数l 低休眠电流;典型值为0.25A(VDD=1.85.5V时);l 稳压电路l 报警和定时器;l 掉电检测器;l 内部集成的振荡器电容;l I2C总线从地址:读:0A3H;写:0A2H;三、电路与程序设计1、程序流程图主程序:开始 关看门狗程序初始化系统时钟初始化定时器1开中断调用函数T

13、estI2C()结束子程序TestI2C():开始读取3530数据时间赋初值将初值读入3530清屏在16,0处显示05年01月01日, 在16,2处显示00时00分00秒读取3530数据调用函数set_value()分为0且秒小于11Y整点报时LED灯闪烁调用函数alarm_check()刷新显示时分秒,刷新显示年月日Nmiaobiao_on为偶且不为0Y显示秒表miaobiao_on为0Y显示星期延时100ms设置flag1标志位为1按键判断程序set_value():根据设计原则,判断按键并作出相应反应. 开始 读取按键值有键按下且flag1=1flag=0 按下的键为K1 flag=1;

14、 key2=1; flag1=0;在(112,0)显示“年”按下的键为K2flag=3; flag1=0;在(112,0)显示“闹”按下的键为K3 flag=7; miaobiao_on=1; flag1=0; 在(16,4)显示“秒表: XXX:XX”flag=1按下的键为K1flag=2; key2=1; flag1=0;在(112,0)显示“时” 按下的键为K2 key2+;flag1=0; key2=2 在(112,0)显示“月” key2=3 在(112,0)显示“日”按下的键为K3 key2=1 年加1,星期根据平年闰年加1或2将数据读入3530 更新星期和年的显示 flag1=0

15、; key2=2月加1,星期根据月的日期增加将数据读入3530更新星期和月的显示 flag1=0; key2=3 月加1,星期根据月的日期增加 将数据读入3530 更新星期和月的显示 flag1=0; 按下的键为K4 退出时钟设置 flag=0; flag1=0; key2=0; 清除提示字符 flag=2 按下的键为K1 退出时钟设置 flag=0;flag1=0;key2=0; 清除提示字符 按下的键为K2 key2+;flag1=0; key2=2 在(112,0)显示分 key2=3 在(112,0)显示秒 按下的键为K3 key2=1 时加1 将更改的数据读入3530 刷新显示时,f

16、lag1=0; key2=2 分加1 将更改的数据读入3530 刷新显示分,flag1=0; key2=3 秒加1将更改的数据读入3530 刷新显示秒,flag1=0; 按下的键为K4退出时钟设置flag=0; flag1=0; key2=0;清楚提示字符flag=3按下的键为K2alarm_num不等于0flag=4; flag1=0;在(00,6)显示“1”在(64,6) 显示第一个闹钟设置时间flag=0;flag1=0;退出闹钟功能,清除提示字符按下的键为K3alarm_num1flag=5; 在(00,6)显示2在(64,6) 显示第二个闹钟设置时间flag1=0;开闹钟在(112,

17、6)显示“开”flag=0; flag1=0;退出闹钟设置,清楚提示字符按下的键为K3闹钟1的时加1,刷新显示闹钟时间,flag1=0;按下的键为K4闹钟1的秒加1,刷新显示闹钟时间,flag1=0;flag=5按下的键为K2alarm_num2flag=6; 在(00,6)显示3在(64,6) 显示第二个闹钟设置时间flag1=0;开闹钟在(112,6)显示“开”flag=0; flag1=0;退出闹钟设置,清楚提示字符按下的键为K3闹钟1的时加1,刷新显示闹钟时间,flag1=0;按下的键为K4闹钟1的秒加1,刷新显示闹钟时间,flag1=0;flag=6按下的键为K1按下的键为K2按下的

18、键为K3按下的键为K4flag=7按下的键为K1按下的键为K2按下的键为K3按下的键为K4闹钟判断程序alarm_check():判断闹钟是否开,根据闹钟开启数量判断是否到设定时间,若到,则启动LED灯闪 五.设计特点:1.该时钟由四个按键控制,按键功能分明:K1进入时间设置,K2进入闹钟设置,K3进入秒表控制。2.秒表采用定时器中断控制,计时精确。K3一次进入秒表。K3两次开始计时。K3三次计时停止。K4退出秒表。3.显示页面结构清晰,功能明确。平时若无设置,则只显示年月日,时分秒以及星期4.进入设置后会出现一些提示字符,表述明了。六.调试:1.主循环程序流程实验初期,原来的流程是测试按键,

19、完成所有操作后再刷新显示,进入主循环,但是,这样在测试按键,等待操作时会造成较大的延时。因此该方案未录取。最后采用的方案是:检测到一次按键,就更改flag和flag1标志位,记录按键次序后就进入主循环,然后继续检测有无按键操作,这样对于程序就基本不会造成延时,而且程序的流程也更清晰。关于标志位:flag用来记录之前按键次数和次序flag=0表示之前无按键操作flag=1表示K1按一下flag=2表示K1按两下flag=3表示K2按一下flag=4表示K2按两下flag=5表示K2按三下flag=6表示K2按四下flag=7表示K3按一下flag1表示之前有无按键按下flag1=1,表示无按键,

20、flag1=0,表示已有按键按下过。2.关于3530读出数据的更改遇到的具体问题:时间设置时,10以下的都能正确显示,两位数的就不会正确显示。在设置“时”时,只能加到12,而程序中的时钟为24小时制,所以不正确。原因:3530中读出的数据格式为BCD码,而程序中修改则按照16进制进行。所以会有数据错误。解决方法:在设置时钟时间时,要先读出3530数据,更改后再读入3530中,而3530中的数据存放为BCD码,读出后并不表示时间的真实数据,因此,我编写了两个转化函数:change()将16进制转化为BCD码fchange()将BCD码转化为16进制读出数据后先将其转化为16进制,进行操作后再转化

21、为BCD码,读入3530数据更改中,因为“时”的数据表示只需低4位和高4位中的低两位,所以最高2位中会有一些脏数据,在读出后应先与上0x3f再进行转化操作。3.秒表设置秒表采用定时器1,初值为(65536-18432),并利用一个计数变量miaobiao,初值为10,中断中重新赋初值,每次中断miaobiao减1,减至0时,秒表计数变量加1,miaobiao重新赋值为10!遇到的具体问题:在运行时,显示屏幕卡屏。只要一运行秒表程序,很快就会使程序卡在某一点。原因:在原来的中断程序中还有加入显示代码,造成在运行时,显示屏幕卡屏。因为屏幕中显示的时间和秒表分别由两个计数器控制,在刷新时因为计数器冲

22、突而造成了卡屏的现象。那是因为屏幕中显示的时间和秒表分别由两个计数器控制,在刷新时因为计数器冲突而造成了卡屏的现象。更改方法:将中断程序中的显示代码取出,直接放在主循环程序中,这样就能顺利运行了。4.关于时间的设置在时间设置时遇到的问题基本上是因为考虑的不够周全,刚开始时,没考虑到闰年,大小月等情况,因此,闰年的二月不能调出29号,大小月也不能区别,遇到这个问题后就开始更改程序的细节问题,使得设置时间时所有的日子都能设置出。要考虑的设置:年有闰年,平年,月有大小月,星期要随着年,月,日的更改而更改。5.在设计秒表时,定时器1的主要程序放在main.c文件中,而一些显示程序则在I2C.c文件中,

23、因此,在调用这些变量时就会出现编译错误。为解决该现象,我在main.c文件中先编写了一个小的调用显示程序,在需要显示时再调用该程序,就解决了变量调用问题。七.总结及体会:信息技术是当今世界发展最快、渗透性最强、应用最广的关键技术,是推动经济增长和知识传播的重要引擎。在我国,随着国家信息化发展战略的贯彻实施,信息化建设已经进入了全方位、多层次推进应用的新阶段。现在,掌握计算机技术已成为二十一世纪人才应具备的基本素质之一。 单片机作为我们的主要专业课之一,虽然在大三开学初我对这门课并没有什么兴趣,觉得那些程序枯燥乏味,但在这次课程设计后我发现自己在一点一滴的努力中对单片机的兴趣也在逐渐增加。这次课

24、程设计历时两个星期,经过这些天的实践和体验下来,我们学到了不仅是知识更多的学会的是团队协作。现在想来,也许学校安排这次课程设计又烫而更深的意义吧,它不仅综合理论知识来运用到创新和设计,还让我们知道了团队的合作。两个星期前我们还为这次课程设计发愁,我们需要了解很多我们在课本上没学到的知识,比如说LCD的应用 、以及DS1302芯片的用法,我们通过上网和图书馆查资料并在老师细心的指导下,完成了这次设计,感谢老师的辛勤指导。 在做本次课程设计的过程中,我感触最深的当属查阅大量设计资料了。为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。在这两星期的时间里,我们经历从迷茫

25、到清晰的全过程,我认识到做课程设计,必须做到,首先要分析好自己的设计目的及要求,在设计程序前不能妄想一蹴而就要有一个清晰的思路和一个完整的流程图,学会单步调试来找错误,设计过程,好比是人类成长的过程,常有一些不如意和挫折,在课程设计中我们难免遇到各种困难我们通过交流查资料自学解决了一些问题,若遇到搞不明白的问题就请教老师,我们经历了不少艰辛,收获同样巨大。通过这次课程设计,我也发现了自身存在的很多不足之处,虽然理论知识感觉掌握了,但在运用实践过程中仍有意想不到的困惑,进过一番努力才得以解决。我想这将对我以后的学习产生积极的影响。通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重

26、要性,学会了坚持、耐心和努力,这将为自己今后的学习和工作作出了最好的榜样。再次感谢老师的热心指导,没有老师的指导我们不可能完成。There is a will,there is a way.有志者事竟成。八.附录:本次实验参考书籍资料: 单片机的C语言应用程序设计 北京航空航天大学出版社C8051F02器件手册S3530器件手册九.使用说明书:该产品为电子时钟,能显示年月日,时分秒及星期,有秒表功能,闹钟功能(注1),会进行整点报时,有四个按键控制功能的选择使用,下文中分别称为K1,K2,K3,K4XX年XX月XX日 XXXX时XX分XX秒 星期X按键说明:K1:进入时间设置 K1按一次,设置

27、年月日 K1按两次,设置时分秒 K2移位,K3加1,K4退出 K1按三次,退出设置如右图,在时间设置时,屏幕右上角会根据按键操作而出现“时”“分”“秒”“年”“月”“日”提示当前操作的作用对象。K2:进入闹钟设置XX年XX月XX日 XXXX时XX分XX秒 星期XK3选择开闹钟的次数(0-3),若开的闹钟个数为零则表示闹钟关闭 K2 进入闹钟时间设置,K3时加,K4分加 再按K2退出闹钟操作界面如右图:右上角会出现“闹”提示字。最下一行显示 当前设置闹钟时间,闹钟次数,及闹钟开关状况。XX年XX月XX日 XX时XX分XX秒 秒表: XXX:XXK3:开启秒表 K3开始/停止计时 K4 退出秒表.

28、秒表界面:注1:闹钟功能,本产品闹钟最多能设置3个不同时间,可选择开闹钟的次数,例如,若选择次数为1时,则只会对闹钟一设置的时间作出反应(LED灯闪),次数为2时,则对前两个闹钟设定时间作出反应,因此,建议将常用的闹钟时间设在前面.十.程序及简单注释:main.c#include c8051f020.h #include void Delay1us(unsigned char us)while (us) _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); -us;void SYSCLK_Init (void) int i; / delay counter

29、OSCXCN = 0x65; / start external oscillator with / 18.432MHz crystal for (i=0; i 256; i+) ; / Wait for osc. to start up while (!(OSCXCN & 0x80) ; / Wait for crystal osc. to settle OSCICN = 0x88; / select external oscillator as SYSCLK / source and enable missing clock / detector#define PRT0CF P0MDOUT#

30、define PRT1CF P1MDOUT#define PRT2CF P2MDOUTvoid PORT_Init (void) XBR0 = 0x07; / Enable SMBus, SPI0, and UART0 XBR2 = 0x40; / Enable crossbar and weak pull-ups EMI0TC = 0x21; EMI0CF = 0x2f; / EMIF端口接到P4P7,选择复用方式,工作模式为不带块选择。 P74OUT = 0x3F; P0MDOUT = 0x00; P1MDOUT |= 0x1f; /P1.2-P1.5推挽输出 void SPI0_Init

31、 (void) SPI0CFG = 0x03; / data sampled on 1st SCK rising edge / 8-bit data words SPI0CFG|=0xC0;/CKPOL =1; SPI0CN = 0x03; / Master mode; SPI enabled; flags / cleared SPI0CKR = SYSCLK/2/8000000-1; / SPI clock 8; / set Timer0 to overflow in 1ms TL0 = -SYSCLK/1000; TR0 = 1; / START Timer0 IE|= 0xa; void

32、 Timer0_ISR (void) interrupt 1 /1msTH0 = (-SYSCLK/1000) 8; TL0 = -SYSCLK/1000;if (Count1ms) Count1ms-;void Timer1_Init (void) CKCON|=0x18; TMOD|=0x11; /16Bitmiaobiao=10; TR1 = 0; / STOP Timer0 TH1 = (65535-18432)8; / set Timer0 to overflow in 1ms TL1 = 65535-18432; TR1 = 1; / START Timer0 IE|= 0xa;

33、void Timer1_ISR (void) interrupt 3 /1msTH1 = (65535-18434)8; TL1 = 65535-18434;if(miaobiao) miaobiao-;elsemiaoll=fchange(miaoll);miaol=fchange(miaol);miaoh=fchange(miaoh);miaoll+;if(miaoll99)miaol+;miaoll=0;if(miaol99)miaoh+;miaol=0;miaoll=change(miaoll);miaol=change(miaol);miaoh=change(miaoh);miaob

34、iao=10;void disp(void) /显示秒表LCD_DispChar(64,4,miaoh&0x0f);LCD_DispChar(72,4,(miaol4)&0x0f);LCD_DispChar(80,4,miaol&0x0f);LCD_DispChar(88,4,0x0a);LCD_DispChar(96,4,(miaoll4)&0x0f);LCD_DispChar(104,4,miaoll&0x0f);void clear_m(void) /清除秒表读数miaoll=0;miaol=0;miaoh=0;void Delay1ms(unsigned char T)Count1ms

35、=T;while (Count1ms);void Delay1s(unsigned char T)while (T)Delay1ms(200);Delay1ms(200);Delay1ms(200);Delay1ms(200);Delay1ms(200);T-;void TestLCD(void);void TestI2C (void);void main (void) WDTCN = 0xde;WDTCN = 0xad; /关看门狗SYSCLK_Init (); /初始化时钟Timer0_Init();/初始化定时器PORT_Init (); /初始化IO口IP=0x04;EA=1;/开中断TestI2C();I2c.c#include

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

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1