多功能电子钟设计报告--单片机课程设计.docx

上传人:scccc 文档编号:11146334 上传时间:2021-07-05 格式:DOCX 页数:20 大小:121.85KB
返回 下载 相关 举报
多功能电子钟设计报告--单片机课程设计.docx_第1页
第1页 / 共20页
多功能电子钟设计报告--单片机课程设计.docx_第2页
第2页 / 共20页
多功能电子钟设计报告--单片机课程设计.docx_第3页
第3页 / 共20页
多功能电子钟设计报告--单片机课程设计.docx_第4页
第4页 / 共20页
多功能电子钟设计报告--单片机课程设计.docx_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《多功能电子钟设计报告--单片机课程设计.docx》由会员分享,可在线阅读,更多相关《多功能电子钟设计报告--单片机课程设计.docx(20页珍藏版)》请在三一文库上搜索。

1、课 程 设 计 课程名称 单片机课程设计题目名称 多功能电子钟 学生学院 物理与光电工程学院 专业班级 学 号 学生姓名 指导教师 一、 课程设计题目:多功能电子钟二、 设计要求:1)、时钟部分分为三个部分,分别为计时、校时、和定时闹钟。1、计时部分:用T2进行的,T2每10ms溢出一次,每一百秒刷新一次。每60秒就进一,且个位置零。凡是闰年的2月为28天,非闰年为29天,可先定义闰年和非闰年的2月天数。等比较是闰年时就显示相应的天数。2、较时部分:用计数器T2进行溢出计时,按下UP键进入校时状态通过。按F,E,D,C,B可分别在LED上显示年,月,日,小时,分钟,秒和星期。8和5两键是对高位

2、进行调整的,而9和6是对低位年进行调整的。ENTER键为退出。3、定时闹钟:闹钟的实现是通过CONPARE子程序的比较,当所有的时间条件都一样时,闹钟报警。因为设计了32个可报警时间定时,所以系统根据检测到的时间闹钟而分别响应。2)、显示部分: LED数码管显示(动态显示)1、定时/中断的实现:每一次中断/定时只显示一位数码2、设计显示缓冲区:时,分,秒共六位,用六个字节的存储单元。3、查到笔形码。4、采用数码管的动态扫描工作方式,可通过键盘分别选择显示年或者月/日或者时/分或者分/秒。5LED数码管的笔段码0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x8

3、0,0x90,0xbf共阳数码管,代表0-9,以及-。3)、键盘部分在键盘电路中,使用的是54键盘。键盘在源程序中的功能安排如下:、第一次中断判断有无键按下,若有按下则实行定时一次,下一次中断开始扫描。2、键盘的设置键盘表面如图:ENTERESC其中各键设置为:键定义为“设置时间的递增”键。ENTER键定义为“确认”键,即设置完时间后,按此键保存。ESC键定义为“返回”键,即不保存设置,返回正常时间状态。 键定义为“设置时间的递减”键。 F 键定义为“时间翻页”键。按一下,时间就向下依次翻页显示一次,顺序为:年,月/日,时/分,分/秒,星期。E键定义为“校时”键。即可通过此键来设置年,月/日,

4、时/分,分/秒,星期为可调。D 键定义为“闹钟”键,即按此键显示闹钟时间,如果再按时间递增减键,则可调闹钟C 键定义为“闹钟查询”键。即按下此键可以查询闹钟设置,但是不能修改闹钟。 B 键定义为“时间高位/低位切换”键。控制时间递增减键在哪位上设置。键定义为“闹钟确定”键。按下次键即可打开闹钟状态。 4)、系统:MCS-51单片机三、 实际整体系统设计:1)、时钟部分分为三个部分,分别为计时、校时、和定时闹钟。1、计时部分:用T2进行的,T2每10ms溢出一次,每一百秒刷新一次。每60秒就进一,且个位置零。每24小时,天数进一。2、较时部分:用计数器T2进行溢出计时,按下键9 T2停止计时。按

5、键3开始校正时间,校正位闪烁,再次按下键3,移动校正位。键5进行加操作,键8进行减操作。键2确定当前设置时钟,键6退出时间校正。3、定时闹钟:闹钟的实现是通过设置标志位,标志位置位且时间到达闹钟报警。只能设置一个闹钟。2)、显示部分: LED数码管显示(动态显示)1、由8位7段共阳数码管组成,显示时-分-秒,年-月日。2、查到笔形码。3、采用数码管的动态扫描工作方式,可通过键盘分别选择显示时间、日期或者闹钟。4、LED数码管的笔段码0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf共阳数码管,代表0-9,以及-。2)、键盘的设置键盘表面

6、如图:其中各键设置为: 键定义为“查询日期”键定义为“设置完成确认”设置完时间、日期、闹钟之后必须按下此键完成设置。键定义为“设置、移位”,在查询时间、日期、闹钟界面时,按下下此键,每按下一次,设置位移位一位键定义为“查询闹钟”,按下此键可查看当前闹钟。键定义为“设置位数值递增”,在设置时间、日期、闹钟时,可令当前设置位数值加一。键定义为“设置完毕退出键”, 在设置时间、日期、闹钟时,按下此键,重回时钟显示界面。键定义为“启动或禁止闹钟”,在设置闹钟时,按下此键可启动或者禁止当前闹钟。键定义为“设置位数值递减”,在设置时间、日期、闹钟时,可令当前设置位数值减一。键定义为“设置时间”,按下此键,

7、时间停止计数。4)、系统:STM8105s4c6单片机四、 设计方案:1)、程序的流程图主程序初始化定时器以及IO口启动定时显示时间按键处理程序扫描按键分别对三行键盘引脚置低电平,读取列引脚的值,显示闹钟、设置时闹钟设置位闪烁显示日期、设置时日期设置位闪烁显示时间、设置时时间设置位闪烁2)、关键程序介绍(主时钟为系统上电默认时钟2MHz)1、定时器2的初始化void TIM2_Init(void) /*允许自动重裝载*/ TIM2_CR1 |= 0x80; /*设置为2分频*/ TIM2_PSCR |= 0x01; /*计数器初值设置为 0*/ TIM2_CNTRH = 0; TIM2_CNT

8、RL = 0; /*自动重转载寄存器的值为10000,每10ms中断一次*/ TIM2_ARRH = 0x27; TIM2_ARRL = 0x10; /*允许更新中断*/ TIM2_IER |= 0x01; /*使能TIM2*/ TIM2_CR1_CEN = 1; 2、数码管显示/*显示时间*/void Display_Time() uint8_t i; for(i=0;i8;i+) PD_ODR=(0x01i); switch(i) case 0: PB_ODR=blockSec%10; break; case 1: PB_ODR=blockSec/10; break; case 2: PB

9、_ODR=block10; break; case 3: PB_ODR=blockMin%10; break; case 4: PB_ODR=blockMin/10; break; case 5: PB_ODR=block10; break; case 6: PB_ODR=blockHour%10; break; case 7: PB_ODR=blockHour/10; break; Delay_Ms(1); /*不显示当前位时间*/void No_Display_Time(uint8_t w) uint8_t i; for(i=0;i8;i+) PD_ODR=(0x0160) Sec=0;

10、break; case 1:Sec+=10; if(Sec60) Sec=Sec%10; break; case 3:Min+; if(Min60) Min=0; break; case 4:Min+=10; if(Min60) Min=Min%10; break; case 6:Hour+; if(Hour23) Hour=0; break; case 7:Hour+=10; if(Hour23) Hour=Hour%10; break; /*当前校正位减一*/ if(flag=8) switch(x) case 0:Sec-; if(Sec=0) Sec=59; break;case 1:

11、if(Sec/10=0) Sec=60+Sec%10;Sec-=10; break;case 3:Min-; if(Min=0) Min=59; break;case 4:if(Min/10=0) Min=60+Min%10;Min-=10; break;case 6:Hour-; if(Hour=0) Hour=23; break;case 7:if(Hour/10=0) Hour=30+Hour%10; Hour-=10; break; flag=Keyscan(); /*退出时间设置,时钟重新启动*/ TIM2_CR1_CEN = 1; .5、主程序void main() TIM2_In

12、it(); GPIO_Init();TIM4_Init();/*开启中断*/ _asm(rim); while(1) Display_Time(); Process(); if(Hour=Clock_h&Clock_m=Min&Clock_flag) PA_ODR=0x00; 3)、元器件介绍1、STM8105s4(1片):44个引脚,34个GPIO引脚,定时器有TIM1/TIM2/TIM3/TIM4。2、共阳数码管(2个):直插式,4位7段共阳数码管具有12管脚,8根LED段位及4根位选位。3、微动开关(9个):直插式微动开关,引脚两两内部相连。4、8550PNP型三极管(9个):贴片式,低

13、电压,大电流,小信号的PNP型硅三极管。5、电容(若干):主要用于电源滤波。6、电阻(若干):用于限流分压。五、 调试过程:我在调试的时候是分步骤来调试的,最起初我调试数码管能否显示并且实现位选,将程序烧录进去之后发现数码管没有一点反应。数码管不显示可能存在两方面的原因,一是程序上的问题,二是硬件方面的问题,在检查程序没有什么问题时,接着用万用表测量对应引脚的高低电平是否与程序所实现的一致,检测结果表示,程序并不存在问题,所以便沿着对应的走线继续测量,结果发现驱动数码管的三极管不能正常工作,于是重回原理图查看引脚连接是否正确,发觉无误后,到PCB界面查看,发现三极管的封装引脚与自己想想的不一样

14、,于是通过查看三极管的数据手册,最后原来引脚真的错了,因为用的是PCB软件自带的库,所以这种问题出现的可能性很大。在对硬件方面做了改正之后,再次烧录,这次,数码管虽然能够显示,但却无法通过动态扫描实现位选,这次就是程序方面的问题了,在对动态扫描的位选语句进行分析实验,发现确实值这里有问题,PD_ODR=(0x01i),这语句是正确的,但之前错误的语句是PD_ODR=0xfei,我想通过这样让第i个数码管置0,以实现位选,这语句虽让能让第i为置0,但也让i以下的位也置0,因为移位操作时,低位也是自动补0的,自然就不能实现位选了。接下来就是键盘功能的实现,在检测到最后,有一个键不能实现功能,原因是

15、因为画PCB是漏画了一根线,最后给接回去就实现了。至此,显示的数码管,操作的按键都没有硬件上的问题,接下来就是实现数字钟功能的单片机编程了。六、 结论设计的内容基本都实现了,但闹钟部分还没能实现,时间、日期都能显示,并且通过按键进行设置,在设置时设置为也能闪烁。闹钟也还没实现保存32个。七、 问题讨论与总结设计方案虽然能实现部分功能,但依旧还存在一些不足的地方,以及还有一些可以继续改进地的部分。不足:就如上所述,闹钟功能还不能实现,无法储存多个闹钟,这个可以通过外接储存芯片实现,但对于STM8来说,它有足够的内存来储存这些闹钟,所以,可能不用外接储存单元。改进:1、对于供电部分可以用纽扣电池与

16、硬件电路组合在一起,这样就可以不用那么麻烦,在使用时就可以不用再外接电源了。2、在掉电时,可以把当前的时间存储在内存中,下次上电时就可以直接读取掉电是的值,继续计数,这个实现可以外接一个24c02,用IIC读写EEPROM的方式将当前值存到24c02上。3、同时也可以设置预备电源,当掉电时,单片机不停止工作,但数码管等外设不工作,减少损耗,再次上电时,就能够与外部的时钟同步。4、可以再添加一个温度传感器18B20,这样就可以轻易获取周围环境的温度,使该系统具备更多的功能。5、还能在系统上添加红外接收管,通过这样的方式替代键盘实现时间日期等的设置。此次课程设计的感受:整个设计过程来来回回也折腾了

17、两个星期左右,这期间虽然有时候比较烦躁,但最后基本上把这个系统的硬件完成了。最开始我是用电协的开发板来实现功能,打算功能实现之后就按照原理图把电路画出来再做成PCB。一开始在用STM8实现数码管的位选就花了相当长的时间,这一点真令我有点受挫,最后查来查去是引脚太混乱了, 51转STM8的转接板把我弄得晕头转向,引脚老师对不上号。原本是打算用库来编写的,但最后因为这个原因,不得不回到寄存器操作来。在设置时间日期那部分,对于如何让设置位闪烁我也思考了好久,最后是通过两个循环实现亮灭的。在程序实现了时间正常的功能之后,便开始做硬件电路,做电路办事,我就觉得STM8105的引脚有44根而实际上用不了这

18、么多,所以在实现数码管的位选那部分,我决定抛弃低啊写开发板通过595传入并出的串行移位寄存器来扩展IO引脚,而是直接使用整一组PD口来实现,这样就显得容易一些了。所以,原来写得差不多的程序又必须进行大面积修改,但修改对于刚开始的按要求编写就来的容易了。电路的制作也大概花了两天的功夫在制作调试,看上去并不复杂,但实际上会费了不少时间。经过不断地编写代码,修改代码,调试程序,一路下来,基本的功能都可以实现了。对于理工科的我们来说,动手能力是至高无上的,而整个过程我才发觉我严重缺乏实践,以至于这样简单的电路、程序还要花这么多时间,而且功能也不尽完善。这次课设也是给我机会去多动手,多实践,只有通过实践才能知道自己真正掌握了多少知识,才。能更加熟练地将理论转换成实践的东西。整个过程,得到了不少教训:尽信书不如无书;读万卷书不如行万里路,只有亲自动手,才知道是否真那样。只有通过实践,你才能知道自己有多大的能力。八、 参考文献1、STM8S系列单片机原理与应用潘永雄著2、STM8S105xx数据手册3、STM8技术参考手册4、风驰电子STM8历程与教程(网页)http:/ 附原理图19

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

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


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