单片机控制8位数码管显示秒表课程设计.docx
- 文档编号:9584850
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:20
- 大小:268.21KB
单片机控制8位数码管显示秒表课程设计.docx
《单片机控制8位数码管显示秒表课程设计.docx》由会员分享,可在线阅读,更多相关《单片机控制8位数码管显示秒表课程设计.docx(20页珍藏版)》请在冰豆网上搜索。
单片机控制8位数码管显示秒表课程设计
长沙学院
《单片机原理及应用》
课程设计说明书
题目
LED数码管显示电子秒表设计
系(部)
**系
专业(班级)
*************
姓名
邹部长9931
学号
******
指导教师
***
起止日期
2016.12.19—2016.12.24
《单片机原理及应用》课程设计任务书1
系(部):
**系专业:
******
课题名称
LED数码管显示电子秒表设计
设计内容及要求
1、课题内容:
设计一种基于AT89S52单片机的电子计时秒表,要求如下:
(1)、能正确显示时间,时钟由八位数码管显示,显示格式为:
XX分XX秒XX(十分之一、百分之一)秒。
(2)、设置一个独立式按键,第一次按键计时开始,第二次按键暂停,第三次按键清零。
2、要求:
完成该系统的硬件和软件的设计,在自己焊接好的单片机开发板上调试通过,并提交一篇课程设计说明书。
设计工作量
1、汇编或C51语言程序设计;
2、程序调试;
3、在自己焊接好的单片机开发板上调试通过;
4、提交一份完整的课程设计说明书,包括设计原理、程序设计、程序分析、调试过程,参考文献、设计总结等。
进度安排
起止日期(或时间量)
设计内容(或预期目标)
备注
第一天
课题介绍,答疑,收集材料,焊接
第二天
51单片机开发板焊接调试
第三天
设计方案论证,练习编写C51程序
第四天
程序调试、仿真
第五天
系统测试并编写设计说明书
教研室
意见
年月日
长沙学院课程设计鉴定表
姓名
邹部长9931
学号
****
专业
***
班级
02
设计题目
LED数码管显示电子秒表设计
指导教师
**
指导教师意见:
评定成绩:
教师签名:
日期:
答辩小组意见:
评定成绩:
答辩小组长签名:
日期:
教研室意见:
最终评定等级:
教研室主任签名:
日期:
说明
课程设计成绩分“优秀”、“良好”、“中等”、“及格”、“不及格”五等。
摘要
随着经济与社会的发展对智能化和信息化技术要求的不断提高,单片机作为智能控制的核心,逐渐渗透到社会生产和生活的各个方面。
而本文则主要阐述基于单片机设计的数码管秒表,这次设计所采用的的单片机为stc89c52单片机,数码管则是使用2个4位共阴LED数码管组成的8位。
为减少I/O口,而使用了SM74HC138和74HCT573这2片芯片实现数码管显示8位数据。
利用单片机内部定时器实现计时功能,分别显示为:
分—秒—0.01秒。
控制则是使用一键控制,可实现计时开始,计时暂停,计时清零3个功能的循环。
本次的程序设计采用C语言编写,包括显示程序,定时中断服务程序,延时程序。
最后在单片机电路板来观察工作状态。
第一章概述
1.1电子秒表的设计要求
显示要求在初始状态显示的是00—00—00,最左边的2位显示分钟,中间2位显示秒,左边2位显示十分之一秒和百分之一秒,还有个2个LED数码管只显示中间那一段,用作间隔符。
然后还的有一个键用来控制秒表,要求按第一下开始计时,按第二下暂停计时,按第三下清零,以此往复循环控制。
使用单片机T0方式实现计时0.01秒。
1.2电子秒表的电路图
1.3电子秒表的设计原理及方案
设计原理根据单片机本身的定时计数器实现1秒的计时。
再按照要求,确定如下图所示的3个模块。
实现的方案:
1秒计时采用定时中断完成,利用T0中断设置初值定时为0.01秒,然后在中断程序里加一个计数变量,就是每次次中断,这个变量就加1,也就是每0.01秒加1,加到100也就是一秒的时候进位,以此实现一秒的计时。
显示电路的实现则使用LED动态显示方式来时LED数码管显示数字
按键功能的实现使用按键扫描的方法实现,每次扫描到有按键按下,设置一个变量使变量加一加到三的时候把变量置零,变量的每个数值代表一个功能,实现一键多功能循环。
第二章电子秒表的程序设计
2.1程序设计流程图
主程序:
中断子程序:
设置count为最低2位数,a为中间2位数(秒),b为最高2位数(分)
2.2程序设计源代码
#include
#defineENABLE0
#defineDISABLE1
#defineDATAP0
unsignedn=0;
unsignedchara,b,count=0,i,j=0,x,u[8];
sbithc138s_enable=P1^3;
sbithc138s_a=P1^0;
sbithc138s_b=P1^1;
sbithc138s_c=P1^2;
sbitk1=P3^4;
unsignedcharcodetable[]=//共阴极0~9数码管编码
{
0x3f,0x06,0x5b,0x4f,//0~3
0x66,0x6d,0x7d,0x07,//4~7
0x7f,0x6f//8~9
};
voiddelay_ms(unsignedintnms);
voidchose7s(unsignedcharnum);
voidchose7ss(unsignedcharnumm);
voidtimer0_init(void)
{
TMOD=0X01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
ET0=1;
EA=1;
TR0=1;
}
/*********************************************************************/
/*用作数码管最初显示状态*/
/*********************************************************************/
voids1()
{
for(j=0;j<8;j++)
{
if(j==2||j==5)
{
chose7s(j);//使能某位数码管
DATA=0x40;
delay_ms
(2);
}
else
{
chose7s(j);
DATA=0x3f;
delay_ms
(2);
}
}
}
voids2()
{//timer0_init();
for(i=0;i<10;i++)//扫描
{
for(j=0;j<8;j++)
{
if(j==2||j==5)
{
chose7s(j);
DATA=0x40;
delay_ms
(2);
}
else
{
chose7s(j);
x=u[j];
DATA=table[x];
delay_ms
(2);
}
}
}
}
/**************************按键功能*************************************/
voidkey1()
{
if(k1==0)
{
delay_ms(20);
if(k1==0)
{
n++;
if(n==3)
{
n=0;
count=0;
b=0;
a=0;
}
while(!
k1);
}
}
}
/*******************************************************************************
*函数名:
main*
*函数功能:
主函数*
*输入:
无*
*输出:
无*
*******************************************************************************/
voidmain(void)
{
while
(1)
{
key1();
switch(n)
{
case0:
s1();
break;
case1:
timer0_init();
s2();
break;
case2:
TR0=0;
s2();
break;
}
}
}
/*******************************************************************************
*函数名:
chose7s*
*函数功能:
使能某个数码管*
*输入:
数码管编号*
*输出:
无*
*******************************************************************************/
voidchose7s(unsignedcharnum)
{
hc138s_enable=ENABLE;
switch(num)
{
case0:
//第1个数码管
hc138s_a=0;
hc138s_b=0;
hc138s_c=0;
//P0=0x3f;
break;
case1:
//第2个数码管
hc138s_a=1;
hc138s_b=0;
hc138s_c=0;
//P0=0x3f;
break;
case2:
//第3个数码管
hc138s_a=0;
hc138s_b=1;
hc138s_c=0;
//P0=0x40;
break;
case3:
//第4个数码管
hc138s_a=1;
hc138s_b=1;
hc138s_c=0;
//P0=0x3f;
break;
case4:
//第5个数码管
hc138s_a=0;
hc138s_b=0;
hc138s_c=1;
//P0=0x3f;
break;
case5:
//第6个数码管
hc138s_a=1;
hc138s_b=0;
hc138s_c=1;
//P0=0x40;
break;
case6:
//第7个数码管
hc138s_a=0;
hc138s_b=1;
hc138s_c=1;
//P0=0x3f;
break;
case7:
//第8个数码管
hc138s_a=1;
hc138s_b=1;
hc138s_c=1;
//P0=0x3f;
break;
default:
hc138s_enable=DISABLE;
break;
}
hc138s_enable=DISABLE;
}
/*******************************************************************************
*函数名:
delay_ms
*函数功能:
延时
*输入:
n
*输出:
无
*******************************************************************************/
voiddelay_ms(unsignedintnms)
{
unsignedinti,j;
for(i=nms;i>0;i--)
for(j=55;j>0;j--);
}
/*****************************************************************************/
/*1/100秒计时*/
/*****************************************************************************/
voidT0_time()interrupt1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
count++;
if(count==100)
{
count=0;
a++;
if(a==60)
{
a=0;
b++;
if(b==60)
{
b=0;
a=0;
count=0;
}
}
}
u[7]=count%10;
u[6]=count/10;
u[4]=a%10;
u[3]=a/10;
u[1]=b%10;
u[0]=b/10;
}
第三章程序的调试
把程序写进keil中然后点击生成.hex文件,再使用下载软件下载到自己的单片机板子上,在板子上观察程序运行结果,试着按一下接好的按钮,是否达到所设置的效果。
调试效果如下图:
经过调试能达到所设计的效果。
第四章设计总结
本次的课程设计是每人抽签决定自己所要做的任务,说实在话,当我看到我抽到的是这个任务是,心里暗喜,因为我觉的这是一个相比较于其他的任务来说是比较简单的。
然后第二天花了一天的时间去焊接自己的电路板。
前面几个学期我们也都焊接过电路板,可是那都是一些大的元器件,而这次则增大了难度,还得自己焊接贴片,这就很需要耐心和细心的事情,所以通过整整一天的时间才焊接好,很多地方焊的简直不能看,心想希望能用吧,不然时间全白浪费了。
功夫不负有心人,最后测试通过。
说明可以使用这个板子烧写程序,于是当天晚上我就迫不及待的回到寝室开始设计本次实验的程序。
任务要求是设计一个数码管秒表,能正确显示时间,时钟由八位数码管显示,显示格式为:
XX分XX秒XX(十分之一、百分之一)秒。
首先我想到的就是利用单片机的本身定时器实现百分之一秒的计时,这个倒是没问题,问题就是最低2位为100进制,而分钟和秒钟则是要求60进制的。
于是我就在定时中断程序里设计3个变量分别来表示,分—秒—百分之一秒。
以此来解决了进制不统一的问题。
这个问题解决后,那就该想怎么把数字显示到数码管上面去,我们的板子利用的是74HC138译码器来进行数码管的位选,用74HCT573来控制数码管段选。
这2个芯片我都忘的差不多了,于是又去翻阅《数字电子技术》来学习,然后又去请教了学长关于数码管显示的控制,在学长提供的资料下最终确定数码管显示程序的编写。
本次按键的多功能实现则是选择了查询法实现。
这些都是设计上的问题。
在调试过程中也遇到了很多问题,一开始用的下载工具,怎么也下载不进去,后来问了学长才知道是我没选对单片机型号。
可是下载成功后,运行发现数码管显示有点闪烁,上网查阅资料才知道,由于数码管显示使用的是动态扫描,所以在软件设计中的延时程序要设计好,延时过大会产生闪烁,延时过小则会亮度不够。
最后通过一次又一次的试验确定了最总的延时程序,既保证了亮度,也保证了不闪烁。
此次课程设计师经过同学,学长和老师的帮助得以完成并且在最后的答辩中老师给予了肯定。
通过这次课程设计,不仅在焊接电路板的处理上有了很大的进步,而且在单片机的程序设计上也是受益匪浅,也更加深入理解了单片机控制数码管显示的原理及应用。
这都得感谢此次的老师,和学长的帮助。
参考文献
[1]曾屹,刘辉.单片机原理与应用[M].长沙:
中南大学出版社,2012
[2]康光华.电子技术基础(第5版)[M].北京:
高等教育出版社,2006
[3]彭楚武,张志文.微机原理与接口技术(第2版)[M].长沙:
湖南大学出版社,2011
本文仅供参考作者水平有限,如有贻误请自行改正。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 控制 数码管 显示 秒表 课程设计