当前位置:文档之家› 基于8086的秒表设计与实现

基于8086的秒表设计与实现

郑州科技学院微机原理课程设计(论文)题目_基于8086的秒表设计与实现_学生姓名程昭昭专业班级计科一班学号*********所在系信息工程学院指导教师王清珍完成时间2013年12月13日目录摘要 (3)1 99秒秒表设计背景及目的要求 (3)1.1 99秒秒表设计背景 (3)1.2设计目的 (3)1.3硬件选择 (2)1.4设计内容 (2)2 设计方案及基本原理 (2)2.1 预备知识 (2)2.2 LED显示原理 (4)2.3 元器件选择 (4)2.4 系统设计 (4)2.5硬件工作原理 (5)2.6 硬件连接 (4)3 设计流程 (5)3.1设计步骤 (5)3.2程序代码 (6)4 程序 (7)4.1 main.c主程序 (7)4.2 key.asm ——键盘扫描子程序 (11)5 调试结果及分析 (24)5.1 调试结果 (24)5.2 结果分析 (25)6 结论与分析 (25)7 参考与文献 (25)摘要本设计是设计一个芯片控制的多功能秒表系统。

近年来随着科技的飞速发展,单的应用正在不断的走向深入,同时带动着传统控制检测日新月异更新。

在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面的知识是不够的,还要根据具体的硬件结构,以及针对具体的应用对象的软件结合,加以完善。

秒表的出现,解决了传统的由于人为因素造成的误差和不公平性。

将软、硬件有机地结合起来,使得系统能够实现两位LED显示,显示时间为00~99秒,每秒自动加1,能正确地进行加、减(倒)计时,快加,快减,可以同时记录4个相对独立的时间,通过上翻下翻来查看这4个不同的计时值,可谓功能强大。

其中软件系统采用汇编语言编写程序,包括显示程序,加减计数程序,快加快减程序,中断,延时程序,按键消抖程序等,并在WAVE中调试运行,硬件系统利用PROTEUS强大的功能来实现,简单切易于观察,在仿真中就可以观察到实际的工作状态。

关键词: AT89C51 99秒【设计题目】99秒秒表设计1 99秒秒表设计背景及目的要求1.1 99秒秒表设计背景目前,单片机正朝着高性能和对品种方向发展,趋势是进一步向着CMO化,低功耗,小体积,大存量,高性能,低价格和外国电路内装化等几个方面发展。

单片机应用的重要意义还在于他从根本上改变了传统的控制系统设计思想和设计方法。

从前必须由模拟电路或数字电路实现的大部分功能功能,现在已能用单片机通过软件方法来实现了。

这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。

单片机模块中最常见的是秒表、数字钟等显示时间类的装置,此装置是一种用数字电路实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,因此得到了广泛的使用。

此设计利用凌阳科技公司的凌阳16位单片机SPCE061A为主控芯片,充分利用61板上面的三个按键,完成一个简易的现实系统——99秒秒表。

61板是一套完整的16位单片机开发系统,可直接把程序下载到61板上进行调试和封装。

集成度高、运算速度快、体积小、运算可靠、价格低廉,在过程控制、数据采集、机电一体化、智能仪器仪表、网络技术等方面得到广泛应用。

1.2 设计目的随着单片机应用的日益广泛,在校学生加强对单片机的认识和动手能力,已经是非常重要的一项锻炼。

课程设计就是为加强实践机会、培养学生动手能力的一个重要环节,将理论知识与实际联系起来的一个关键机会。

本课程设计的基本要求是:1. 掌握LED数码管原理及使用方法。

2. 掌握61板的使用方法。

3. 初步掌握SPCE061A单片机汇编语言一般编程技巧。

4. 初步掌握61板系统调试的一般步骤及方法。

1.3硬件选择装有Windows系统和μ’nSP™ IDE仿真环境的PC机一台,μ’nSP™十六位单片机实验箱一个。

本设计用到的实验箱硬件模块为:SPCE061A核心及周边电路模块(包含32个I/O口),LED数码管。

做此实验用51板也可以,因为51板也提供了相应的LED模组,因为实验室里面给我们提供了61板,所以我决定选用SPCE061A 单片机实验箱。

1.4 设计内容本装置将实现0-99的计数,每一秒钟,计数器将加1,在数码管上显示当前计数值,并可用键盘按制计数的起始,以及归零。

具体要求如下:1. 开机时数码管显示00。

2. 每一秒钟,计数器自动加1。

3. 按键控制计数,分别控制开始计时、停止计时和归零,功能分配如下:表1-1按键功能分配2 设计方案及基本原理2.1 预备知识1.熟悉凌阳单片机的工作原理。

(1)I/O口的使用原理和设置;(2)定时器或时基的设置、使用;(3)中断的设定。

2.了解数码管的显示原理。

3.熟悉键盘扫描原理。

4.熟悉汇编语言或C语言。

2.2 LED显示原理静态显示就是显示驱动电路具有输出锁存功能,单片机将所要显示的数据送出后就不再管,直到下一次显示数据需要更新时再传送一次新数据,显示数据稳定,占用很少的CPU时间。

动态显示需要CPU时刻对显示器件进行数据刷新,显示数据有闪烁感,占用的CPU时间多。

这两种显示方式各有利弊;静态显示虽然数据稳定,占用很少的CPU时间,但每个显示单元都需要单独的显示驱动电路,使用的硬件较多;动态显示虽然有闪烁感,占用的CPU时间多,但使用的硬件少,能节省线路板空间。

基本的半导体数码管是由七个条状发光二极管芯片排列而成的,可实现0~9的显示。

LED数码管是由发光二级管显示字段组成的显示器,有8段和“米”字段之分,这种显示器有共阳级和共阴极两种。

所谓共阳方式是指笔画显示器各段发光管的阳极(即P区)是公共的,而阴极互相隔离。

所谓共阴方式是笔画显示器各段发光管的阴极(即N区)是公共的,而阳极是互相隔离的。

2.3 元器件选择61板一个,共阳极2位LED数码管一个,电路板一个,8050三极管二个,1k的电阻8个,33k电阻2个,导线若干,排针(10位)2个。

2.4 系统设计根据设计题目的要求分析,并考虑到题目的可扩展性,可将系统分成两大部分:1. 时间的产生和显示。

2. 按键控制计数起始、归零。

根据系统的功能现选择61板作为单片机控制处理部分,利用一2位LED作为显示部分,而按键采用61板上自带的三个按键,如图2-1所示。

图2-1 系统框图2.5硬件工作原理两位数的显示采用的是一个2位共阳极LED 数码管(LG5621AH),连接方法是SPCE061A的IOB0-IOB6接LED焊接板的A-G,小数显示部分可以省略不要;IOB8-IOB9分别接LED的位选COM1、COM2,电路原理图如图2-4。

LED与SPCE061A的引脚连接如表2-1。

采用凌阳大学计划的LED键盘模组和61板搭配可以很容易的完成这个课程设计的题目。

它的连结图如图所示,IOB的低八位控制数码管显示段位,高八位控制点亮哪一个数码管。

表2-1 LED引脚连接表2.6 硬件连接采用凌阳大学计划的LED键盘模组和61板搭配可以很容易的完成这个课程设计的题目。

它的连结图如图所示,IOB 的低八位控制数码管显示段位,高八位控制点亮哪一个数码管。

图2-2 LED 键盘模组和61板连接图3 3.1设计步骤根据设计要求的功能,程序主要分为三部分,即:(1)计时显示部分;(2)秒计时部分;(3)按键控制部分。

(4)程序主流程主要完成键盘扫描、计时处理、键值分支控制的任务,流程图如图所示:图3-1 主程序流程图显示部分是在IRQ4的1KHz中断中控制显示的,采用动态扫描的方式,1KHz的时基中断每1ms进一次中断,在中断中对2ms计数器i进行累加,当i从0累加到2时,则刚好为2ms,此时更新一个位的LED显示,并对i进行清零;当下一次累计到2ms时,则会再更新显示下一位LED数码管,当更新到最后一位时,返回重第一位开始更新;依此循环更新显示,而更新显示的数据保存在缓冲区当中,用户需要更新显示的数据时,只需要改变对应的缓冲区中的数据即可。

具体流程图如下。

秒计时采用IRQ5的2Hz 时基中断进行计时,流程图如图3-3所示。

键盘输入利用61板自带的三个按键,输入的端口为IOA0—IOA2。

图3-2 IRQ4 1KHz 时基中断流程 图3-3IRQ5 2Hz 时基中断流程图4 程序ctrl_port EQU 0106H A_PORT EQU 0100H B_PORT EQU 0102H c_port equ 0104h count equ 0206hcount0 equ 0200hcount1 equ 0202hINTR EQU 0304HINTR1 EQU 0306HDCOUNT EQU 6data segmentLEDTAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71 HBUF DB 0,0,0,0,0,0buff db 20 dup(?)DAT1 DB 0DAT2 DB 0DAT3 DB 1dat4 db 0data endsCODE SEGMENTASSUME CS:CODE,ds:data START: CLIPUSH DSMOV SI,2*4MOV AX,0MOV DS,AXMOV [SI],OFFSET INTB MOV 2[SI], SEG INTB POP DSMOV AL,00010011BMOV DX,INTROUT DX,ALMOV AL,00000010BMOV DX,INTR1OUT DX,ALMOV AL,00000001BMOV DX,INTR1OUT DX,ALSTImov ax,datamov ds,axmov al,00110111b ;8253初始化 mov dx,countout dx,almov dx,count0mov ax,500hout dx,almov al,ahout dx,almov al,01110111bmov dx,countout dx,almov dx,count1mov ax,50hout dx,almov al,ahout dx,alMOV AL,10000001B ;8255初始化, MOV DX,CTRL_PORTOUT DX,ALback: MOV DX,C_PORTin al,dxtest al,00000010bjz b2 ;判断是否清0again: MOV DX,C_PORTin al,dxtest al,00000001bjz b1 ;判断是暂停还是继续? mov cx,6jia6: inc siloop jia6MOV AL,00000000BMOV DX,C_PORTOUT DX,ALMOV AL,DAT1 ;DTA1中是秒CMP AL,100JZ A1MOV BL,10DIV BLMOV BUF,AH ;秒的个位MOV BUF+1,AL ;秒的十位CALL DISPLAY_DECINC DAT1JMP backA1: MOV DAT1,0 ;满60秒,对DAT1清0 MOV AL,0MOV AH,0MOV BUF,AHMOV BUF+1,ALCALL DISPLAY_DEC ;先显示00,再进位INC DAT2MOV AL,DAT2 ;DAT2中是分CMP AL,60JZ A2MOV BL,10DIV BLMOV BUF+2,AH ;分的个位MOV BUF+3,AL ;分的十位CALL DISPLAY_DECMOV CX,60LOOP AGAINA2: MOV DAT2,0 ;满60分对DAT2清0 MOV AL,0MOV AH,0MOV BUF+2,AHMOV BUF+3,ALCALL DISPLAY_DEC ;先显示00:00再进位 MOV AL,DAT3 ;DAT3中是时CMP AL,24JZ A3MOV BL,10DIV BLMOV BUF+4,AH ;时的个位MOV BUF+5,AL ;时的十位CALL DISPLAY_DECMOV CX,60DEC CXJZ backA3: INC DAT3JMP backb1: CALL DISPLAY_DECmov al,01110000b ;对8253送GATE1控制信号 mov dx,c_portout dx,alcall cunchuCALL DELAYjmp backb2:mov dx,c_portin al,dxtest al,00000100bjnz licall xianshicjcall display_decmov cx,1jz next2mov si,6dec cxnext2: call delayjmp backli: mov buf,0 ;清0 mov buf+1,0mov buf+2,0mov buf+3,0mov buf+4,0mov buf+5,0mov dat2,0mov dat3,1call display_dec; mov bx,1000;jz backmov al,10110000b ;对8253送GATE0控制信号 mov dx,c_portout dx,alCALL DELAY;dec bxjmp backDISPLAY_DEC PROCDA:MOV DI,2DISPAGAIN1:MOV BL,BUFMOV BH,0LEA SI,LEDTAB ;以十进制显示MOV AL,[BX][SI] ;取个位段码not al ;共阳MOV DX,A_PORTOUT DX,AL ;用数码管显示个位 MOV AL,11100000B ;位选,1点亮MOV AH,0MOV DX,B_PORTOUT DX,ALCALL DELAYMOV AL,0H ;清屏MOV DX,B_PORTOUT DX,ALCALL DELAY1CALL DELAY1LEA SI,LEDTABMOV BL,BUF+1MOV BH,0MOV AL,[BX][SI] ;取十位段码not alMOV DX,A_PORTOUT DX,AL ;用数码管显示十位 MOV AL,11010000BMOV DX,B_PORTOUT DX,ALCALL DELAYMOV AL,0HMOV DX,B_PORTOUT DX,ALCALL DELAY1LEA SI,LEDTABMOV BL,BUF+2MOV BH,0MOV AL,[BX][SI] ;取分个位段码 not alMOV DX,A_PORTOUT DX,AL ;用数码管显示分个位MOV AL,11001000BMOV DX,B_PORTOUT DX,ALCALL DELAYMOV AL,0HMOV DX,B_PORTOUT DX,ALCALL DELAY1CALL DELAY1LEA SI,LEDTABMOV BL,BUF+3MOV BH,0MOV AL,[BX][SI] ;取分十位段码not alMOV DX,A_PORTOUT DX,AL ;用数码管显示分十位MOV AL,11000100BMOV DX,B_PORTOUT DX,ALCALL DELAYMOV AL,0HMOV DX,B_PORTOUT DX,ALCALL DELAY1LEA SI,LEDTABMOV BL,BUF+4MOV BH,0MOV AL,[BX][SI] ;取时个位段码not alMOV DX,A_PORTOUT DX,AL ;用数码管显示时个位MOV AL,11000010BMOV DX,B_PORTOUT DX,ALCALL DELAYMOV AL,0HMOV DX,B_PORTOUT DX,ALCALL DELAY1CALL DELAY1LEA SI,LEDTABMOV BL,BUF+5MOV BH,0MOV AL,[BX][SI] ;取时十位段码not alMOV DX,A_PORTOUT DX,AL ;用数码管显示时十位MOV AL,11000001BMOV DX,B_PORTOUT DX,ALCALL DELAYMOV AL,0HMOV DX,B_PORTOUT DX,ALCALL DELAY1DEC DIJNZ DISPAGAIN1 RETDISPLAY_DEC ENDPDELAY PROCMOV CX,1dhLOOP $RETDELAY ENDPDELAY1 PROCMOV CX,3hLOOP $RETDELAY1 ENDPcunchu procpush ax push bx push cxmov al,bufmov ah,buf+1mov bl,buf+2mov bh,buf+3mov cl,buf+4mov ch,buf+5mov buff[si],al mov buff[si+1],ah mov buff[si+2],bl mov buff[si+3],bh mov buff[si+4],cl mov buff[si+5],ch pop axpop bxpop cxretcunchu endp xianshicj procpush axpush bxpush cxmov al,buff[si] mov ah,buff[si+1] mov bl,buff[si+2] mov bh,buff[si+3] mov cl,buff[si+4] mov ch,buff[si+5] mov buf,almov buf+1,ahmov buf+2,blmov buf+3,bh mov buf+4,cl mov buf+5,ch pop axpop bxpop cxret xianshicj endp INTB PROC FAR PUSH AXPUSH BXPUSH CXMOV SI,6 MOV AL,20H OUT 20H,ALPOP CXPOP BXPOP AXIRETINTB ENDP CODE ENDSEND START电路图5.1 调试结果本装置将实现0-99的计数,每一秒钟,计数器将加1,在数码管上显示当前计数值,并可用键盘按制计数的起始,以及归零。

相关主题