多通道百分秒表设计.docx
- 文档编号:2775989
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:25
- 大小:393.58KB
多通道百分秒表设计.docx
《多通道百分秒表设计.docx》由会员分享,可在线阅读,更多相关《多通道百分秒表设计.docx(25页珍藏版)》请在冰点文库上搜索。
多通道百分秒表设计
《单片机原理及应用》
课程设计报告
课题名称
多通道百分秒表设计
学院
专业
班级
学号
姓名
时间
2016年月
指导教师
基于单片机的多通道百分秒表设计
摘要:
近年来随着科技的飞速发展,单片机的运用正在不断的走向深入,同时带动传统控制检测日新月异的更新。
本秒表设计采用8051单片机为中心器件,利用其定时/计数器定时、计数的原理,结合显示电路、按键控制电路等外围电路来完成。
将软、硬件有机的结合起来,使得系统能够实现4位LED显示,显示时间为00.00到99.99秒,每秒自动加一,可以用开关控制开始、停止、复位,并且能拥有多通道(两个或以上)分别计时功能。
其软件系统采用C语言编写程序,包括:
显示程序、中断初始化程序、中断服务程序、显示程序及开关控制程序。
通过KEIL4与PROTEUS进行联合调试,使得硬件与软件有机的结合起来,达到了预期目的。
关键词:
单片机,秒表,多通道
Abstract:
Inrecentyearsalongwiththerapiddevelopmentofscienceandtechnology,thesingle-chipmicrocomputerapplicationisconstantlydeepening,ledthetraditionalcontroltestatthesametimechangerapidlyupdate.Thestopwatchdesignusing8051singlechipasacoredevice,usingthetimer/countertiming,countingprinciples,combinedwithdisplaycircuit,controlcircuitandotherperipheralcircuittocomplete.Thesoft,hardwareoforganiccombination,sothatthesystemcanachieve4LEDdisplay,displaytimeis0to99.99seconds,plusasecondautomatic,canusetheswitchtocontrolstart,stop,reset,andcanhavemultiplechannels(twoormore)arefunctionsoftime.ThesystemsoftwareusingClanguageprogramming,including:
displayprogram,interruptinitialization,interruptserviceroutines,displayandswitchcontrolprocedures.ThroughtheKEIL4andPROTEUSjointdebugging,whichmakeshardwareandsoftwarecombinedwithorganic,toachievetheexpectedgoal.
Keywords:
SingleChipMicrocomputer;Stopwatch;MultiChannel
一、内容提要
1.设计任务
基于AT89C51设计一个5位LED数码作为“多通道百分秒表”。
2设计要求:
(1)、显示时间为00.00—99.99秒,每百分之秒自动加1。
(2)、设计一个有三个按键的键盘。
K1:
“开始”→“停止”→“复位”→“开始”……。
K2:
显示通道数“加一”。
K3:
显示通道数“减一”。
(3)、@设计每到一秒钟有声音或LED指示提醒功能,可通过按钮打开及关闭该提醒功能。
(4)、☆其他功能。
D2、D3小灯按照01、02通道分别计时时间到10秒时熄灭。
(定时:
到某一时间有LED提醒功能)。
3设计提示:
(1)、用6位个7段LED数码管作为显示设备,最高位显示通道号,低4位显示时间。
(2)、可采用定时器,定时时间10ms。
(3)、参考Protuse仿真效果图:
二、步骤及方案
根据系统的设计要求,选择AT89C51单片机作为系统的核心来完成定时、计数的功能,用74HC245来完成数据的锁存和对LED的刷新控制,用外围开关电路实现对单片机的外围输入,用小灯来实现对于计时等功能的提示。
该系统的设计总体思路如下:
开关K1把开始信号传输给AT89C51单片机,单片机开始计数,然后在P2口输出信号,通过74HC245后传输给LED数码管控制数码管位数是否启用,然后P0口传输相对应的信号控制启用的数码管位输出的具体信号。
同理,其余开关的信号分别控制了AT89C51的停止、复位和通到的加减。
外接的小灯接到P1.5、P1.6、P1.7口,分别作用于计时提示。
综上,可知7SEG-MPSX6-CC的最高2位用来显示通道,低四位用来显示时间(00.00到99.99秒),按照功能要求,确定由四个部分组成:
主控制器,开关控制、小灯显示、LED显示。
总体设计电路结构图如图所示:
图02.01总体设计电路结构图
三、硬件设计
1、单片机的选择与外围电路
AT89C51作为秒表计时系统的核心器件。
该器件是INTEL公司生产的MCS-51系列单片机的基础产品,采用了可靠的CMOS工艺制造技术,具有高性能的8位单片机,属于标准的MCS-51的CMOS产品。
不仅结合了HMOS的高速和高密度技术及HMOS的低功耗特征,而且继承和扩展了MCS-48单片机的体系结构和指令系统。
单片机小系统的电路图如图所示。
图03.01单片机的选择与外围电路
2.单片机与显示模块电路
由74HC245芯片和电阻,导线构成,控制锁存单片机输出信号。
74HC245元件的封装:
(1)第1脚DIR,为输入输出端口转换用,DIR=“1”高电平时信号由“A”端输入“B”端输出,DIR=“0”低电平时信号由“B”端输入“A”端输出。
(2)第2~9脚“A”信号输入输出端,A1=B1、、、、、、A8=B8,A1与B1是一组,如果DIR=“1”OE=“0”则A1输入B1输出,其它类同。
如果DIR=“0”OE=“0”则B1输入A1输出,其它类同。
(3)第11~18脚“B”信号输入输出端,功能与“A”端一样,不在描述。
(4)第19脚OE,使能端,若该脚为“1”A/B端的信号将不导通,只有为“0”时A/B端才被启用,该脚也就是起到开关的作用。
(5)第10脚GND,电源地。
(6)第20脚VCC,电源正极。
图03.0274HC245结构图
3.键盘电路
由电源、导线、电阻、开关(K1、K2、K3、K4、K5五个开关)构成,K1连接P1.0口控制开始;K2连接P1.1口控制暂停;K3连接P1.2口控制复位清零;K4连接P1.3口控制通道减1;K5连接P1.4口控制通道加1。
如图:
图03.03键盘电路
4.显示LED电路
由7SEG-MPSX6-CC共阴LED8段位显示器构成:
结构图为:
图03.04显示器结构图
表03.05显示器真值表
显示字符
共阴极接法八段状态
断码
(共阴)
sp
g
f
e
d
c
b
a
0
0
0
1
1
1
1
1
1
3FH
1
0
0
0
0
0
1
1
0
06H
2
0
1
0
1
1
0
1
1
5BH
3
0
1
0
0
1
1
1
1
4FH
4
0
1
1
0
0
1
1
0
66H
5
0
1
1
0
1
1
0
1
6DH
6
0
1
1
1
1
1
0
1
7DH
7
0
0
0
0
0
1
1
1
07H
8
0
1
1
1
1
1
1
1
7FH
9
0
1
1
0
1
1
1
1
6FH
.
1
0
0
0
0
0
0
0
80H
综上则可知:
显示
0
1
2
3
4
5
6
7
8
9
.
断码
3FH
06H
5BH
4FH
66H
6DH
7DH
07H
7FH
6FH
80H
5.外围小灯电路
采用了3个LED小D1、D2、D3,当按钮按下后,3个LED小灯接入电路,接口为:
D1端接到P1.5口、D2端接到P1.6口、D3端接到P1.7口,其中D1小灯按照当前通道隔一秒亮一次,D2、D3小灯按照01、02通道分别计时时间到10秒时熄灭。
如图。
图03.06外围小灯电路
6.整体电路protuus仿真图
图03.07整体电路protuus仿真图
四、软件设计
系统程序包括:
主函数程序、显示函数程序、中断函数程序、开关函数程序、系统初始化函数程序,通道设置函数程序。
主程序结构:
1.系统主函数程序
主程序程序中调用了两个子函数程序,分别是中断初始化函数程序及显示函数程序。
图04.01系统主函数程序图
2.初始化函数程序
图04.02初始化函数程序图
初始化函数程序包括对定时器/计数器的工作方式设定、初值设定。
3、显示函数程序
图04.03显示函数程序图
显示函数程序通过识别两个通道的刷新标志位flag_1和flag_2来实现双通道显示转换。
4.开关函数程序
图04.04开关函数程序图
开关函数程序主要通过P1.0、P1.1、P1.2三个引脚来操作秒表的开始、停止、清零。
5.中断函数程序
图04.05中断函数程
中断函数程序通过P1.3和P1.4控制用户选择的通道数,然后根据开关函数来分别对两个通道的刷新标志位flag_1和flag_2赋值,进而实现通道的互相切换。
五、调试
把程序从KEIL中生成HEX文件,导入单片机中,测试是否实现题目要求的各个功能。
1.由于开始计算中断初始时间不准确,故重新设置初始化时间;
2.经过调试,延时时间设为1000效果最佳;
3.由于3通道数要求过于复杂,故采用双通道设计;
4.由于难以实现一个按键具备:
开始、停止及清零功能,所以只能采用三个按键分别控制。
经过耐心的调试,最终实现设计要求。
PROTEUS仿真图如图:
图05.01一通道图
图05.02二通道图
六、课程设计心得体会
回顾起此次课程设计,感觉受益匪浅,从拿到题目到完成整个编程,从理论实践,学到很多很多的课堂理论中没学到过的东西,不仅对键盘的识别技术这章节的知识点有了深刻的认识,而且对这学期开设的单片机这门课程有了更全面的了解,尤其是在学习使用proteus软件片编程和仿真时收获良多。
通过这次单片机课程设计,还使我懂得了实践的重要性。
同时在程序调试的过程中提高己的发现问题、解决问题、实际动手和独立思考的能力。
使用软件和编写程序时一定要注意每一个细节,一个分号的遗漏也会造成错误。
制作前一定要做好规划设计,反复论证和计算,防止考虑不到的地方使得做好的东西需要翻工。
如果制作或使用中发现问题,既极大地打击积极性和自信心,还会极大地消耗时间,拖延项目的进度。
制作硬件也一定要耐心细致,极小的失误都会造成短路等问题而直接造成大错。
在设计中,如果没有考虑到哪怕何一个细节,都有可能让没考虑到的情况造成失误,使各个子程序的时序和运行之间可能会互相干涉和冲突。
此外遇到问题有时候凭借一个人或一组人的智慧是不好解决的。
我们周围有许多很强的同学,还有许多经验丰富,实力雄厚的学长,通过请教和讨论可以产生一种茅塞顿开的效果。
事情总是越说越明白,而且好多非常有新意和实用价值的想法也是在大家的讨论中得到和发展出来的。
参考文献
[1]刘娟,梁卫文等编著.单片机C语言与PROTEUS仿真技能实训【M】.北京:
中国电力出版社,2010.
[2]彭伟编著.单片机C语言程序设计试训100例—基于8051+Proteus仿真【M】.北京:
电子工业出版社,2009.
[3]吴亦锋、陈德为.单片机原理与接口技术.北京:
电子工业出版社,2010.
[4]边清远、王志强.MCS-51单片机运用开发实用子程序.北京:
人民邮电出版社,2005.
[5]姚国林.单片机原理与应用技术.北京:
清华大学出版社,2009.
附录:
源程序代码
#include"reg51.h"
#defineTHC00xd8
#defineTLC00xf0
voidStarandStop();
unsignedcharcodeDuan[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
//0-9段数码管,共阴极
unsignedcharDataBuffer[4]={0,0,0,0},DataBuffer_1[4]={0,0,0,0},DataBuffer_2[4]={0,0,0,0};
//四个数码管显示数值,数组变量定义
unsignedinta=1;
unsignedinthdrSec_1=0,miao_1=0,hdrSec_2=0,miao_2=0;
bitflag_1=0,flag_2=0;//三个通道数码管刷新标志位
sbitP10=P1^0;
sbitP11=P1^1;
sbitP12=P1^2;
sbitP13=P1^3;
sbitP14=P1^4;
sbitP15=P1^5;
sbitP16=P1^6;
sbitP17=P1^7;
sbitP07=P0^7;
/*************************程序初始化**************************************/
voidtimer1_init()
{
TMOD=0x11;//初始化两个定时器
TR0=1;//启动定时器0
ET0=1;//允许定时器中断
EA=1;//总中断打开
TH0=THC0;
TL0=TLC0;
}
/*********显示程序****************************/
voiddisplay()
{
unsignedcharb;
intx;
while
(1)
{
if(miao_1==10)P16=0;
if(miao_2==10)P17=0;
if(a==1)
{
if(miao_1%2==1)P15=0;
elseif(miao_1%2==0)P15=1;
DataBuffer[0]=DataBuffer_1[0];
DataBuffer[1]=DataBuffer_1[1];
DataBuffer[2]=DataBuffer_1[2];
DataBuffer[3]=DataBuffer_1[3];
}
if(a==2)
{
if(miao_2%2==1)P15=0;
elseif(miao_2%2==0)P15=1;
DataBuffer[0]=DataBuffer_2[0];
DataBuffer[1]=DataBuffer_2[1];
DataBuffer[2]=DataBuffer_2[2];
DataBuffer[3]=DataBuffer_2[3];
}
for(b=0;b<6;b++)
{
P2=0xFF;
switch(b)
{
case0:
P2=0xFE;P0=0x3F;break;
case1:
P2=0xFD;P0=Duan[a];break;
case2:
P2=0xFB;P0=Duan[DataBuffer[0]];break;
case3:
P2=0xF7;P0=Duan[DataBuffer[1]];P07=0x80;break;
case4:
P2=0xEF;P0=Duan[DataBuffer[2]];break;
case5:
P2=0xDF;P0=Duan[DataBuffer[3]];break;
}
for(x=1000;x>1;x--);
}
}
}
/************************中断程序***********************************/
voidtimer0()interrupt1
{
TMOD=0x11;//初始化两个定时器
TH0=THC0;
TL0=TLC0;
/*********************通道设置*****************************************/
if(P13==0)
{
a=1;
}
if(P14==0)
{
a=2;
}
StarandStop();
if(flag_1==1&&flag_2==1)
{
hdrSec_1++;
hdrSec_2++;
if(hdrSec_2>=99)
{
hdrSec_2=0;
miao_2++;
}
if(miao_2>=99)
miao_2=0;
DataBuffer_2[0]=miao_2%100/10;//前两位显示秒表
DataBuffer_2[1]=miao_2%10;
DataBuffer_2[2]=hdrSec_2%100/10;//后两位显示百分秒表
DataBuffer_2[3]=hdrSec_2%10;
if(hdrSec_1>=99)
{
hdrSec_1=0;
miao_1++;
}
if(miao_1>=99)
miao_1=0;
DataBuffer_1[0]=miao_1%100/10;//前两位显示秒表
DataBuffer_1[1]=miao_1%10;
DataBuffer_1[2]=hdrSec_1%100/10;//后两位显示百分秒表
DataBuffer_1[3]=hdrSec_1%10;
}
if(flag_1==1&&flag_2==0)
{
hdrSec_1++;
if(hdrSec_1>=99)
{
hdrSec_1=0;
miao_1++;
}
if(miao_1>=99)
miao_1=0;
DataBuffer_1[0]=miao_1%100/10;//前两位显示秒表
DataBuffer_1[1]=miao_1%10;
DataBuffer_1[2]=hdrSec_1%100/10;//后两位显示百分秒表
DataBuffer_1[3]=hdrSec_1%10;
DataBuffer_2[0]=miao_2%100/10;//前两位显示秒表
DataBuffer_2[1]=miao_2%10;
DataBuffer_2[2]=hdrSec_2%100/10;//后两位显示百分秒表
DataBuffer_2[3]=hdrSec_2%10;
}
if(flag_1==0&&flag_2==1)
{
hdrSec_2++;
if(hdrSec_2>=99)
{
hdrSec_2=0;
miao_2++;
}
if(miao_2>=99)
miao_2=0;
DataBuffer_2[0]=miao_2%100/10;//前两位显示秒表
DataBuffer_2[1]=miao_2%10;
DataBuffer_2[2]=hdrSec_2%100/10;//后两位显示百分秒表
DataBuffer_2[3]=hdrSec_2%10;
DataBuffer_1[0]=miao_1%100/10;//前两位显示秒表
DataBuffer_1[1]=miao_1%10;
DataBuffer_1[2]=hdrSec_1%100/10;//后两位显示百分秒表
DataBuffer_1[3]=hdrSec_1%10;
}
if(flag_1==0&&flag_2==0)
{
DataBuffer_2[0]=miao_2%100/10;//前两位显示秒表
DataBuffer_2[1]=miao_2%10;
DataBuffer_2[2]=hdrSec_2%100/10;//后两位显示百分秒表
DataBuffer_2[3]=hdrSec_2%10;
DataBuffer_1[0]=miao_1%100/10;//前两位显示秒表
DataBuffer_1[1]=miao_1%10;
DataBuffer_1[2]=hdrSec_1%100/10;//后两位显示百分秒表
DataBuffer_1[3]=hdrSec_1%10;
}
}
/**************************开关程序***********************************/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通道 百分 秒表 设计