版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、五 邑 大 学单片机课程设计课程设计题目: 倒计时音乐闹钟院 系 信息工程学院 专 业 轨道交通自动化学 号 学生姓名 指导教师 完成日期 2015年11月3日基于单片机的倒计时音乐闹钟 目录一. 设计目的2二. 硬件简介3三. 设计要求4四. 硬件电路设计5五. 流程图设计7六. 程序设计8七. 设计小结13八. 参考文献14摘要近年来随着科技的飞速发展,单片机的应用正在不断深入,渐渐的改变人们的生活习惯。在生活中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。人们做事通常是要有目的和时间观念的,在平时对一些比较重要的事情应该是调好闹钟
2、或者备忘录来提醒自己。提醒的方式有很多,在学习了单片机的有关知识之后,运用相关知识来设计完成倒计时音乐闹钟。我对单片机很感兴趣,所以在听了老师给我们讲解单片机相关知识以后,我自己课后查找资料,不断学习单片机方面的知识。这次课设给了我学以致用的机会,我利用自己学的单片机知识,做了一个基于51单片机的倒计时音乐闹钟的设计。关键词: 单片机 倒计时 lcd液晶屏 一、设计目的(一)通过设计了解一个倒计时音乐闹钟的基本工作原理(二)掌握51单片机计数器/定时器的工作方式和1602lcd的驱动工作原理;(三)掌握keil4、ad10、prtues等软件的使用(四)掌握调试电路和分析问题的能力2、 设计内
3、容(1)利用at89c51单片机结合字符型lcd显示器设计一个简易的倒数计数器。一分钟倒计数,当倒计数为0时,则发出一段音乐声响,通知倒计数到达。(2)通过按键可以自主设置倒计数的时间(1-60min、5min、10min)。一旦按下键则开始倒计数,当计数为0时,发出一阵音乐声。3、 总体设计与方案讨论倒计时音乐器主要有六个模块组成:51单片机最小系统电路lcd1602液晶屏电路按键电路led指示灯电路电源电路蜂鸣器电路方案论证:方案一:由于stc89c52中自带有定时器t0、t1,所以倒计时音乐闹钟可采用定时器中断方式和定时产生可变方波方式。此方式需要考虑两个定时器的优先级和定时器的交替开断
4、需要精确。所以变成比较麻烦,但是比较准备和稳定。方案二:只利用stc89c52的一个定时器用来倒计时,而音乐是通过有不同的延时来达到产生不同方波的目的。这种方法虽然编程简单,但是音乐的效果不好。对比以上两种方法,我最后选择的方案一,虽然编程较方案二麻烦,但是最终的效果比较好。4、 硬件介绍序号元器件名称型号可代用型号数量2单片机stc89c5213led24晶振电容22p25复位按钮1710复位电阻28单独按键510电解电容10uf1114.7k排阻1121电阻21311.0592m晶振21.所需元件stc89c52介绍单片机主控电路的主要元件是stc89c52,其外型及管脚如图1所示: 图1
5、stc89c51管脚排列图stc89c52是一个低电压,高性能cmos8位单片机,片内含4kbytes的可反复擦写的只读程序存储器(perom)和128bytes的随机存取数据存储器(ram),器件采用atmel公司的高密度、非易失性存储技术生产,兼容标准mcs-51指令系统,片内置通用8位中央处理器和flash存储单元,内置功能强大的微型计算机的stc89c52提供了高性价比的解决方案。stc89c52是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(i/o)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口。3.1.2管脚说明:vcc:供电电压。gn
6、d:接地。p0口:p0口为一个8位漏级开路双向i/o口,每脚可吸收8ttl门流。p1口:p1口是一个内部提供上拉电阻的8位双向i/o口,p1口缓冲器能接收输出4ttl门电流。p2口:p2口为一个内部上拉电阻的8位双向i/o口,p2口缓冲器可接收,输出4个ttl门电流。p3口:p3口管脚是8个带内部上拉电阻的双向i/o口,可接收输出4个ttl门电流。p3口也可作为stc89c52的一些特殊功能口,如下所示:p3.0rxd(串行输入口)p3.1txd(串行输出口)p3.2/int0(外部中断0)p3.3/int1(外部中断1)p3.4t0(记时器0外部输入)p3.5t1(记时器1外部输入)p3.6
7、/wr(外部数据存储器写选通)p3.7/rd(外部数据存储器读选通)1602lcd液晶屏简介字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式lcd。 管脚列表4、 硬件电路设计与仿真原理图pcb图protues仿真图硬件总结:由于考虑到元器件的布局、电路板的美观和减少飞线,我采用了双面板的形式。因为这个倒计时音乐闹钟不是高速板,所以它的pcb布线不用太讲究,主要是不要违反基本规则就可以了。个人比较喜欢在电路板加多一个led用来指示电源正常和用另外一个led来指示程序运行正常,所以额外加多了两个led灯。五、程序流程图6、 程序设计主程序:#include reg52.h#inclu
8、de 1602.hsbit beep = p20; sbit led = p14;bit flag2; uchar ptr = 0x00; uchar high; uchar low; uchar time;uchar beep_flag=0;uchar m;int a,b,y;sbit switch_one = p10;sbit switch_two = p11;sbit switch_three = p12;sbit switch_four = p13;uchar miao=60,fen=1,num=0;uchar flag=1;uchar s1num=0;uchar code music
9、 = 0xfc,0x44,0x7f, 0xfc,0x44,0x7f, 0xfc,0x44,0xff, 0xfa,0x68,0xff,/ 3 _ 3_ 3 10xfd,0x23,0x7f, 0xfd,0x23,0x7f, 0xfd,0x23,0xff, 0xfc,0x44,0xff,/ 1_ 3_ 5 50xfc,0x44,0x7f, 0xfd,0x23,0x7f, 0xfd,0x82,0xff, 0xfd,0x82,0xff,/ 4_ 3_ 2 -0xfd,0x23,0x7f, 0xfd,0x23,0x7f, 0xfc,0xac,0xff, 0xff,0xff,0xff,/ 2_ 3_ 4 4
10、0xfc,0xac,0x7f, 0xfd,0x23,0x7f, 0xfd,0x34,0xff, 0xfd,0x34,0xff,/ 3_ 2_ 3 10xfd,0x23,0x7f, 0xfc,0xac,0x7f, 0xfd,0x23,0xff, 0xfc,0x44,0xff,/ 1_ 3_ 2 .50xfc,0x44,0x7f, 0xfd,0x23,0x7f, 0xfc,0xac,0xff, 0xfa,0x68,0xff, / .7_ 2_ 1 -0xfc,0x0c,0x7f, 0xfc,0xac,0x7f, 0xfc,0x44,0xff, 0xff,0xff,0xff,0x00;void de
11、layms(int z)int a,b;for(a=z;a0;a-)for(b=112;b0;b-);void time_init()tmod=0x11;tr1=0;th1= 0xdc; /10mstl1 = 0x00;et1=1; ea=1;void keyscan()if(switch_one=0) /s1num+;while(!switch_one);if(s1num=1)tr1=1;if(s1num=2)s1num=0;tr1=0;if(switch_two=0) /160fen+;miao=0;if(fen=60)fen=0;write_sfm(4,fen);write_sfm(7,
12、miao);write_com(0x80+0x40+4);write_com(0x80+0x40+7);miao=60;if(switch_three=0) /5fen=5;miao=0;write_sfm(4,fen);write_sfm(7,miao);write_com(0x80+0x40+4);write_com(0x80+0x40+7);miao=60;if(switch_four=0) /10fen=10;miao=0;write_sfm(4,fen);write_sfm(7,miao);write_com(0x80+0x40+4);write_com(0x80+0x40+7);m
13、iao=60;void main ()time_init();lcd_init(); print_string(by:blue); write_com(0x80+0x40);print_string(tim 00:00); /56 89while(1)keyscan();if(beep_flag=1)beep_flag=0;dom+;for(a=0;a2000;a+)beep=beep;for(b=0;b24;b+);for(a=0;a2000;a+)beep=beep;for(b=0;b25;b+);for(a=0;a2000;a+)beep=beep;for(b=0;b26;b+);for
14、(a=0;a2000;a+)beep=beep;for(b=0;b27;b+);while(m5);void time1() interrupt 3th1= 0xdc; /10mstl1 = 0x00;num+;if(num=90)led=led;num=0;miao-;if(miao=59)fen-;if(miao=0)miao=60;if(fen=0)tr1=0;fen=0;miao=0;beep_flag=1;write_sfm(4,fen);write_sfm(7,miao);1602lcd液晶屏驱动程序#include 1602.h#include reg52.h#includesb
15、it rs=p22; sbit lcdrw=p23; sbit en=p24; /- void write_data(uchar dat) rs=1; lcdrw=0; data_port=dat; delay_ms(5); en=1; delay_ms(5); en=0; /- void write_com(uchar com) rs=0; lcdrw=0; data_port=com; delay_ms(5); en=1; delay_ms(5); en=0; /- void lcd_init() lcdrw=0; rs=0; write_com(0x36); write_com(0x0f
16、); write_com(0x38); write_com(0x06); write_com(0x01); write_com(0x0c); write_com(0x80); void print_string(char* str) int i; for(i=0;stri!=0;i+) write_data(stri); /- void delay_ms(uchar t) int j; for(;t!=0; t-) for (j=0;j255;j+); void write_sfm(uchar add,uchar date)uchar shi,ge;shi=date/10;ge=date%10
17、;write_com(0x80+0x40+add);write_data(0x30+shi);write_data(0x30+ge);七、设计小结这是第一次做课程设计,在途中遇到了很多问题。1、51片单机的两个定时器优先级问题,用于蜂鸣器唱歌的产生占空比的定时器1和倒计时的定时器1在设计的过程中存在干扰。解决办法:后来通过慢慢的调试,把定时器1设置为最高优先级,在倒计时倒数到0时停止定时器1,给一个标志位,在主程序的大循环中判断标志位,然后才开启定时器0,产生不同占空比的方波,蜂鸣器唱歌。2、蜂鸣器的三极管型号选不对,导致唱歌声音比较小。解决方法:更换三极管,最后换成pnps8550。3、画电路图时lcd1602的数据口用p0口,只加了排阻,而忘了上拉,导致液晶屏只亮而没有数据解决方法:在电路板上更换9脚排阻,一脚飞线到vcc。有错误不用怕,仔细查资料问老师找出问
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 商业综合体植物装饰租赁合同样本
- 职业教育校车安全员聘用合同
- 建筑安全改造合同样本
- 机场跑道排水系统施工合同
- 农业观光混凝土施工合同
- 电力工程物料采购员招聘协议
- 大型雕塑塔吊租赁合同
- 生态农业建设协议
- 吉林省白山市(2024年-2025年小学五年级语文)人教版阶段练习((上下)学期)试卷及答案
- 关于感恩老师+演讲稿7篇
- 伴有精神病性症状的重度抑郁发作的护理查房
- 仓储人员货物搬运与装卸作业指南
- 短视频运营管理(抖音短视频运营岗位职责说明及薪酬绩效考核体系-抖音快手运营管理KPI绩效)
- 民航概论(民航乘务专业)全套教学课件
- 部编版七年级上册语文基础知识训练及答案一
- 天文竞赛复习题库及答案
- 污泥( 废水)运输服务方案(技术方案)
- 公司章程范本杭州工商docx
- 职业院校面试题目及答案
- 全护筒跟进旋挖施工方案
- 海水淡化处理方案
评论
0/150
提交评论