小型数字系统-定时闹钟说明书
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
XX 学院
课程设计说明书(20XX / 20XX学年第一学期)
课程名称:嵌入式系统设计
题目:定时时钟
专业班级:XXXXXXXXXXXX
学生姓名:XXX
学号:XXXXXXXX
指导教师:XXXXXX
设计周数:2周
设计成绩:
二OXX年X 月XX 日
定时时钟设计说明书
1.选题意义及背景介绍
电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。所以设计一个简易数字电子钟很有必要。本电子钟采用AT89C52单片机为核心,使用12MHz 晶振与单片机AT89C52 相连接,通过软件编程的方法实现以24小时为一个周期,同时8位7段LED数码管显示时间的小时、分钟和秒,并在计时过程中具有整点报时、定时闹钟功能。时钟设有起始状态,时钟显示,设置时钟时,设置时钟分,设置闹钟时和设置闹钟分共六个状态。电子钟设有四个操作按钮:KEY1(MODE)、KEY2(PLUS)、KEY3(MINUS)、KEY4(RESET),对电子钟进行模式切换和设置等操作。
2.1.1方案设计
2.1.2系统流程框图
2.1.3电路设计
(整体电路图)
(已封装的SUB1 内部图)
2.1.4主要代码
1)通过循环实现程序的延时
void delay(uint z) {
uint x, y;
for (x = 0; x for (y = 0; y<110; y++); } 2)通过高低点位切换实现蜂鸣 void beng() { P3 = 0XFF;//高电位 delay(100); P3 = 0X00;//低电位 delay(100); } 3)整点报时及闹钟检测 void alarm() { uint i; //整点报时 if ((second == 0)&(minute == 0)) { for (i = 0; i<10; i++) { beng(); } } //闹钟检测 if ((hour==hour1 && minute==minute1) && (second>=second1 && second for (i=0; i<10; i++){ beng(); } } 4)中断子程序 void time_() interrupt 1 { count++; TH0 = (65536 - 50000) / 256;//0.5ms重新送初值 TL0 = (65536 - 50000) % 256; //定时器计数,定时50ms,count满20,秒加1 if (count == 20) { second++; count = 0; //秒值等于60,秒清零,分加1 if (second == 60) { second = 0; minute++; //分值等于60,分清零,时加1 if (minute == 60) { minute = 0; hour++; //时值等于24,时清零,返回,全部归零 if (hour == 24) { hour = 0; } } } } showArray(); } 4总结体会 本设计为基于单片机的电子钟的设计。刚开始,我们很多地方理不清头绪,无从下手,但通过认真研究设计课题,找书上网查资料,确定基本设计方案,对所用芯片功能进行查找、调试,然后画电路图等,积累了很多宝贵的经验。 本设计用1个八位一体的共阳数码管做为显示器,它显示时间值;设计中有四个按键,其中KEY1模式切换键,KEY2为加控制键,KEY3为减控制键KEY4为复位键。 在此次综合课程设计中,我深刻体会到这个设计不只是单靠学好单片机整个一门课程就可以完成的。我充分体会到了全面发展,软硬件两方面要结合起来才能算是完整的掌握了计算机知识。在制作过程中明显感觉自己的单片机设计知识掌握的不够扎实,编程语言也有待提高。在摸索学习的过程中也是自己提高的过程。课程设计使我深入认识到实践能力对于工科学生学习的重要性,增强了我的动手操作能力,为自己将来的学习积累了宝贵经验。 参考文献 [1] 百度文库,基于C51单片机的程序设计. [2] 百度百科,AT89C52简介 附录:部分程序代码 #include #include #include #define uint unsigned int #define uchar unsigned char sbit KEY1 = P1 ^ 1; //模式切换键 sbit KEY2 = P1 ^ 2; //加1定义 sbit KEY3 = P1 ^ 7; //减1定义 code unsigned char tab[] = { 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0xbf, 0xc8, 0x8e, 0xff, 0x21 }; //段码控制 char code weikong_code[] = { 0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f }; uchar ms[8] = { 2, 2, 10, 4, 0, 0, 1, 14 };