简易秒表课题设计.docx

上传人:b****7 文档编号:25806972 上传时间:2023-06-15 格式:DOCX 页数:13 大小:112.94KB
下载 相关 举报
简易秒表课题设计.docx_第1页
第1页 / 共13页
简易秒表课题设计.docx_第2页
第2页 / 共13页
简易秒表课题设计.docx_第3页
第3页 / 共13页
简易秒表课题设计.docx_第4页
第4页 / 共13页
简易秒表课题设计.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

简易秒表课题设计.docx

《简易秒表课题设计.docx》由会员分享,可在线阅读,更多相关《简易秒表课题设计.docx(13页珍藏版)》请在冰豆网上搜索。

简易秒表课题设计.docx

简易秒表课题设计

8051单片机简易秒表课题设计

 

第一章设计方案

1.1要求

用8051单片机,采用动态扫描的方式,用4位LED数码管显示秒、分值。

晶振采用6MHZ。

具体要求如下:

(1)从右往左显示秒值的个位、十位,分值的个位、十位,个位能向十位进位;

(2)上电后首先显示00,表示从00秒开始计时,当时间显示到59时,4位显示都清零,从零开始。

(3)以三个独立式按键实现复位、启动、停止。

1.2方法

用中断的编程思路使用定时器T0,定时器工作在定时方式,实现1秒定时,每50ms溢出中断一次,中断20次后就到1秒钟;秒表计时显示用动态显示方式实现;通过键盘扫描方式取得KE0、KE1、KE2的键值,用键盘的中断处理程序实现秒表的启动、停止、清0等功能。

1.3试验线路分析

4位LED显示的位码由单片机的P2口输出,段码由P1口输出,P2口线与LED之间接有200欧限流电阻;LED为共阳极数码管,显示方式为动态显示方式;3个按键可以采用独立式键盘,其中两个按键分别连接到外部中断INT0、INT1,第3个按键连接到定时器1的T1端口,以中断方式实现键盘的扫描。

动态显示程序中,在单片机内部RAM中设置待显示数据缓冲区,由查表程序完成显示译码,将缓冲区内待显示数据转换成相应的段码,再将段码通过8051的P0口输出;位码数据由累加器循环左移指令产生,再通过P2口输出。

1.4软件设计

整体程序主要分为3个部分:

主程序、显示子程序和定时器中断程序。

主程序主要是初始化部分和不断调用动态显示子程序部分。

动态显示子程序完成四位LED的轮流位扫描,它被主程序不断调用,以保证稳定可靠的显示。

显示时间的刷新由定时器中断产生,定时器每50ms中断一次,当中断20次后(即1s后),对时间单元(秒计数单元、分计数单元)进行更新,然后通过拆字子程序将时间单元里面的十六进制数拆开为两个BCD码,并送到显示缓冲区。

返回主程序后显示缓冲区的待显示数据被刷新一次,数码管相应的显示数值也就随之发生变化。

1.5程序编制

编程时置KE0健为“启动”,置KE1键为“停止”,置KE2键为“清0”,因按键较少,所以采用独立式按键即可满足条件,其中两个按键分别连接到外部接口INT0、INT1,另外一个连接到外部引脚T1,编程时置T1为8位计数方式,初始值设定为0FFH.程序中,INT0、INT1和T1均允许中断,故按键的处理通过各相应中断子程序来完成。

4位LED显示的数据由显示缓冲区30H~33H单元中的数据决定,顺序是从右至左。

动态显示时,每位显示持续时间为1ms,1ms延时由软件实现,4位显示约耗时4ms。

1秒定时采用定时器T0方式1中断,每50ms中断一次,用20H(MCEC)作50ms计数单元,每20次为一个循环体,计满20次,秒计数单元21H(SEC)加1。

21H、22H单元的数据均采用十六进制计数,该数据被拆成个位和十位两个数据后分别送至显示缓冲区的30H、31H、32H、33单元。

 

1.6资源分配表

名称

地址分配

用途

初始化值

MSEC

20H

定时器50ms计数单元

14H

SEC

21H

秒计数单元

00H

MIN

22H

分计数单元

00H

 

30H~35H

 

显示缓冲区

 

00H

 

30H:

秒的个位

31H:

秒的十位

32H:

分的个位

33H:

分的十位

40H以上

堆栈区

表1-1资源分配表

 

第二章8051芯片介绍

8051芯片内部有一高增益反相放大器,用于构成振荡器,反向放大器输入端为XTAL1,输出端XTAL2。

在XTAL1和XTAL2两端跨接一个石英晶体及两个电容就构成了稳定自激振荡器,电容器C1和C2通常都取30PF左右,对振荡频率有微调作用。

振荡频率范围是1.2-12MHZ。

2.1电源引脚

Vcc40电源端

GND20接地端

*工作电压为5V,另有AT89LV51工作电压则是2.7-6V,引脚功能一样。

2.2外接晶体引脚

图2-1外接晶体引脚

XTAL119

XTAL218

XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。

内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。

晶振的频率可以在1MHz-24MHz内选择。

电容取30PF左右。

*型号同样为AT89C51的芯片,在其后面还有频率编号,有12,16,20,24MHz可选。

大家在购买和选用时要注意了。

如AT89C5124PC就是最高振荡频率为24MHz,40P6封装的普通商用芯片。

 

2.3复位RST9

在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引腿时,将使单片机复位,只要这个脚保持高电平,51芯片便循环复位。

复位后P0-P3口均置1引脚表现为高电平,程序计数器和特殊功能寄存器SFR全部清零。

当复位脚由高电平变为低电平时,芯片为ROM的00H处开始运行程序。

常用的复位电路如图所示。

*复位操作不会对内部RAM有所影响。

图2-2常用复位电路

2.4输入输出引脚

(1)P0端口[P0.0-P0.7]P0是一个8位漏极开路型双向I/O端口,端口置1(对端口写1)时作高阻抗输入端。

作为输出口时能驱动8个TTL。

对内部Flash程序存储器编程时,接收指令字节;校验程序时输出指令字节,要求外接上拉电阻。

在访问外部程序和外部数据存储器时,P0口是分时转换的地址(低8位)/数据总线,访问期间内部的上拉电阻起作用。

(2)P1端口[P1.0-P1.7]P1是一个带有内部上拉电阻的8位双向I/0端口。

输出时可驱动4个TTL。

端口置1时,内部上拉电阻将端口拉到高电平,作输入用。

对内部Flash程序存储器编程时,接收低8位地址信息。

(3)P2端口[P2.0-P2.7]P2是一个带有内部上拉电阻的8位双向I/0端口。

输出时可驱动4个TTL。

端口置1时,内部上拉电阻将端口拉到高电平,作输入用。

对内部Flash程序存储器编程时,接收高8位地址和控制信息。

在访问外部程序和16位外部数据存储器时,P2口送出高8位地址。

而在访问8位地址的外部数据存储器时其引脚上的内容在此期间不会改变。

(4)P3端口[P3.0-P3.7]P2是一个带有内部上拉电阻的8位双向I/0端口。

输出时可驱动4个TTL。

端口置1时,内部上拉电阻将端口拉到高电平,作输入用。

对内部Flash程序存储器编程时,接控制信息。

除此之外P3端口还用于一些专门功能,具体请看表2-2.。

P1-3端口在做输入使用时,因内部有上接电阻,被外部拉低的引脚会输出一定的电流。

P3引脚

兼用功能

P3.0

串行通讯输入(RXD)

P3.1

串行通讯输出(TXD)

P3.2

外部中断0(INT0)

P3.3

外部中断1(INT1)

P3.4

定时器0输入(T0)

P3.5

定时器1输入(T1)

P3.6

外部数据存储器写选通WR

P3.7

外部数据存储器写选通RD

表2-1端口引脚兼用功能表

第三章硬件线路设计图

图3-1硬件线路设计图

第四章程序流程图

主程序显示子程序

定时器中断子程序(如下图):

第5章系统软件编程

MSECEQU20H50ms计数单元;

SECEQU21H;秒单元

MINEQU22H;分单元

;----------------各程序入口----------------

ORG0000H

LJMPMAIN

ORG0003H

AJMPKE1

ORG000BH

AJMPCONT

ORG0013H

LJMPKE0

ORG001BH

LJMPKE2

;------------------主程序-----------------

;-----------------初始化部分-------------

MAIN:

MOVTMOD,#61H;置T0方式1定时,T1方式2计数

MOVTH0,#0F6H;T0置初值

MOVTL0,#3CH

MOVTH1,0FFH;T1置初值

MOVTL1,#0FFH

MOVSEC,#00H;60s计数单元置初值

MOVMIN,#00H;分单元置初值

MOVMSEC,#14H;50ms计数单元置初值

MOVSP,#3FH;堆栈指针置初值

MOV30H,#00H;显示缓冲区清0

MOV31H,#00H

MOV32H,#00H

MOV33H,#00H

MOVIE,#8FH;打开中断源

SETBTR1;启动定时器1

CLRA;累加器清0

START:

LCALLDISP;调显示子程序

SJMPSTART;跳动START,不断调显示子程序

;-----------------显示子程序部分--------------

DISP:

MOVR2,#04H;LED待显示位数送R2

MOVR1,#00H;设定显示时间

MOVR4,#08H;共阳管的位码初始值,从右端LED管先亮

MOVR0,#30H;显示缓冲区首址送R0

MOVA,@R0;秒显示个位送A

DISP1:

MOVDPTR,#TAB;指向字形表首址

MOVCA,@A+DPTR;查表取得字形码

MOVP1,A;字形码送P0口

MOVA,R4;取位选字

MOVP2,A;位码送P2口

DJNZR1,$;延时0.5ms

DJNZR1,$;延时0.5ms

RRA;位选字右移位

MOVR4,A;移位后的位选字送R4

INCR0;指向下一位缓冲区地址

MOVA,@R0;缓冲区数据送A

DJNZR2,DISP1;未扫描完,继续循环

SJMPDISP

RET

TAB:

DB0C0H,0F9H,0A4H,0B0H,99H;共阳极LED字型表

DB92H,82H,0F8H,80H,90H

;-------------按键0中断服务程序-------------

;功能:

启动

KE0:

SETBTR0;启动定时器0,开始计时

RETI;中断返回

;--------------按键1中断服务程序-----------

;功能:

暂停

KE1:

CLRTR0;关闭定时器0,暂停计时

RETI;中断返回

;--------------按键2中断服务程序-----------

;功能:

清0

KE2:

MOVSEC,#00H;秒清0

MOVMIN,#00H;分清0

MOV30H,#00H;显示缓冲区清0

MOV31H,#00H;显示缓冲区清0

MOV32H,#00H

MOV33H,#00H

RETI

;---------------定时器中断子程序-------------

;功能:

50ms执行一次,完成秒、分单元的刷新并拆开放到显示缓冲区

;出口:

显示缓冲区30H~33H中存放的待显示的4个数据

CONT:

PUSHACC;保护现场

MOVTH0,#3CH;重置定时器初始值

MOVTL0,#0B0H

DJNZMSEC,RN;判断到20次吗,若未到说明没有到1s

;直接返回主程序:

否则说明1s到

MOVMSEC,#14H;1s到,重置50ms定时器溢出次数初始值为20次

INCSEC;秒单元内容加1

MOVA,SEC;秒单元给A累加器

MOVR7,#31H;指向显示缓冲区的31H单元

LCALLBINBCD;调拆字子程序,将秒计数单元拆开为十位

;个位,分别放到缓冲区31H单元和30H单元

MOVA,SEC;秒单元给A

CJNEA,#60,RN;判断到60s吗,若未到则返回主程序

MOVA,#00;60s到,则秒单元清0

MOVSEC,A

MOVR7,#31H;指向显示缓冲区的31H单元

LCALLBINBCD;调拆字子程序

MOVA,MIN;分单元内容加1

INCA

MOVMIN,A

MOVR7,#33H;R1指向显示缓冲区33H单元

LCALLBINBCD;调拆字子程序,将分计数单元拆开为十位、

;个位,分别放到缓冲区33H单元和32H单元

MOVA,MIN;分单元给A

CJNEA,#60,RN;判断到60分吗,若未到则返回主程序

MOVA,#00H;60分到,分单元清0

MOVMIN,A

MOVR7,#33H;指向显示缓冲区的33H

LCALLBINBCD;调拆字子程序

RN:

POPACC

RETI;中断返回

;--------------十六进制转BCD码拆字子程序-----------

;入口参数:

A累加器(待拆开的十六进制数)

;R1(拆开后BCD码所存放的末地址)

;功能:

将A累加器中的十六进制数拆开为两个BCD码,分别存放到R1指向的两个缓冲单元中

BINBCD:

MOVB,#10

DIVAB;除以10,得到时间值的十位和个位

MOV@R1,A;十位送相应的显示缓冲区

DECR1;指向显示缓冲区中的个位

MOVA,B;个位给ACC

MOV@R1,A;个位值送缓冲区的相应位置

RET

END

 

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1