单片机课程设计十秒秒表.docx
- 文档编号:5903457
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:17
- 大小:784.77KB
单片机课程设计十秒秒表.docx
《单片机课程设计十秒秒表.docx》由会员分享,可在线阅读,更多相关《单片机课程设计十秒秒表.docx(17页珍藏版)》请在冰豆网上搜索。
单片机课程设计十秒秒表
目录
1设计目的1
1.1设计目的1
1.2设计内容和要求1
1.3设计思路1
2设计原理分析2
2.1十秒秒表系统设计2
2.2十秒秒表系统的功能要求2
2.2.1计时显示2
2.2.2中断设置2
2.3十秒秒表系统的基本构成及原理2
2.3.1LED数码管显示器的结构与原理3
2.3.2LED数码管的显示方式4
3系统硬件电路的设计5
3.1系统硬件总电路构成及原理5
3.2主控制部分――AT89C51单片机简介5
3.2.1AT89C51的内部结构功能6
3.2.251单片机的串行接口工作方式7
3.3其它器件8
3.4十秒秒表系统原理图8
3.5设计的连线图9
3.6硬件资源及其分配9
3.7运行步骤10
3.8检测与调试10
3.8.1硬件调试10
3.8.2软件调试11
4系统软件程序的简单设计12
4.1程序框图12
4.2程序13
4.3仿真结果图15
结论17
参考文献18
1设计目的
1.1设计目的
1、通过单片机课程设计,熟练掌握单片机C语言的编程方法,将理论联系到实践中去,提高我们的动脑和动手的能力。
2、通过定时/计数器控制两个LED数码管显示器显示10秒秒表系统的设计,掌握定时/计数器和LED数码管显示器的使用方法,同时掌握简单程序的编写,最终提高我们的逻辑抽象能力。
1.2设计内容和要求
内容:
设计一个开关控制两个LED数码管显示器显示10秒秒表的模拟系统。
要求:
利用单片机的定时/计数器定时,使两个LED数码管显示器分别显示秒位和毫秒位。
1.3设计思路
1、先熟悉实验原理,同时了解定时/计数器的运作,和LED数码管显示器显示0到9数字的原理。
2、绘制电路原理图,编写基本程序,并进行仿真,实现两个LED数码管显示器显示0到9数字的功能。
3、进一步完善程序,并进行仿真,使第二个LED数码管显示器每100毫秒(即0.1秒)显示一个数字,使第一个LED数码管显示器每1秒显示一个数字。
2设计原理分析
2.1十秒秒表系统设计
通过编写程序,实现对LED数码管显示器的控制,进行十秒的计时。
使第二个LED数码管显示器每100毫秒(即0.1秒)显示一个数字,使第一个LED数码管显示器每1秒显示一个数字。
采用单片机内部的I/O口上的P0口和P2口控制两个LED数码管显示器,用P3.7引脚来接收按钮的控制。
2.2十秒秒表系统的功能要求
本设计能模拟基本的十秒秒表显示系统,是用中断的方式计数和控制LED数码管显示器显示数字。
2.2.1计时显示
定时/计数器工作方式寄存器存入定时/计数器工作方式,定时器采用T0定时器0工作于模式1:
16位计数范围。
2.2.2中断设置
每累计2次定时器中断就相当于执行了0.1秒,每累计20次定时器中断就相当于执行了1秒。
2.3十秒秒表系统的基本构成及原理
图2.1系统的总体框图
2.3.1LED数码管显示器的结构与原理
LED数码管显示器是由发光二极管按一定的结构组合起来的显示器件。
在单片机应用系统中通常使用的是8段式LED数码管显示器,它有共阴极和共阳极两种结构,如下图2.2所示。
图2.28段式LED数码管结构
其中图(a)为共阴极结构,8段发光二极管的阴极端连接在一起,阳极端分开控制,使用时公共段接地,要使哪根发光二极管亮,则对应的阳极端接高电平;图(b)为共阳极结构,8段发光二极管的阳极端连接在一起,阴极端分开控制,使用时公共端接电源,要使哪根发光二极管亮,则对应的阴极端接地。
图(c)为引脚图,从a~dp引脚输入不同的8位二进制编码,可显示不同的数字或字符。
通常把控制发光二极管的8位二进制编码称为字段码。
此系统使用的共阴极结构,
“0”~“9”数字的共阴极对应的字段码如表2.1所示。
表2.1“0”~“9”数字对应
显示字符
共阴极字段码
显示字符
共阴极字段码
0
3FH
5
6DH
1
06H
6
7DH
2
5BH
7
07H
3
4FH
8
7FH
4
66H
9
6FH
2.3.2LED数码管的显示方式
LED数码管在显示时,通常有静态显示方式和动态显示方式两种,本系统采用的是静态显示方式。
LED静态显示时,其公共端直接接地,各段选线分别与I/O接口线相连。
要显示字符,直接在I/O线发送相应的字段码,如图2.3所示。
两个数码管的共阴极端直接接地,如果要在第一个数码管上显示数字1,只要在I/O
(1)发送1的共阴极字段码;如果要在第二个数码管上显示2,只要在
I/O
(2)发送2的共阴极字段码。
图2.3两位数码管静态显示
3系统硬件电路的设计
3.1系统硬件总电路构成及原理
实现本设计要求的具体功能,可以选用AT89C51单片机及外围器件构成最小控制系统,2个LED数码管显示器和1个按钮等。
主要器件的选择:
表3-1元器件表
器件
个数
LED数码管显示器
2
晶振(11.0592)
1
排阻
1
电容
3
按钮
1
3.2主控制部分――AT89C51单片机简介
89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
AT89C51单片机为40引脚双列直插芯片,有4个I/O口:
P0、P1、P2、P3,单片机的最小系统如图所示,18引脚和19引脚接时钟脉冲电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器反相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器反相放大器的输出端,第9引脚为复位输入端,接上电容,电阻及开关后构成上电复位电路,20引脚为接地端,40引脚为电源端。
如图所示:
图3.1晶振与单片机的连接
3.2.1AT89C51的内部结构功能
·中央处理器:
中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。
·数据存储器(内部RAM):
数据存储器用于存放变化的数据。
AT89C51中数据存储器的地址空间为256个RAM单元,但其中能作为数据存储器供用户使用的仅有前面128个,后128个被专用寄存器占用。
·程序存储器(内部ROM):
程序存储器用于存放程序和固定不变的常数等。
通常采用只读存储器,且其有种类型,在89系列单片机中全部采用闪存。
AT89C51内部配置了4KB闪存。
·定时/计数器(T0):
定时/计数器用于实现定时和计数功能。
AT89C51共有2个16位定时/计数器。
·并行输入输出(I/O)口:
8051共有4组8位I/O口(P0、P1、P2、P3),用于对外部数据的传输。
每个口都由1个锁存器和一个驱动器组成。
它们主要用于实现与外部设备中数据的并行输入与输出,有些I/O口还有其他功能。
·全双工串行口:
A89C51内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。
·时钟电路:
时钟电路的作用是产生单片机工作所需要的时钟脉冲序列。
·中断系统:
中断系统的作用主要是对外部或内部的终端请求进行管AT89C51共有5个中断源,其中有2个外部中断源和3个内部中断源。
3.2.251单片机的串行接口工作方式
51单片机的串行接口有四种工作方式。
方式0是将SBUF作为8位同步移位寄存器使用(固定波特率);方式1是10位异步通信方式(可变波特率);方式2是11位异步通信方式(固定波特率);方式3是11位异步通信方式(可变波特率)。
图3.2串行接口与单片机的连接
3.3其它器件
LED数码管显示器
根据本设计的特点,采用LED数码管显示器,它是由发光二极管按一定的结构组合起来的显示器件,在单片机应用系统中通常使用的是8段式LED数码管显示器,它有共阴极和共阳极两种结构。
本系统设计采用的是共阴极结构,如下图3.3所示。
图3.3LED数码管显示器
3.4十秒秒表系统原理图
本系统以单片机为核心,系统硬件电路由单片机、排阻、LED数码管显示器、按钮等组成。
如下图所示:
图3.4系统原理
3.5设计的连线图
图3.5实物图
3.6硬件资源及其分配
主要用到的硬件:
P0口、P2口、LED数码管显示器、按钮、定时器T0。
硬件分配:
(1)P0口、P2口:
各连接一个LED数码管显示器。
(2)定时/计数器T0:
用来产生50毫秒的定时。
(3)按钮:
用来对秒表器开始、暂停、清零。
3.7运行步骤
1、按硬件图接线,为了确保LED数码管显示器能够正确显示,P0口和P2口和两个数码管显示器连接应该注意。
按钮接P3.7引脚。
2、开始运行,点击按钮观察两个LED数码管显示器显示是否与程序设计思路对应,如果有偏差,则单步运行或断点运行,进行调试,直至满足设计要求。
3、整体运行,点击按钮观察两个LED数码管显示器显示是否都符合要求,如果不符合,则再调试,直至满足要求。
3.8检测与调试
3.8.1硬件调试
硬件调试是利用开发系统、基本测试仪器(万用表、示波器等),检查用户系统硬件中存在的故障。
硬件调试可分为静态调试与动态调试两步进行。
◆静态调试
静态调试是在用户系统未工作时的一种硬件检测。
第一步:
目测。
检查外部的各种元件或者是电路是否有断点。
第二步:
用万用表测试。
先用万用表复核目测中有疑问的连接点,再检测各种电源线与地线之间是否有短路现象。
第三步:
加电检测。
给电路板加电,检测所有的插座或是器件的电源端是否符合要求的值
第四步:
是联机检查。
因为只有用单片机开发系统才能完成对用户系统的调试。
◆动态调试
动态调试是在用户系统工作的情况下发现和排除用户系统硬件中存在的器件内部故障、器件连接逻辑错误等的一种硬件检查。
动态调试的一般方法是由近及远、由分到合。
由分到合是指首先按逻辑功能将用户系统硬件电路分为若干块,当调试电路时,与该元件无关的器件全部从用户系统中去掉,这样可以将故障范围限定在某个局部的电路上。
当各块电路无故障后,将各电路逐块加入系统中,在对各块电路功能及各电路间可能存在的相互联系进行调试,由分到合的调试就完成。
由近及远是将信号流经的各器件按照距离单片机的逻辑距离进行由近及远的分层,然后分层调试。
调试时,仍采用去掉无关元件的方法,逐层调试下去,就会定位故障元件。
3.8.2软件调试
软件调试是通过对用户程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。
编辑程序后,查看程序是否有逻辑错误。
4系统软件程序的简单设计
4.1程序框图
图4.1程序框图
4.2程序
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitK1=P3^7;//设置一位K1来接收按钮
//设置一个变量i来计算中断的次数,设置一个Second_Counts
来计数,再设置一个Key_Flag_Idx来计算按下按钮的次数
uchari,Second_Counts,Key_Flag_Idx;
bitKey_State;//设置一个变量判断是否按下按钮
ucharDSY_CODE[]=//设置共阴极结构数码管显示的数字“0”-“9”
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
};
voidDelayMS(uintms)//定义一个延迟函数
{
uchart;
while(ms--)
{
for(t=0;t<120;t++);
}
}
voidKey_Event_Handle()//按下按钮以后执行的函数
{
if(Key_State==0)
{
Key_Flag_Idx=(Key_Flag_Idx+1)%3;
switch(Key_Flag_Idx)
{
case1:
EA=1;ET0=1;TR0=1;break;//按下按钮第一次启动中断,启动
计数器中断,定时器启动
case2:
EA=0;ET0=0;TR0=0;break;//按下按钮第二次关闭中断,关闭
计数器中断,定时器关闭
case0:
P0=0x3f;P2=0x3f;i=0;Second_Counts=0;//清零
}
}
}
voidmain()
{
P0=0x3f;//P0口显示数字“0”
P2=0x3f;//P2口显示数字“0”
i=0;
Second_Counts=0;
Key_State=1;
TMOD=0x01;//设置工作方式1
TH0=(65535-50000)/256;//设置计数器初始值
TL0=(65535-50000)%256;
while
(1)
{
if(Key_State!
=K1)
{
DelayMS(10);//延时
Key_State=K1;
Key_Event_Handle();//进入按下按钮函数
}
}
}
voidDSY_Refresh()interrupt1//中断函数
{
TH0=(65535-50000)/256;//再次设置计数器初始值
TL0=(65535-50000)%256;
if(++i==2)//执行两次中断相当于0.1秒
{
i=0;
++Second_Counts;//秒数增1
P0=DSY_CODE[Second_Counts/10];//P0口显示秒位
P2=DSY_CODE[Second_Counts%10];//P2口显示毫秒位
if(Second_Counts==100)Second_Counts=0;//增至10秒后清零
}
}
4.3仿真结果图
图4.2初始化图
图4.3按下按钮开始运行图
图4.4再次按下按钮暂停图
图4.5再次按下按钮清零图
结论
在这次课程设计中,我们组完成了基于单片机的定时/计数器控制两个LED数码管显示器显示10秒秒表系统的设计与模拟。
包括LED数码管显示器显示“0”-“9”的设计,系统的硬件开发、软件编程与仿真调试等。
总体上说,在本次课程设计过程中,我不仅完成了老师交给我们的任务,还进一步增加了许多关于单片机方面的知识,同时也增强了我的思维能力。
我了解到了单片机C语言程序和通用C语言程序的区别,对我编写单片机C语言程序有了进一步的提高。
在完成这次课程设计后,使我对单片机方面又有了一定的认识,丰富了我的程序开发经验,提高了程序的编写水平,加深了在课堂中、书本上学到的知识和理论,并使其在实际开发中得到运用,同时通过编写课程设计报告,掌握了软件文档的书写和书写格式。
参考文献
【1】谢维成著,单片微型计算机原理及应用,清华大学出版社,2009.
【2】余锡存,曹国华著,单片机原理及接口技术,西安电子科技大学出版社,2011.
【3】雷丽文,等著,微机原理与接口技术,电子工业出版社,1997.
【4】吴黎明,王桂棠,洪添胜等著,单片机原理及应用技术,科学出版社,2005.
【5】韩克,柳秀山等著,电子技能与EDA技术,暨南大学出版社,2004.
【6】张毅坤著,单片微型计算机原理及应用,西安电子科技大学出版社,1998.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 秒表