单片机课程设计报告-定时闹钟.doc

上传人:李主任 文档编号:3262695 上传时间:2019-08-06 格式:DOC 页数:20 大小:396.02KB
返回 下载 相关 举报
单片机课程设计报告-定时闹钟.doc_第1页
第1页 / 共20页
单片机课程设计报告-定时闹钟.doc_第2页
第2页 / 共20页
单片机课程设计报告-定时闹钟.doc_第3页
第3页 / 共20页
单片机课程设计报告-定时闹钟.doc_第4页
第4页 / 共20页
单片机课程设计报告-定时闹钟.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

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

1、单片机课程设计报告计算机与信息学院题目:定时闹钟专业:通信工程姓名:学号:0862310307指导老师:完成时间:2010-12-08学校名称:河海大学(常州校区)摘 要本课程设计是定时闹钟的设计,以AT89C51单片机为核心,配备液晶显示模块、时钟芯片等功能模块。利用动态数码管作为显示器,K25-K27作为输入按键,蜂鸣器作为声音输出。课设的核心主要是硬件设计和软件编程两大方面。硬件电路设计主要包括中央处理单元电路、时钟电路、人机接口电路、信号处理电路、执行电路等。软件编程用C语言来实现,主要包括主程序、显示字函数、键盘扫描程序、闹铃字程序、串口发送等软件模块。基本实现以下功能:正确显示时分

2、;可以利用按钮调整时间和设定闹钟时间;当时间到达设定的时间时,蜂鸣器发出滴、滴、滴的报警声;通过串口在PC机上设定时间和闹钟。关键词:单片机 定时 显示目 录1、概述.31.1 课程设计的目的和意义.31.2 课程设计的要求.32、系统设计.42.1硬件设计.42.2软件设计.63、实验结果与讨论.74、结论.74.1课程设计的特点及贡献.74.2自我体会.85、参考文献.96、附录.9.硬件电路说明.9.软件程序清单及说明.11.实物照片.20 1、概述1.1 课程设计的目的和意义 课程设计是在学完单片机原理及接口技术课程之后综合利用所学单片机知识完成一个单片机应用系统设计并在实验室实现,从

3、而加深对单片机 软硬知识的理解,获得初步的应用经验,为走出校门从事单片机应用的相关工作打下基础。1.2课程设计的要求 (1)、正确显示时分;(2)、可以利用按钮调整时间和设定闹钟时间;(3)、当时间到达设定的时间时,蜂鸣器发出滴、滴、滴的报警声;(4)、通过串口在PC机上设定时间和闹钟。2、系统设计2.1硬件设计该定时闹钟是以单片机AT89C51为核心来完成的,在硬件电路中采用P2口作为LED数码管的驱动接口,这是由于P2口的驱动能力强,故只需外接上拉电阻便可以把LED数码管点亮。在LED显示时,为了简化电路,降低成本,LED数码管的位选线分别由相应的P2. 5P2. 7控制,而将其相应的段选

4、线并联在一起,由一个8位的I/O口控制,即P2口。在电路中还设有三个按键K1、K2和K3用来进行定时、选时和调时的选择,他们分别与单片机的P2.5、P2.6、P2.7口相连接。扬声器RD,定时时间到时会发出滴、滴、滴的声音。XTAL1口和XTAL2口与12MHZ晶振相连,并设有上电+按钮复位电路。 时钟电路设计:MCS-51内部有一个用于构成振荡器的高增益反相放大器,此放大器的输入和输出分别是引脚XTAL1、XTAL2,在XTAL1和XTAL2上外接时钟源即可构成时钟电路。单片机的生产工艺不同,时钟的产生方式也不同,有内部和外部两种时钟产生方式,本次设计采用内部方式的外部时钟源接法。(a)单片

5、机外部振荡方式接法 (b)单片机外部振荡方式接法复位的方式及电路设计:MCS-51单片机通常采用上电自动复位、按钮电平复位、外部脉冲复位、上电+按钮电平复位、程序运行监视复位等方式。在实际的生产制造中多需复位,以保证在出现死机时可以恢复程序正常运行,此次设计采用上电+按钮电平复位,此种复位方式的好处是可以随时使电路复位。单片机加上适当的外围器件和应用程序,构成的应用系统称为最小系统。将C51单片机接上时钟电路和复位电路以及扩展的简单I/O口即可构成单片机的最小应用系统,它是单片机应用系统的设计基础。2.2软件设计合理的软件结构是设计出一个性能优良的单片机应用系统的基础,根据系统的定义,可以把整

6、个工作分解为若干个相对独立的操作,采用模块化的设计方法,它具有便于设计和调试、容易完成、可供多个程序共享等优点。该设计可以把整个源程序大致划分为:主程序main()、延时函数delay()、初始化函数init()、显示时间函数display()、显示定时函数display_1()、键盘扫描程序key_scan()、加1子函数jia()、减1子函数jian()、闹铃子程序clock()、定时器0中断服务程序time0()、串口发送sint()等。具体源程序详见附录。3、实验结果与讨论一开始我们把最初的程序烧写入实验箱后,通过按键调整时间,当时间到达设定的时间时,蜂鸣器发出滴的报警声,且持续0.5

7、分钟,这与课设要求蜂鸣器发出滴、滴、滴的报警声不符,故程序设计时采用了“响-停-响-停-响”每次持续30秒的思想,从而达到设计要求。调节按键K1,显示99,表示可以调节时间时分的数值,显示88,表示可以调节闹钟时分的数值。调节按键K2可使数值加1,按键K3可使数值减1。课设提高部分要求通过串口在PC机上设定时间和闹钟,这部分对我们来说有点难度,通过参考单片机实验三和课本9.4串口程序设计,我们不断地尝试改进,最终实现了通过串口在PC机上设定时间和闹钟的提高功能,即在串口调试助手上发送16171618(十六进制),则数码管会显示时间为22:23,定时时间为22:24。4、结论4.1课程设计的特点

8、及贡献单片机是一门应用性很强的学科,课程设计是培养我们综合运用所学知识发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对我们实际工作能力的具体训练和考察过程。我们在理论学习的基础之上,通过完成一小系统的设计,不但能够把课堂上学习的理论知识与实践应用结合起来,而且能够对电子电路、电子元件等方面的知识进一步加深认识,同时在相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能够独立进行某些传感器应用系统的开发设计工作打下一定的基础。4.2自我体会在做课程设计之前,我们已经系统的学习过单片机这门课程,但是在刚拿到设计任务书时还是不知该从哪里下手,完成课设要求还是有一定难度。我们充分利

9、用两周时间,经过老师帮助、同学讨论和网络查询,基本上实现了定时闹钟的功能。这两周的大部分时间都在研究程序的理解与程序的调试运行,在这个过程中加深了我对单片机中定时的理解,而且也更加了解到软硬件配套的重要性。在设计的过程中不仅巩固了以前所学过的知识,加深了我对所学知识的理解,而且学到了很多在书本上所没有的知识。通过这次课程设计使我懂得了理论与实际相结合的重要性,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,才能提高自己的实际动手能力和独立思考的能力。此外,通过这次课程设计不仅使我巩固了本课程所学的基本知识,还使我具有了撰写科研报告的初步训练能力,我相信这些能力在我以后的学习甚至

10、工作中都会起到不小的作用。5、参考文献1 余发山.单片机原理及应用技术. 徐州:中国矿业大学出版社,20022康华光.数字电子技术. 北京: 高等教育出版社,20033吴金戌.8051单片机实践与应用. 北京: 清华大学出版社,20034楼然苗.51系列单片机设计实例. 北京: 北京航空航天出版社,20045黄仁欣.单片机原理及应用技术. 北京: 清华大学出版社, 20056方华.MCS-51单片机原理及设计. 重庆: 重庆大学出版社, 20057田希晖、薛亮儒.C51单片机技术教程.北京:人民邮电出版社,2007 6、附录.硬件电路说明1、单片机AT89C51:一种低功耗、高性能的CMOS型

11、8位单片机。片内带有4KB的Flash存储器,且允许在系统内改写或用编程器编程。另外, AT89C51的指令系统和引脚与8051完全兼容,片内有128B 的RAM、32条I/O口线、2个16位定时计数器、5个中断源、一个全双工串行口等。2、LED数码管为共阴极:3、P2口内部结构图:.软件程序清单及说明1、源程序:#include /头文件#include#define uchar unsigned char/宏定义#define uint unsigned int#define fmq RDsbit key1=P25; /位声明sbit key2=P26;sbit key3=P27;ucha

12、r code table=0x3f,0x06,0x5b,/数码管显示的数值0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0xbf,0x86,0xdb,/带小数点的数值0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef;void jia(); /函数声明void jian();uchar table_16; /定义数组,数组内含有6个数值uchar table_26;uchar shi=23,fen=59,miao=50; /显示初始值uchar shi1,fen1,miao1,shi2,fen2,miao2;/定义全局变量uchar flag

13、,flag1,flag2,cnt,count;/定义全局变量void delay(uchar i) /延时函数,用于动态扫描数码管 uchar x,y; for(x=i;x0;x-) for(y=110;y0;y-);void init() /初始化函数 TMOD=0X21; /工作方式1 TH0=(65536-50000)/256; /定时时间为:50ms TL0=(65536-50000)%256; ET0=1; /打开定时器 EA=1; /开总中断 TR0=1; /启动定时器 TL1=0xfd; TH1=0xfd; SCON=0x50; PCON=0x00; TR1=1; ES=1;vo

14、id display() /显示子函数,用于显示时间数值 uchar i,j; table_10=miao%10; /分离秒的各位与十位 table_11=miao/10; table_12=fen%10+11; /分离分的各位与十位 table_13=fen/10; table_14=shi%10+11; /分离时的各位与十位 table_15=shi/10; j=0x7f; /从秒到时的扫描 for(i=2;i6;i+) P2=j; P0=tabletable_1i;/显示数值 delay(10); j=_cror_(j,1);/循环右移 void display_1() /显示子函数,用

15、于显示定时时间 uchar i,j; table_20=miao2%10; /以下含义同上 table_21=miao2/10; table_22=fen2%10+11; table_23=fen2/10; table_24=shi2%10+11; table_25=shi2/10; j=0x7f; for(i=2;i=20) /判断是否到一秒 flag=0; /到了,则标志位清零 miao+; /秒加1 if(miao=60) /判断秒是否到60s miao=0;/到了,则清零 fen+; /分加1 if(fen=59) /以下含义同上 fen=0; shi+; if(shi23) shi=

16、0; void key_scan() /键盘扫描子函数 uchar i; /定义局部变量 if(key1=0)/判断key2是否按下 while(!key1) /防止掉显 if(cnt=0|cnt=1|cnt=2|cnt=3|cnt=6) display(); if(cnt=4|cnt=5) display_1(); cnt+; /记下按键key1按下的次数 if(cnt=1) /第一次按下,停止计数 TR0=0; if(cnt=2) / 第二次按下 fen1=fen; /保存分的数值 fen=99; /显示99,表示可以调节分的数值了 (99只是一个标志) for(i=0;i100;i+)

17、display(); /显示99 fen=fen1; /恢复前一刻分的数值 if(cnt=3) shi1=shi; shi=99; for(i=0;i100;i+) display(); shi=shi1; if(cnt=4) fen1=fen2; fen2=88; for(i=0;i100;i+) display_1(); fen2=fen1; if(cnt=5) shi1=shi2; shi2=88; for(i=0;i59) /判断分是否大于59,是,则秒清零 fen=0; if(cnt=3) shi+; if(shi23) shi=0; if(cnt=4) fen2+; if(fen2

18、59) fen2=0; if(cnt=5) shi2+; if(shi223) shi2=0; void jian() /减1子函数 if(cnt=2) /判断key1按下的次数是否为2,是则秒减1 fen-; if(fen=255) /判断秒是否减到-1,是,则秒清零(255是-1的补码) fen=59; if(cnt=3) shi-; if(shi=255) shi=23; if(cnt=4) fen2-; if(fen2=255) fen2=59; if(cnt=5) shi2-; if(shi2=255) shi2=23; void clock() /闹铃子函数 if(miao2=mi

19、ao) /显判断秒的数值是否相等 if(fen2=fen) /是,在判断分是否相等 if(shi2=shi) /是,再判断时是否相等 flag1=0; /是,则标志位,flag1清零 while(!(flag1=10) /判断flag1是否到20 fmq=0; /没有,则,继续驱动蜂鸣器响,时间约为:1s shijian(); /调用时间子函数 display(); /调用显示子函数 fmq=1;/关闭蜂鸣器flag1=0;while(!(flag1=10) /判断flag1是否到20 fmq=1; /继续驱动蜂鸣器停,时间约为:1s shijian(); /调用时间子函数 display()

20、; /调用显示子函数 fmq=1;flag1=0;while(!(flag1=10) fmq=0; shijian(); display(); fmq=1;flag1=0;while(!(flag1=10) fmq=1; shijian(); display(); fmq=1;flag1=0;while(!(flag1=10) fmq=0; shijian(); display(); fmq=1; void main() init();/调用初始化子函数 while(1) key_scan(); /调用键盘扫描子函数 shijian(); /时间子函数 clock(); /闹钟子函数 /显示子

21、函数 if(cnt=0|cnt=1|cnt=2|cnt=3|cnt=6) display(); if(cnt=4|cnt=5) display_1(); void time0() interrupt 1 /定时器0 TH0=(65536-50000)/256; /初值50ms TL0=(65536-50000)%256; flag+; /标志位 flag1+;void sint()interrupt 4 flag2+; flag2=flag2%4; if(RI&flag2=1) RI=0; shi=SBUF; if(RI&flag2=2) RI=0; fen=SBUF; if(RI&flag2=3) RI=0; shi2=SBUF; if(RI&flag2=0) RI=0; fen2=SBUF; if(!TI) TI=0;2、定时闹钟流程图:.实物照片:(a)实现串口页面(b)实验箱中使用部分20

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

当前位置:首页 > 研究报告 > 信息产业


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