单片机 课设.docx
- 文档编号:23171943
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:22
- 大小:244.46KB
单片机 课设.docx
《单片机 课设.docx》由会员分享,可在线阅读,更多相关《单片机 课设.docx(22页珍藏版)》请在冰豆网上搜索。
单片机课设
课程设计任务书
学生姓名:
专业班级:
电信1306班
指导教师:
胡君萍工作单位:
信息工程学院
题目:
设计并实现可编倒计时装置
初始条件:
一台PC机,PC机上装有单片机开发软件;实验室提供单片机实验箱,该实验箱具有各种通用接口供同学们选择,同学们也可以购置单片机最小系统开发板作为开发基础,也可以全部购置分立元件组装。
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
1、设计任务
一周内完成可编倒计时装置的软硬件设计、仿真、调试及制作。
2、技术要求
按秒倒计时,由键盘预置分、秒各两位数,键控启动计时开始,倒计时秒数用数码管显示,计时器归零时输出一音频信号作为倒计时结束的提示信号。
3、课程设计说明书要求
课程设计说明书应包括方案设计、硬件电路设计、软件设计、资源分配表、调试及结果、性能分析、总结几大部分。
其中性能分析主要分析精度和误差来源,也可分析装置的反应速度、成本等。
最后附参考文献。
设计说明书格式应符合《武汉理工大学课程设计工作规范》要求。
时间安排:
第1-2天:
查阅相关资料,熟悉接口实验平台及其软件开发平台,完成方案设计。
第3-4天:
完成硬件设计,画出硬件电路图。
第5-6天:
软件设计、仿真。
第7天:
制作、调试。
第8天:
撰写课程设计说明书。
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
目录
1电路方案的设计与硬件选择1
1.1电源提供方案1
1.2系统主体部分方案1
2硬件模块的设计2
2.1数码显示模块3
2.2控制部分及蜂鸣器报警模块3
2.3输入模块4
3软件设计5
3.1软件设计流程图5
3.2软件设计思路及原理6
3.3资源分配表6
4程序代码及课程设计效果7
4.1设计的源程序7
4.2设计效果展示13
5设计中遇到问题的解决及性能分析15
5.1设计中遇到的问题及解决15
5.2性能分析16
6总结与体会16
7参考文献17
1电路方案的设计与硬件选择
1.1电源提供方案
为使模块稳定工作,须有可靠电源。
我们考虑了两种电源方案
方案一:
采用独立的稳压电源。
此方案的优点是稳定可靠,且有各种成熟电路可供选用;缺点是各模块都采用独立电源,会使系统复杂,且可能影响电路电平。
方案二:
采用单片机控制模块提供电源。
方案的优点是系统简明扼要,节约成本;缺点是输出功率不高。
综上所述,我们选择第二种方案。
1.2系统主体部分方案
本次单片机课程设计要求设计可编程倒计时装置,其中分和秒都是两位数字显示,键盘预先设置要倒计时的时间,按键启动倒计时装置,数码管动态显示倒计时的画面,当倒计时归零后,发出声音,提示倒计时结束。
在电路中利用AT89S52单片机作为倒计时器的核心控制器,针对需要倒计时的场合实现可调时间的倒计时功能。
具体的我们利用单片机的芯片的P3口作为按键的扫描接口,P2,P0口作为数码管位选和段选接口,定时器T0作为每1秒减一的定时器。
当“开始”按键按下时开始倒计时,三个预置键设置数码管分秒数初值。
按键启动后,数码管会动态的进行显示时间,直到最后归零。
倒计时完成后,通过蜂鸣器发出指示报警音,基本完成了题目要求实现的功能。
由以上分析,我们可分为三个部分进行具体的设计,即输入模块、显示模块、控制模块。
第一部分是输入部分,这个部分是用于倒计时的时间设置,采用四个按键实现。
特点是需要元件少而且经济。
第二部分是显示部分,本设计采用4个共阴数码管显示倒计时时间。
由于七段数码管需要选通4个,故采用轮询方式对每一个应该点亮的数码管进行操作,按键延时采用数码管显示模块填充,从根本上防止抖动。
第三部分是控制部分,利用CPU的中断,在中断服务程序中执行倒计时,在倒计时完成后,采用蜂鸣器指示计时时间到与否。
以上便是对倒计时装备的三大部分的设计思路,按照上面各个部分的设计,进行具体的设计来细化和实现相关功能。
图1-1系统硬件结构框图
2硬件模块的设计
图2-1总体设计硬件电路图
其中包括输入部分、显示部分和控制部分,这正好是设计思想的体现。
2.1数码显示模块
显示部分由两个4位数码管组成。
采用动态扫描的方式像是输出的数字,当扫描的速度控制合理的时候,由于人眼的暂留效应和数码管二极管发光的余晖效应能动态显示输出的时间。
图2-1数码显示电路
2.2控制部分及蜂鸣器报警模块
此模块作为定时时间到后的提示音作用,直接接单片机的端口输出即可。
本次采用的是无源的蜂鸣器,不用接独立的电源。
图2-2蜂鸣器报警电路
图2-3控制部分仿真图
AT89S52对输入和输出进行对应的控制,同时蜂鸣器可以根据方波的频率发出声音信号,由此根据它对计时到与否进行判断。
该设计中蜂鸣器在计时时间到后会一直响。
2.3输入模块
本次控制的按键只有4个,分别为倒计时开始按键,加按键、减按键和切换分秒按键。
本次采用的是独立按键,直接用电平高低控制。
图2-3独立按键电路
3软件设计
3.1软件设计流程图
本次使用C52芯片进行编程,首先初始化将主程序所用的到的子程序、变量等定义。
其次还有数码显示程序、独立按键程序、时钟程序和倒计时程序,系统软件的程序流程图和显示部分流程图如下:
Y
N
图3-1软件设计流程
图3-2显示子程序流程图
3.2软件设计思路及原理
首先,按下电源开关接通电源,通过独立按键的加、减、切换按键设置倒计时初始时间。
设置完毕后按下开始键,开始倒计时。
倒计时的显示采用动态扫描,显示后需要延时。
打开第一个数码管,显示数字,短暂延时后,关闭数码管,再打开下一个数码管,显示数字,延时,关闭该数码管,以此类推不断地重复扫描,显示。
利用定时器中断程序,在中断服务程序中进行每秒一次的计时减运算,不断扫描显示的过程其实也就是等待中断的过程。
通过不断对独立按键所接I/O口的扫描,按键按下相当于对应端口接地,对应端口为低电平,故检测到对应端口为低电平时执行相应的操作来完成预置数和开始计时操作。
本次可编程倒计时装置采用的是外置独立的12M晶振。
蜂鸣器需要输出报警音频,即需编写两种频率的报警程序,使其更像警报声,蜂鸣器是否工作也仅需一个I/O口来控制。
3.3资源分配表
P0口
数码管段选
P3.6
蜂鸣器
P3.4
分秒切换
P3.2
减
P2.0~P2.3
数码管位选
P3.5
独立按键开始
P3.3
加
表3-1资源分配表
4程序代码及课程设计效果
4.1设计的源程序
#include
#defineucharunsignedchar
sbitP2_0=P2^0;
sbitP2_1=P2^1;
sbitP2_2=P2^2;
sbitP2_3=P2^3;//四位数码管位选
sbitKEY_DEC=P3^2;//减
sbitKEY_ADD=P3^3;//加
sbitKEY_CHANGE=P3^4;//切换分,秒
sbitKEY_START=P3^5;//开始(一共四位独立按键)
sbitBEEP=P3^6;//蜂鸣器报警装置
staticunsignedcharsecond,minute,hour;//定义分、秒、时和一些变量
unsignedinttcount;
unsignedinta;
unsignedcharm;
bitt;
ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f};//0~9数字
voiddelay500(void)//报警器延时
{
uchari;
for(i=230;i>0;i--);
}
voidDelayUs2x(unsignedcharb)//按键消抖延时
{
while(--b);
}
voidDelayMs(unsignedcharb)
{
while(b--)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
voiddelay(uchari)//显示延时
{
ucharj,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
voiddisplay()//数码管显示子程序
{
P0=table[minute/10];
P2_0=0;
delay(5);
P2_0=1;
P0=(table[minute%10]&0x7f);
P2_1=0;
delay(5);
P2_1=1;
P0=table[second/10];
P2_2=0;
delay(5);
P2_2=1;
P0=table[second%10];
P2_3=0;
delay(5);
P2_3=1;
}
voidmain(void)//主程序
{
while
(1)
{
for(a=100;a>0;a--)//初始显示四个0
{
display();
}
if(!
KEY_CHANGE)//判断分,秒转换键是否按下
{DelayMs(10);
if(!
KEY_CHANGE)//延时去抖
t=~t;
}
if(t)
{
if(!
KEY_ADD)//判断分种加按键是否按下
{
DelayMs(10);
if(!
KEY_ADD)//延时去抖
if(minute<59)
minute++;
}
if(!
KEY_DEC)//判断分钟减按键是否按下
{
DelayMs(10);
if(!
KEY_DEC)//延时去抖
if(minute>0)
minute--;
}
}
if(!
t)
{
if(!
KEY_ADD)//判断秒钟加按键是否按下
{
DelayMs(10);
if(!
KEY_ADD)//延时去抖
if(second<59)
second++;
}
if(!
KEY_DEC)//判断秒钟减按键是否按下
{
DelayMs(10);
if(!
KEY_DEC)//延时去抖
if(second>0)
second--;
}
}
if(!
KEY_START)//判断开始按键是否按下
{
DelayMs(10);
if(!
KEY_START)//延时去抖
break;
}
}
TMOD=0x02;//计时器T0初始化及开中断
TH0=0x06;
TL0=0x06;
TR0=1;
ET0=1;
EA=1;
while
(1)//循环显示且等待中断
{
for(a=100;a>0;a--)
{
display();
}
}
}
voidt0(void)interrupt1using0//计时器T0中断服务程序即计时部分
{tcount++;
if(tcount==4000)
{tcount=0;
second--;
}
if((minute==0)&&(second==0))//蜂鸣器报警
{
ucharj;
while
(1)
{
for(a=100;a>0;a--)
{
display();
}
for(j=200;j>0;j--)
{
BEEP=~BEEP;//输出频率1KHz
delay500();//延时500us
}
for(j=200;j>0;j--)
{
BEEP=~BEEP;//输出频率500Hz
delay500();//延时1ms
delay500();
}
}
}
if(second==0Xff)
{
second=59;
minute--;
}
}
4.2设计效果展示
将编写好的源程序用keil软件进行编程,编译,最终生成hex文件,烧写进单片机内,并在proteus上进行仿真,最后按程序连接电路图。
图4-1仿真结果
最终效果图如下:
开始时00.00
图4-2开始计时效果图
预置时间03.05
图4-3预置初始时间效果图
倒计时开始:
倒计时到02.46
图4-4倒计时运行效果图
5设计中遇到问题的解决及性能分析
5.1设计中遇到的问题及解决
问题一:
程序编写完成后,在keil软件上进行编译、调试生成hex文件进行仿真,一开始数码管显示不出完整的数字,但能实现设定初值和倒计时功能。
原因及解决方案:
经再次检查程序,发现程序中的0到9的数码管编码用的共阳型的,而实际仿真与实物里都选用了共阴数码管,导致显示不完整,把程序中数码管编码改掉之后就成功显示了。
问题二:
程序烧写完成后,打开单片机,数码管不显示数字,预置数可以完成,但是预置数的过程看不到。
原因及解决方案:
因为在刚开始预置数阶段扫描独立按键时,没有在循环内编写数码管显示程序。
故在扫描独立按键循环内加入如下程序,问题解决。
for(a=100;a>0;a--)//初始显示四个0
{
display();
}
问题三:
独立按键预置数时,按键不灵敏需较长时间按下才会起作用。
原因及解决方案:
按键去抖延时过长,将去抖延时适当缩短,此问题有所改善。
问题四:
计时器归零时,输出音频报警信号,但是此时数码管显示乱码。
原因及解决方案:
在蜂鸣器报警循环程序中没有写入合适的数码管显示程序,导致出现乱码。
在蜂鸣器报警循环中,写入显示四个零的程序即可解决,在报警的同时,数码管显示四个零。
5.2性能分析
本次课程设计为设计并实现可编倒计时装置,通过查阅资料,对比选择方案,最终确定选用四个独立按键控制的倒计时程序。
第一步程序调试成功后,生成hex文件,再进行第二步电路仿真,仿真成功后将编写的代码烧写到单片机内,检测的性能结果基本满足任务书要求。
开机显示的是00-00,可以通过加、减、切换按键设置倒计时的初始时间,按下开时按键倒计时开始。
倒计时归零后,蜂鸣器也会发出报警声音。
不足之处在于按键的灵敏度在修改消抖延时后有所改善,但是还是不能达到理想的预期效果,按键有时会不灵敏。
初步估计原因在于独立按键本身按下接触不良好以及独立按键的焊接问题。
6总结与体会
作为电子信息工程专业的大三的学生,课程设计对我们来说并不陌生。
通过对本次课程设计,我对自己以前所修的C语言和单片机都有了更加系统的认识。
更重要的是,本次课程设计让我初次接触到了keil软件和proteus仿真软件,熟系使用这两个软件对我们今后的专业学习和课设都有很大帮助。
同时,在做课设的过程中我认识到自己的很多不足之处,在实际动手操作能力的不足,在进行程序编程时,自己需要,认真审题,看懂题目的要求。
课程设计的出发点就是实现它要求的性能,根据课题要求,复习相关的知识,查询相关的资料。
由课设条件,找到适合的方案,找到需要的元器件及工具。
具体的大致为根据课程设计的要求和自己所要增加的功能写好程序流程图,在程序流程图的基础上,根据芯片的功能写出相应的程序和增加额外的功能程序。
然后再进行程序调试和相应的修改,以达到能够实现所要求的功能的目的。
还要根据自己设计过程中的实际情况,添加些额外程序来使系统更加的稳定,如开关的去抖(采用延迟)。
一般设计的程序会比较长,因此程序要最好在后面加注释,这样在程序出错的检查过程中可以更容易查找的到,也更简洁,更明白易懂。
本次课程设计的程序采用的单片机C语言。
在实验过程遇到了很多小问题,比如蜂鸣器不响,数码管显示不完整等,但是不管怎样最后都通过查阅资料反复调试以及请教学长得到了期望的性能,这是最让我开心的事。
理论与实际的相结合让学习变得更加有趣。
课程设计是对我们综合能力的锻炼与检验,它让我熟悉了整个设计的过程,更系统的锻炼了自己。
在以后的学习生活中我会努力更加深入的学习专业知识,注重动手能力的培养。
7参考文献
[1]郭天祥编著.51单片机C语言教程-入门、提高、开发、拓展全攻略.电子工业出版社,2010.05
[2]李群芳.单片机原理、接口及应用[M].北京:
清华大学出版社,2011
[3]何光明.C语言程序设计与应用开发[M].北京:
清华大学出版社,2013
[4]杨居义.单片机课程设计实例教程[M].北京:
清华大学出版社,2010
[5]赵传申.单片机原理与接口技术应用教程[M].北京:
清华大学出版社,2010
[6]皮大能.单片机课程设计指导书[M].北京:
北京理工大学出版社,2010
本科生课程设计成绩评定表
姓名
胡容
性别
女
专业、班级
电子信息工程1306班
课程设计题目:
可编程倒计时装置
课程设计答辩或质疑记录:
成绩评定依据:
最终评定成绩(以优、良、中、及格、不及格评定)
指导教师签字:
年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课设