04170110 电气一班 康定升 多通道百分秒表Word文档下载推荐.docx
- 文档编号:16660206
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:22
- 大小:366.66KB
04170110 电气一班 康定升 多通道百分秒表Word文档下载推荐.docx
《04170110 电气一班 康定升 多通道百分秒表Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《04170110 电气一班 康定升 多通道百分秒表Word文档下载推荐.docx(22页珍藏版)》请在冰豆网上搜索。
1.设计任务3
2.主要功能3
3.设计提示3
二、步骤及方案3
三、硬件设计4
1.单片机的选择与外围电路4
2.单片机与显示模块电路5
3.开关电路6
4.显示LED电路6
5.外围小灯电路7
6.整体电路protuus仿真图8
四、软件设计8
1.系统主函数程序8
2.初始化函数程序9
3.显示函数程序9
4.开关函数程序10
5.中断函数程序11
五、调试12
六、课程设计体会13
七、参考文献13
附录:
14
源程序代码14
一、内容提要
1.设计任务
基于AT89C51设计一个5位LED数码作为“多通道百分秒表”。
2.主要功能
(1)、显示时间为00.00到99.99,每百分之一秒自动加一。
(2)、设计一个有五个按键的键盘。
K1:
开始,K2:
停止,K3:
复位,K4通道加1,K5:
通道减1。
(3)、◎设计LED提醒,即D1小灯按照当前通道隔一秒亮一次,可以通过开关关闭该功能。
(4)、☆其他功能:
D2、D3小灯按照01、02通道分别计时时间到10秒时熄灭。
(定时:
到某一时间有LED提醒功能)。
3.设计提示
(1)、用1个6位7段LED数码管作为显示设备,最高位显示通道号,低四位显示时间。
(2)、可采用定时器,定时时间为10MS。
(3)、可参考proteus仿真图
二、步骤及方案
根据系统的设计要求,选择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显示。
总体设计电路结构图如图所示:
三、硬件设计
1.单片机的选择与外围电路
AT89C51作为秒表计时系统的核心器件。
该器件是INTEL公司生产的MCS-51系列单片机的基础产品,采用了可靠的CMOS工艺制造技术,具有高性能的8位单片机,属于标准的MCS-51的CMOS产品。
不仅结合了HMOS的高速和高密度技术及HMOS的低功耗特征,而且继承和扩展了MCS-48单片机的体系结构和指令系统。
单片机小系统的电路图如图所示。
AT89C51单片机的主要特征:
(1)与MCS-51兼容,4K字节可编程闪烁存储器;
(2)灵活的在线系统编程,掉电标识和快速编程特性;
(3)寿命为1000次写/擦周期,数据保留时间可10年以上;
(4)全静态工作模式:
0HZ~33HZ;
(5)三级程序存储器锁定;
(6)128×
8位内部RAM,32位可编I/O线;
(7)两个16位定时器/计数器,5个中断源,4个8位并行的I/O接口,1个全双工I/O接口。
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,电源正极。
74HC245真值表:
3.开关电路
由电源、导线、电阻、开关(K1、K2、K3、K4、K5五个开关)构成,K1连接P1.0口控制开始;
K2连接P1.1口控制暂停;
K3连接P1.2口控制复位清零;
K4连接P1.3口控制通道减1;
K5连接P1.4口控制通道加1。
如图:
图开关电路
4.显示LED电路
由7SEG-MPSX6-CC共阴LED8段位显示器构成:
结构图为:
其真值表为:
显示字符
共阴极接法八段状态
断码
(共阴)
sp
g
f
e
d
c
b
a
1
3FH
06H
2
5BH
3
4FH
4
66H
5
6DH
6
7DH
7
07H
8
7FH
9
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秒时熄灭。
如图。
6.整体电路protuus仿真图
四、软件设计
系统程序包括:
主函数程序、显示函数程序、中断函数程序、开关函数程序、系统初始化函数程序,通道设置函数程序。
主程序结构:
1.系统主函数程序
主程序程序中调用了两个子函数程序,分别是中断初始化函数程序及显示函数程序。
2.初始化函数程序
初始化函数程序包括对定时器/计数器的工作方式设定、初值设定。
3.显示函数程序
显示函数程序通过识别两个通道的刷新标志位flag_1和flag_2来实现双通道显示转换。
4.开关函数程序
开关函数程序主要通过P1.0、P1.1、P1.2三个引脚来操作秒表的开始、停止、清零。
5.中断函数程序
中断函数程序通过P1.3和P1.4控制用户选择的通道数,然后根据开关函数来分别对两个通道的刷新标志位flag_1和flag_2赋值,进而实现通道的互相切换。
五、调试
把程序从KEIL中生成HEX文件,导入单片机中,测试是否实现题目要求的各个功能。
1.由于开始计算中断初始时间不准确,故重新设置初始化时间;
2.经过调试,延时时间设为1000效果最佳;
3.由于3通道数要求过于复杂,故采用双通道设计;
4.由于难以实现一个按键具备:
开始、停止及清零功能,所以只能采用三个按键分别控制。
经过耐心的调试,最终实现设计要求。
PROTEUS仿真图如图:
通道一
通道二
六、课程设计体会
通过两周的设计实训,让我们了解了设计电路的程序的基本步骤,以及多通道百分秒表的原理。
同时在软件设计编程上,我们了解到了很多编程方面的方法和技巧,并且使我们对单片机及其他芯片的各个引脚的功能有更深的了解,巩固了单片机的书面知识,发现了以往在学习中忽略的东西,明白了在实际的设计工作中只有书面知识是不够的,只有在自己的实践中才能发现问题并解决问题,从而不再犯眼高手低的错误。
在这次的课程设计过程中,我们运用了以前学过的专业知识,如Protues仿真、汇编语言、C语言、模拟和数字电路的知识等。
并且查阅大量的设计资料,每一步都有可能出现的问题,我们所做的就是迎接问题,改正错误,使自己的作品更加完善。
在学习过程中带着问题去学习我发现效率很高,这就是在这次课程设计中的又一个收获。
要做好一个课程设计,就必须做到在课程设计之前,对所用单片机的内部结构有一个系统的理解,知道该单片机有哪些资源:
要有一个清晰的思路和一个完整的软件电路图;
在程序设计时,不能妄想一次将整个程序设计好,反复修改、不断改进是程序设计的必经之路,要养成注释程序的好习惯,这样为资料的保留和交流提供了方便。
总的来说,通过这次的课程设计更进一步地增强了实验的动手能力,提高了组成系统、编程、调试的动手能力。
在今后的学习生活中,要牢记在实验中的经验教训,争取获得更大的进步。
并且在这次在这次设计中,我们了解到了团队合作的重要性,对以后步入社会积累了很好的经验。
七、参考文献
梁立、解敏C程序设计实例教程清华大学出版社;
秦曾煌电工学(第六版)高等教育出版社;
吴亦锋、陈德为单片机原理与接口技术电子工业出版社;
边清远、王志强MCS-51单片机运用与开发使用子程序人民邮电出版社
源程序代码
#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];
case2:
P2=0xFB;
P0=Duan[DataBuffer[0]];
case3:
P2=0xF7;
P0=Duan[DataBuffer[1]];
P07=0x80;
case4:
P2=0xEF;
P0=Duan[DataBuffer[2]];
case5:
P2=0xDF;
P0=Duan[DataBuffer[3]];
}
for(x=1000;
x>
1;
x--);
}
/**********************************************中断程序***********************************************************/
voidtimer0()interrupt1
/***********************************************通道设置************************************************************/
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>
hdrSec_1=0;
miao_1++;
if(miao_1>
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;
flag_2==0)
miao_1=0;
if(flag_1==0&
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;
/**************************************************开关程序**********************************************************/
//三键分别为:
开始、停止、清零(正确程序)
voidStarandStop()
if(P10==0)
flag_1=1;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 04170110 电气一班 康定升 多通道百分秒表 电气 一班 康定 通道 百分 秒表