单片机基于at89c51的60秒倒计时设计Word下载.docx
《单片机基于at89c51的60秒倒计时设计Word下载.docx》由会员分享,可在线阅读,更多相关《单片机基于at89c51的60秒倒计时设计Word下载.docx(12页珍藏版)》请在冰豆网上搜索。
![单片机基于at89c51的60秒倒计时设计Word下载.docx](https://file1.bdocx.com/fileroot1/2023-2/1/2609370c-6ce6-4306-a022-19309dd1848c/2609370c-6ce6-4306-a022-19309dd1848c1.gif)
1.1课程设计的目的和要求
1.目的
课程设计是单片机课程教学的最后一个环节,是对学生进行全面的系统的训练。
进行课程设计可以让学生把学过的比较零碎的知识系统化,真正的能够把学过的知识落到实处,能够开发简单的系统,也进一步激发了学生再深一步学习的热情,因此课程设计是必不可少的,是非常必要的。
课程设计是提高学生单片机技术应用能力以及文字总结能力的综合训练环节,是配合单片机课程内容掌握、应用得的专门性实践类课程。
通过典型实际问题的实际,训练学生的软硬件的综合设计、调试能力以及文字组织能力,建立系统设计概念,加强工程应用思维方式的训练,同时对教学内容做一定的扩充。
2.要求
单片机控制的60s倒计时
(1)用单片机AT89C51的定时器实现60s倒计时。
本例中用两位数码管静态显示倒计时秒值。
(2)用PROTEUS设计,仿真基于AT89c51单片机的60s倒计时实验。
3.目标
通过课程设计,使自己深刻理解并掌握基本概念,掌握单片机的基本应用程序设计及综合应用程序设计的方法。
通过做一个综合性训练题目,达到对内容的消化、理解并提高解决问题的能力的目的。
1.2总体设计
图1:
60秒倒计时总体电路设计
本设计由硬件设计和软件设计两部分组成,总电路如图1所示,硬件设计主要包括单片机芯片选择,数码管选择及晶振,电容,电阻等元器件的选择及其参数的确定;
软件设计主要是实现60秒倒计时程序的编写,包括利用中断实现1秒的定时及60秒的倒计时。
具体设计:
通过AT89C51型号单片机,由P1和P2两组I/O引脚分别控制两个7SEG–COM–ANODE型号数码管,分十位控制和个位控制,达到显示60秒倒计时的目的。
通过复位电路,在仿真过程中点击开关实现60复位。
第二章硬件设计
2.1AT89C51的芯片概述
AT89C51是一个低功耗,高性能CMOS8位单片机,片内含4kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89C51可为许多嵌入式控制应用系统提供高性价比的解决方案。
AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
其工作电压在4.5-5V,一般我们选用+5V电压。
外形及引脚排列如图2所示
图2:
89C51的核心电路框图
●主要特性
·
与MCS-51兼容
·
4K字节可编程闪烁存储器
寿命:
1000写/擦循环
数据保留时间:
10年
全静态工作:
0Hz-24MHz
三级程序存储器锁定
128×
8位内部RAM
32可编程I/O线
两个16位定时器/计数器
5个中断源
可编程串行通道
低功耗的闲置和掉电模式
片内振荡器和时钟电路
●管脚说明
(1)电源及时钟引脚(4个)
Vcc:
电源接入引脚
Vss:
接地引脚
XTAL1:
晶振震荡器接入的一个引脚(采用外部振荡器时,此引脚接地);
XTAL2:
晶体振荡器的另一个引脚(采用外部振荡器时,此引脚作为外部振荡器信号的输入端)。
(2)控制线引脚(4个)
RST/Vpd:
复位信号输入引脚/备用电源输入引脚;
ALE:
地址锁存允许信号输出引脚/编程脉冲输入引脚:
EA:
内外存储器选择引脚/片外EPROM编程电压输入引脚;
PSEN:
外部程序存储器选通信号输出引脚。
(3)并行I/O引脚
P0.0-P0.7:
一般I/O口引脚或数据/低位地址总线复用引脚;
P1.0-P1.7:
一般I/O口引脚;
P2.0-P2.7:
一般I/O口引脚或高位地址总线引脚;
P3.0-P3.7:
一般I/O口引脚或第二功能引脚
●振荡器特性:
XTAL1和XTAL2分别为反向放大器的输入和输出。
该反向放大器可以配置为片内振荡器。
石晶振荡和陶瓷振荡均可采用。
如采用外部时钟源驱动器件,XTAL2应不接。
有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
2.2LED数码管显示器概述
本设计中采用的是7SEG–COM–ANODE型号数码管,它是一种半导体发光器件,其基本单元是发光二极管。
实物如图3所示:
图3:
7SEG–COM–ANODE型号数码管
●数码管的分类
数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);
按能显示多少个“8”可分为1位、2位、4位等等数码管;
按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。
共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。
共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。
当某一字段的阴极为高电平时,相应字段就不亮。
。
共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。
共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。
当某一字段的阳极为低电平时,相应字段就不亮。
LED数码管有两种连接方法如下:
共阳极接法。
把发光二极管的阳极连在一起构成公共阳极,使用时公共阳极接+5V,每个发光二极管的阴极通过电阻与输入端相连。
共阴极接法。
把发光二极管的阴极连在一起构成公共阴极,使用时公共阴极接地。
每个发光二极管的阳极通过电阻与输入端相连。
LED数码显示器的显示段码。
为了显示字符,要为LED显示器段码(或称字形代码),组成一个8字形字符的7段,再加上1个小数点位,共计8段,因此提供给LED显示器的显示段码为1个字节。
各段码位的对应关系如下表所示.十六进制数及空白字符与P的显示段码
段码位
D7
D6
D5
D4
D2
D1
D0
显示段
pd
g
f
e
d
b
a
字型
共阳极段码
共阴极段码
0
C0H
3FH
9
90H
1
F9H
06H
A
88H
2
A4H
5BM
B
83H
3
B0H
4FH
C
C6H
4
99H
66H
D
A1H
5
92H
6DH
E
86H
6
82H
7DH
F
84H
7
F8H
07H
空白
FFH
8
80H
7FH
P
8CH
●数码管的驱动方式
数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。
①静态显示驱动:
静态驱动也称直流驱动。
静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。
静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×
8=40根I/O端口来驱动,要知道一个89S51单片机可用的I/O端口才32个呢:
),实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。
②动态显示驱动:
数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"
a,b,c,d,e,f,g,dp"
的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。
通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。
●数码管参数
8字高度:
8字上沿与下沿的距离。
比外型高度小。
通常用英寸来表示。
范围一般为0.25-20英寸。
长*宽*高:
长——数码管正放时,水平方向的长度;
宽——数码管正放时,垂直方向上的长度;
高——数码管的厚度。
时钟点:
四位数码管中,第二位8与第三位8字中间的二个点。
一般用于显示时钟中的秒。
●数码管应用
数码管是一类显示屏通过对其不同的管脚输入相对的电流会使其发亮从而显示出数字
能够显示时间日期温度等所有可用数字表示的参数
由于它的价格便宜使用简单在电器特别是家电领域应用极为广泛空调热水器冰箱等等
绝大多数热水器用的都是数码管其他家电也用液晶屏与荧光屏
●数码管使用的电流与电压
电流:
静态时,推荐使用10-15mA;
动态时,16/1动态扫描时,平均电流为4-5mA,峰值电流50-60mA。
电压:
查引脚排布图,看一下每段的芯片数量是多少?
当红色时,使用1.9V乘以每段的芯片串联的个数;
当绿色时,使用2.1V乘以每段的芯片串联的个数。
●怎样测量数码管引脚,分共阴和共阳?
找公共共阴和公共共阳:
首先,我们找个电源(3到5伏)和1个1K(几百欧的也行)的电阻,VCC串接个电阻后和GND接在任意2个脚上,组合有很多,但总有一个LED会发光的,找到一个就够了,然后GND不动,VCC(串电阻)逐个碰剩下的脚,如果有多个LED(一般是8个),那它就是共阴的了。
相反用VCC不动,GND逐个碰剩下的脚,如果有多个LED(一般是8个),那它就是共阳的。
也可以直接用数字万用表,红表笔是电源的正极,黑表笔是电源的负极。
2.3其他元器件介绍及参数选择
本设计中还用到其他一些元器件,例如:
晶振,电容,电阻排,电解电容,开关等等。
晶振采用频率为12MHZ,连接的两个电容为30pF;
电阻排为470*8,能够实现8个470欧电阻的等效替换;
电解电容为10u;
开关功能是在仿真过程中,按下开关便能实现60秒复位。
第3章软件设计
3.1程序框图
3.2定时/计数器初值计算
(1)本电路应用TIMER0MODE16位计数器的计时中断法。
(2)1秒等于1000000微秒,而每一计时脉冲是1微秒,因此需输入100000个计时脉冲,方可达到1秒的时间。
本设计中,设定中断每次溢出时间50ms。
(3)由上式得知,循环20次即可达到1秒定时,即:
N=t/Tcy=0.05s/0.000001=5000
X=65536-5000=15536=3CB0H
(4)由上式得知5000个脉冲,首先需设定TL0=3CH,TH0=0B0H,此时第1次只要输入5000个脉冲输入,就会溢出;
第2次至第20次,则需每1000000个计时脉冲,定时1秒。
(5)上电时,显示60,开始倒数计时按下开关实现复位。
3.3软件程序
ORG0000H
AJMPMAIN
ORG0030H
MAIN:
MOVR2,#60;
计数初值
LOOP1:
MOVA,R2
MOVB,#10
DIVAB
MOVDPTR,#TABLE
MOVCA,@A+DPTR;
查表
MOVP1,A;
十位显示
MOVA,B
MOVCA,@A+DPTR
MOVP2,A;
个位显示
MOVR7,#20
LOOP0:
MOVTMOD,#01H;
置T0工作于方式0
MOVTH0,#3CH;
装入计数初值
MOVTL0,#0B0H
SETBTR0;
启动定时器T0
JNBTF0,$;
TF0=0,等待
CLRTF0;
清TF0
DJNZR7,LOOP0;
循环20次
DECR2;
减一
CJNER2,#0FFH,LOOP1;
倒计时
AJMPMAIN;
复位回到60秒初始
TABLE:
DB0C0H,0F9H,0A4H,0B0H
DB99H,92H,82H,0F8H
DB80H,90H,88H,83H
DB0C6H,0A1H,86H,8EH
END
第四章软件调试
4.1系统调试工具keilc51
KeilC51仿真器是一款利用KEILC51的IDE集成开发环境作为仿真环境的廉价仿真器,是利用SST公司具有IAP功能的单片机SST89C58制作而成,主要是利用了SST89C58的IAP功能,所谓IAP功能是Inapplicationprogram的英文缩写,是在应用编程的意思,通俗一点讲就是:
它可以通过串口将用户的程序下载到单片机中,可以通过串口对单片机进行编程。
它之所以具有这种功能,实际上它有两块程序flash区,其中一块flash中运行的程序可以更改另外的一块程序flash区中的程序,正是利用这一特性才用它作成了仿真器,我们把仿真器的监控程序事先烧入SST89C58,监控程序通过SST89C58的串口和PC通讯,当使用KEILC51的IDE环境仿真时,用户的程序通过串口被监控程序写入flash程序区中,当用户设置断点等操作仿真程序时,flash程序中的用户程序也在相应的更改,从而实现了仿真功能。
调试的主要方法:
1.启动Keilc51
2.新建一个工程。
Project菜单——〉Newproject,选择好我们要保存的文件夹后,键入Frist保存。
接着弹出CPU类型选择框,我们选择最常用的AT89C51,按确定。
3.在工程中加入文件。
新建一个文件,文件菜单File——〉New,我们再选择:
文件菜单File——〉SaveAs?
(另存为)弹出对话框后,我们文件名框中键入First.c(注意文件后缀名是.c)保存。
C文件建好啦。
现在我们把文件加入到工程中去。
点击Target1前面的+号,右键单击SourceGroup1——〉选择AddFilestoGroup,SourceGroup1,选择添加Add。
编译运行,检查程序是否有错误。
4.2PROTEUS
Proteus是一款EDA软件,该软件具有模拟电路仿真,数字电路仿真,单片机以及外围电路组成的系统的仿真,RS-232动态仿真,I2C调试器,SPI调试器,键盘和LCD系统的仿真,以及各种虚拟仪器,如示波器,逻辑分析仪,信号发生器等。
该软件目前支持的单片机类型有:
68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列、ARM以及各种外围芯片。
该软件还支持大量的存储器和外围芯片,所以,该软件是一款集单片机和SPICE分析于一身的仿真软件。
调试方法:
首先用Keil软件将C编译成HEX文件,打开Keil软件,新建一个文档,输入C程序,保存成C格式文件,然后新建工程,连接单片机为AT89C51,选择Optionsfortarget,选择OUTPUT子菜单,在CreateHEXFi前打钩,DeBug子菜单中,Settings选择ProteusVSMSimuator,USE前打钩,再次运行文件,成功后在目录下会生成HEX文件,打开Proteus软件,或直接点击DSN文件,双击单片机模板,点击文件夹式样的图标选择对应的HEX驱动文件,然后点击开始,进行调试
心得体会
在这次单片机课程设计中,我觉得最大的收获就是提高了自己的动手及思考解决问题的能力,平常以为很明白的程序,在仿真过程中却发现并不是想象的那么简单,设计的过程中失败了很多次,但通过自己的不懈努力最终获得设计的成功!
在这里要特别感谢陈玉玲老师,谢谢她课堂上的引导,使自己明确了设计方向,避免了许多错误。
参考文献:
1.李全利.《单片机原理及应用技术》高等教育出版社
2.吴金荣.《8051单片机实践与应用》清华大学出版社
3.张迎辉贡雪梅.《单片机实训教程》北京大学出版社目录