课设说明书.docx
- 文档编号:23833137
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:33
- 大小:356.38KB
课设说明书.docx
《课设说明书.docx》由会员分享,可在线阅读,更多相关《课设说明书.docx(33页珍藏版)》请在冰豆网上搜索。
课设说明书
2016届课程设计
《单片机原理及应用》
定时闹钟设计说明书
学生姓名赵军琴
学号5011212417
所属学院信息工程学院
专业计算机科学与技术
班级计算机16-4
指导教师孟洪兵
教师职称讲师
塔里木大学教务
前言
随着生活水平的提高,人们越来越追求人性化的事物。
传统的时钟已不能满足人们的需求。
而现代的时钟不仅需要模拟电路技术和数字电路技术而且更需要单片机技术,增加数字钟的功能。
利用软件编程尽量做到硬件电路简单稳定,减小电磁干扰和其他环境干扰,减小因元器件精度不够引起的误差,但是数字钟还是可以改进和提高如选用更精密的元器件。
但与机械式时钟相比已经具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,因此得到了广泛的使用。
数字钟通过数字电路实现时、分、秒。
数字显示的计时装置,广泛用于个人家庭、车站、码头办公室等公共场所成为人们日常生活中不可少的必需品。
由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度远远超过老式钟表。
多功能数字钟的应用非常普遍。
由单片机作为数字钟的核心控制器,通过它的时钟信号进行实现计时功能,将其时间数据经单片机输出,利用显示器显示出来。
通过键盘可以进行校时、定时等功能。
输出设备显示器可以用液晶显示技术和数码管来显示技术。
本系统利用单片机实现具有计时、校时等功能的数字时钟,是以单片机AT89C51为核心元件同时采用LED数码管显示器动态显示“时”、“分”、“秒”的现代计时装置。
另外具有校时功能,秒表功能,和定时器功能,利用单片机实现的数字时钟具有编程灵活,便于功能的扩充等优点。
目录
摘要1
一、课题的背景2
1.1课题的来源2
1.2课题研究的目的和意义2
1.3应解决的主要问题及达到的技术要求2
二、方案的选择和论证3
2.1单片机型号的选择3
2.2按键的选择3
2.3显示器的选择3
2.4发音部分的设计3
三、电子定时闹钟的设计原理和方法4
3.1设计原理4
3.2硬件电路的设计4
3.2.1键盘电路的设计4
3.2.2段码驱动电路4
3.2.3蜂鸣器驱动电路5
3.3软件部分的设计5
3.3.1中断定时器的设置5
3.3.2键盘扫描函数6
3.3.3时间和闹钟的设置7
四、实验结果9
五、实物连接图10
总结11
致谢12
参考文献13
附录14
摘要
单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。
而51单片机是各单片机中最为典型和最有代表性的一种。
本设计以AT89C51芯片为核心,辅以必要的外围电路,设计了一个结构简单,功能齐全的电子时钟,它由5V直流电源供电。
在硬件方面,除了CPU外,使用八个七段LED数码管来进行显示,LED采用的是动态扫描显示,使用74hc573芯片进行驱动。
通过LED能够较为准确地显示时、分、秒。
四个简单的按键实现对时间的调整。
软件方面采用C语言编程。
整个电子钟系统能完成时间的显示、调时、校时和三组定时闹钟的功能。
选用单片机最小系统应用程序,添加比较程序、时间调整程序及蜂鸣程序,通过时间比较程序触发蜂鸣,实现闹钟功能,完成设计所需求的软件环境。
介绍并使用Keil单片机模拟调试软件,测试程序的可行性并用Proteus进行仿真。
关键词:
单片机,定时器,中断,闹钟,LED
一、课题的背景
1.1课题的来源
随着生活水平的提高,人们越来越追求人性化的事物,传统的时钟已不能满足人们的需求。
现代的时钟不仅需要模拟电路技术而且需要数字电路技术和单片机技术,增加时钟的功能。
数字电子钟可利用软件编程尽量做到硬件电路简单稳定,减小电磁干扰和其他环境干扰,减小因元器件精度不够引起的误差;尽管如此数字钟还是可以改进和提高,比如选用更精密的元器件。
但与机械式时钟相比已经具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,因此得到了广泛的使用。
1.2课题研究的目的和意义
时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。
忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。
但是,一旦重要事情,一时的耽误可能酿成大祸。
例如,许多火灾都是由于人们一时忘记了关闭煤气或是忘记充电时间等造成的。
而钟表的数字化给人们生产生活带来了极大的方便。
数字钟是通过数字电路实现时、分、秒数字显示的计时装置,广泛用于个人家庭、车站、码头办公室等公共场所,成为人们日常生活中不可少的必需品。
由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能,诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烤箱、通断动力设备、甚至各种定时电气的自动启用等。
所有这些,都是以钟表数字化为基础的。
因此,研究数字钟及扩大其应用有着非常现实的意义。
1.3应解决的主要问题及达到的技术要求
本设计应解决的主要问题有两大方面,即硬件电路设计和软件设计两大方面。
其中硬件电路部分又可分为四个模块:
键盘模块、显示模块、计时模块和发声模块。
硬件电路部分致力于低成本、低功耗和易实现性。
软件部分则应做到代码的精简、准确、易读懂。
最后通过软硬件的结合实现数字钟的精确计时、校时、三组闹钟设置和定时报警功能。
二、方案的选择和论证
2.1单片机型号的选择
通过对多种单片机性能的分析,最终认为AT89C51是最理想的电子时钟开发芯片。
AT89C51是一种高效微控制器,而且它与MCS-51兼容,且具有4K字节可编程序存储器和1000次擦写循环,数据保留时间为10年是最好的选择。
2.2按键的选择
方案一:
4×4矩阵式键盘。
如果选择此方案,那么在修改时钟或设置闹铃时间时就可以直接从键盘输入,方便、快捷,但程序较为复杂。
方案二:
独立式按键。
如果设置过多按键,将会占用较多I/O口,而且会给布线带来不便,因此,此方案适用于按键较少的情况。
如果选择此方案,由于按键较少,在修改时间或设置闹铃时间时就不能直接输入,只能通过加或减完成,稍为麻烦一些,但其程序简单。
由于并不需要经常修改时间和设置闹铃时间,而且方案二的程序简单,按键少、成本低,因此,选择方案二。
2.3显示器的选择
方案一:
液晶显示器。
如果选择此方案,将会降低系统的功耗,这样就可以用电池供电,便于携带。
但液晶显示器的驱动电路复杂,使用起来有一定的难度。
方案二:
用数码管作为显示器。
数码管的驱动电路简单,使用方便,如果选择了此方案,那么在夜间看时间的时候就不需要有光源,非常方便。
其缺点是功耗较大。
由于数码管使用起来较为方便,在夜间看时间也很方便,因此我选择了方案二。
2.4发音部分的设计
通过三极管放大后驱动蜂鸣器工作,再通过软件产生等时时间方波驱动蜂鸣器发出间断嘀声,这样就可以省去硬件振荡电路,降低成本。
三、电子定时闹钟的设计原理和方法
3.1设计原理
系统原理图
图3-1系统原理图
3.2硬件电路的设计
3.2.1键盘电路的设计
键盘采用4个独立按键配以4个上拉电阻实现对时钟和闹钟的设定及修改。
图3-2独立按键图3-3键盘输入电路
3.2.2段码驱动电路
由于通过数码管公共极的电流较大且避免过多地使用分立元件,采用了一片74hc573来驱动段码,用P3口作位码驱动。
图3-4段码驱动器74hc573
3.2.3蜂鸣器驱动电路
发音部分是通过三极管放大驱动蜂鸣器工作,再通过软件这时产生等时时间方波驱动蜂鸣器发出间断嘀声,这样就可以省去硬件振荡电路,降低成本。
图3-5蜂鸣器驱动电路
3.3软件部分的设计
3.3.1中断定时器的设置
数字电子钟设计中主要使用定时器T0中断ET0,利用ET0中断进行计时时间的自增,从而实现计时功能。
中断服务流程图如下图3-9。
X:
计数初值t:
定时时间
:
机器周期[1]
图3-6中断服务流程图
3.3.2键盘扫描函数
这些函数主要是判断是否有按键按下,并根据相应按键按下的情况调用相关函数执行,其相关流程图如下图3-7。
图3-7键盘扫描流程图
3.3.3时间和闹钟的设置
此部分主要是通过判断cnt在不同值时通过调用加1、减1子函数对时间和闹钟的时、分、秒进行设置。
在闹钟设置时,判断按键S4按下情况我,进行闹钟的开启与关闭,相关流程图如下图3-8。
图3-8时间/闹钟设置流程图
四、实验结果
此电子闹钟设计是利用Proteus仿真软件进行仿真,基本上实现了课程设计要求实现的功能。
硬件部分设置了的三个按键S1、S2、S3、S4。
当按键S1第一次按下时,停止计时进入闹钟1的秒设置,当按键S1第二、第三次按下时,分别进入闹钟1的分设置和时设置,当按S1第四、第五、第六次按下时分别进入闹钟2的秒、分、时设置,当按S1第七、第八、第九次按下时分别进入闹钟3的秒、分、时设置,当按S1第十、第二一、第十二次按下时分别进入时间的秒、分、时设置,在S1按下的各阶段,可用按键S2、S3进行时间和闹铃时间的时、分、秒进行加减设置;当按键S1第十三次按下时恢复到时间显示功能。
当显示的时间和定时设置的时间一致时,蜂鸣器发出等时间断蜂鸣声,闹铃时间设置为60秒。
在各个闹钟设置阶段,如果有S4按下,则相应闹钟功能关闭或开启;如在闹铃时有S4按下则提前停止闹铃。
图4-1运行仿真
五、实物连接图
图5-1实物图
总结
通过自己的不懈努力,实现了电子闹钟的基本功能:
时钟的显示、调时功能、校时功能、闹铃功能。
它的精度基本满足日常生活的需求,调时功能方便快捷;校时功能保证了时间的准确性和可靠性,闹铃还可以扩展成音乐闹钟,需自己设定。
由于时间不足,设计的并不是很好,希望可以努力改进。
在本次设计的过程中,我发现很多的问题,虽然以前有做过这样的设计,但不需要输入程序。
通过这次设计我学会了很多东西,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,比如写一个程序看其功能很少认为编写程序简单,但到编程的时候才发现一些细微的知识或低级错误经常犯做不到最后常常失败,所以有些东西只有学精弄懂并且要细心才行,只学习理论有些东西是很难理解的,更谈不上掌握。
做了很多次都不能成功,后面又查阅了些资料,终于做成功了,感觉很不容易。
主要是在电路板上有很多原理没有搞懂所以费了不少时间。
从这次的课程设计中,我们真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的练习的过程中才能提高,我想这就是我在这次课程设计中的最大收获。
致谢
经过这几天的努力,收集数据资料、整理材料、写作论文,我终于可以顺利的完成了。
通过此次的实验设计,我学到了很多知识,在论文的写作过程中,我不仅收集到了论文所需的资料数据,而且学到了很多书本上没有的知识。
并且由原先的被动的接受知识转换为主动的寻求知识,我想这可以说是学习方法上的一个很大的突破。
在实际的电路连接中费了很多时间,调试了很久、修改了很久,问了很多同学才做出了实物链接,感谢帮助我的同学和老师,帮我解决了很多问题。
任何问题和偏差都不要轻视,要通过正确的途径去解决,在做事情的过程中要有耐心和毅在论文的写作过程中也学到了做任何事情所要有的态度和心态,首先做学问要一丝不苟,对于发展过程中出现困难要努力的克服,不要一遇到困难就打退堂鼓,只要坚持下去就可以找到思路去解决问题的。
再次感谢所有在实验和论文过程中帮助我的同学和老师,才让我完成了此次论文。
参考文献
[1]杨卉,单片机课程设计定时闹钟[J],武汉工程大学,2011.12
[2]某某大学实验报告[J],2010.12
[3]张毅刚,MCS-51单片机应用设计[M],哈尔宾:
哈尔宾工业大学出版社,1997
[4]ATMEL.8-bitMicrocontrollerwith4KBytesFlashAT89C51.2000
附录
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
//****************************位声明********************************
sbitkey1=P1^0;
sbitkey2=P1^1;
sbitkey3=P1^2;
sbitkey4=P1^3;
sbitfmq=P2^1;
ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
//012345
0x82,0xf8,0x80,0x90,0xbf,0x0ff};
//6789-灭
voidjia();
voidjian();
//********************数组定义,数组内含有8个数值******************
uchartable1[8],table2[8],table3[8],table4[8];
//**************************时间显示初始值**************************
ucharshi=12,fen=0,miao=0;
//**************************定义全局变量****************************
ucharshi1,fen1,miao1,shi2,fen2,miao2,shi3,fen3,miao3;
ucharshi4,fen4,miao4;
ucharflag,flag1,wss,cnt,cnt1,alm1,alm2,alm3;
//1秒等时位闪次数校时闹1闹2闹3
uintflag2;
//蜂鸣
//*********************延时函数,用于动态扫描数码管*****************
voiddelay(uchari)
{ucharx,y;
for(x=i;x>0;x--)
for(y=120;y>0;y--);
}
//*******************************初始化函数*************************
voidinit()
{TMOD=0x01;//工作方式1
TH0=0x3c;//定时时间为:
50ms(65536-50000)/256
TL0=0x0b0;//(65536-50000)%256
ET0=1;//打开定时器
EA=1;//开总中断
TR0=1;//启动定时器
}
//********************显示子函数,用于显示时间数值*****************
voiddisplay()
{uchari,j;
if(cnt!
=10||wss==0)
{table1[0]=miao%10;//分离秒的个位与十位
table1[1]=miao/10;
}
else
{table1[0]=table1[1]=11;}
if(cnt!
=11||wss==0)
{table1[3]=fen%10;//分离分的个位与十位
table1[4]=fen/10;
}
else
{table1[3]=table1[4]=11;}
if(cnt!
=12||wss==0)
{table1[6]=shi%10;//分离时的个位与十位
table1[7]=shi/10;
}
else
{table1[6]=table1[7]=11;}
table1[2]=table1[5]=10;
j=0x7f;
for(i=0;i<=7;i++)//从秒到时的扫描
{P3=j;
P0=table[table1[i]];//显示数值
delay(10);
j=_cror_(j,1);//循环右移
}
}
//*******************显示子函数,用于显示定时1时间*****************
voiddisplay1()
{uchari,j;
if(alm1==0)
{if(cnt!
=1||wss==0)
{table2[0]=miao1%10;//以下含义同上
table2[1]=miao1/10;
}
else
{table2[0]=table2[1]=11;}
if(cnt!
=2||wss==0)
{table2[3]=fen1%10;
table2[4]=fen1/10;
}
else
{table2[3]=table2[4]=11;}
if(cnt!
=3||wss==0)
{table2[6]=shi1%10;
table2[7]=shi1/10;
}
else
{table2[6]=table2[7]=11;}
}
else
table2[0]=table2[1]=table2[3]=table2[4]=table2[6]=table2[7]=10;
table2[2]=table2[5]=10;
j=0x7f;
for(i=0;i<=7;i++)
{P3=j;
P0=table[table2[i]];
delay(10);
j=_cror_(j,1);
}
}
//********************显示子函数,用于显示定时2时间******************
voiddisplay2()
{uchari,j;
if(alm2==0)
{if(cnt!
=4||wss==0)
{table3[0]=miao2%10;//以下含义同上
table3[1]=miao2/10;
}
else
{table3[0]=table3[1]=11;}
if(cnt!
=5||wss==0)
{table3[3]=fen2%10;
table3[4]=fen2/10;
}
else
{table3[3]=table3[4]=11;}
if(cnt!
=6||wss==0)
{table3[6]=shi2%10;
table3[7]=shi2/10;
}
else
{table3[6]=table3[7]=11;}
}
else
table3[0]=table3[1]=table3[3]=table3[4]=table3[6]=table3[7]=10;
table3[2]=table3[5]=10;
j=0x7f;
for(i=0;i<=7;i++)
{P3=j;
P0=table[table3[i]];
delay(10);
j=_cror_(j,1);
}
}
//***************显示子函数,用于显示定时3时间数值****************//
voiddisplay3()
{uchari,j;
if(alm3==0)
{if(cnt!
=7||wss==0)
{table4[0]=miao3%10;//分离秒的个位与十位
table4[1]=miao3/10;
}
else
{table4[0]=table4[1]=11;}
if(cnt!
=8||wss==0)
{table4[3]=fen3%10;//分离分的个位与十位
table4[4]=fen3/10;
}
else
{table4[3]=table4[4]=11;}
if(cnt!
=9||wss==0)
{table4[6]=shi3%10;//分离时的个位与十位
table4[7]=shi3/10;
}
else
{table4[6]=table4[7]=11;}
}
else
table4[0]=table4[1]=table4[3]=table4[4]=table4[6]=table4[7]=10;
table4[2]=table4[5]=10;
j=0x7f;//从秒到时的扫描
for(i=0;i<=7;i++)
{P3=j;
P0=table[table4[i]];//显示数值
delay(10);
j=_cror_(j,1);//循环右移
}
}
//***********************时间子函数*****************************//
voidshijian()
{if(flag>=20)//判断是否到一秒
{wss=~wss;
flag=0;//到了,则标志位清零
if(cnt1!
=0)
{miao4++;//秒加1
if(miao4>59)//判断秒是否到60s
{miao4=0;//到了,则清零
fen4++;//分加1
if(fen4>59)//以下含义同上
{fen4=0;
shi4++;
if(shi4>23)
shi4=0;
}
}
}
else
{miao++;//秒加1
if(miao>59)//判断秒是否到60s
{miao=0;//到了,则清零
fen++;//分加1
if(fen>59)//以下含义同上
{fen=0;
shi++;
if(shi>23)
shi=0;
}
}
}
}
}
//**************************键盘扫描子函数************************//
voidkey_scan()
{if(key1==0)
{while(!
key1)//防止掉显
{if(cnt==1||cnt==2||cnt==3)
{display1();}
if(cnt==4||cnt==5||cnt==6)
{display2();}
if(cnt==7||cnt==8||cnt==9)
{display3();}
if(cnt==0||cnt==10||cnt==11||cnt==12||cnt==13)
{display();}
}
cnt++;//记下按键key1按下的次数
if(cnt==10&&cnt1==0)
{m
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 说明书