基于51单片机智能计数器的设计

来源:本站
导读:目前正在解读《基于51单片机智能计数器的设计》的相关信息,《基于51单片机智能计数器的设计》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《基于51单片机智能计数器的设计》的详细说明。
简介:以定时器/计数器0来对脉冲进行计数,数据用8279芯片连接LED数码管实现累进显示。程序分为主程序和中断服务程序两部分。主程序主要实现初始化、循环显示。而累计数在中断服务程序中完成。

任务以及要求

对外部信号脉冲进行计数,并将脉冲个数显示出来。基本要求:计数至少65536个脉冲,并将脉冲个数显示出来。

二、方案选择

用中断方式进行计数,利用定时器/计数器0的方式2。使用查寻方式进行计数,利用定时器/计数器0的方式1。

本程序使用第一方案进行设计,并能实现计数99999999次

三、系统硬件设计

设计思路

1)、通过按钮产生脉冲信号。

2)、由于按钮按合会出现机械弹跳过程,使得电平跳变发生多次。为了克服按钮抖动而产生的误计数,接入脉冲消抖电路,克服按钮的抖动现象。

3)、脉冲计数可采用定时器/计数器来实现。

4)、选择8279作为6位LED显示器的译码驱动电路,实现累进计数。

2、硬件电路组成:

根据硬件设计思路,将用到单片机8031、按纽、脉冲消抖电路,8279芯片电路、6位LED显示器电路用连接线接好。其中按钮脉冲消抖电路由按钮产生的电平跳变信号经由两个与非门构成的RS触发器进行消抖。根据RS触发器的工作原理,当两个输入端均为1时,触发器输出状态不变;当按钮在两个触点间抖动时,RS触发器的两个输入端均为高电平,触发器输出电平不变;仅当按钮实现一次完整的按合过程后,触发器的输出端才产生一个脉冲,从而消除了按钮按合是抖动的影响。数据显示采用8279芯片连接LED数码管实现。应根据单片机,确定8279与单片机和与6位LED显示器的接口方式,以及8279芯片的端口地址

(8279数据口地址为0000H,

8279命令/状态口地址为0001H)

系统程序设计

设计思路:

以定时器/计数器0来对脉冲进行计数,数据用8279芯片连接LED数码管实现累进显示。程序分为主程序和中断服务程序两部分。主程序主要实现初始化、循环显示。而累计数在中断服务程序中完成。

主程序设计:

1)、实现初始化

包括设置堆栈指针、8279芯片初始化、定时器/计数器0初始化、RAM区初始化,以及开中断、启动定时期/计数器0等。

2)、数据循环显示

首先要编写8279初始化子程序和显示一个字符的基本子程序。其中8279初始化子程序为P8279,该子程序功能包括设置8279的工作方式(8个字符显示,左入口,编码扫描键盘,双键锁定)以及写相关的命令字(设置分频系数为31、清除LED显示等)。显示一个字符的子程序为DISLED,该子程序的入口条件为:工作就寄存器R4中存放待显示字符的LED数码管管号。另在工作寄存器R5中,以非压缩BCD码的形式存放带显示字符。

一般情况下,如要显示0~9,则在R5中依次置00H~09H,程序中用查表的方法找到待显示字符所对应的“段码”。

显示子程序DISP的设计思想是:待显示的六位数据分别以压缩BCD码的形式存放在67H、68H、69H和70H四个单元中,该子程序的功能是依次将存放在67H、68H、69H和70H中的八个BCD码分别送0#~7#数码管显示。先将其拆开为个位、十位、百位、千位、万位、十万位、百万位和千万位八个非压缩BCD码的形式,随之先后送工作寄存器R5,再三次调用DISLED子程序。由于在工作寄存器R4中已设置好该数据显示的管号,故即可在0#号管和1#号管实现个位和十位数据的显示。第二次循环中,又可在2#号管和3#号管实现百位和千位数据的显示,第三次循环中,可在4#号管和5#号管实现万位和十万位数据的显示,第四次循环中,可在6#号管和8#号管实现百万位和千万位数据的显示。

3)、主程序清单:

ORG 0000H

LJMP MAIN

ORG 000BH

LJMP CTCO

ORG 0030H

MAIN: MOVTMOD,#60H ;设定时器/计数器1为计数方式,工作方式2

MOV TH1, #0FFH ;每产生一个脉冲即产生中断

MOV TL1, #0FFH

MOV 67H, #00H

MOV 68H, #00H ;计数器先清零

MOV 69H, #00H

MOV 70H, #00H

MOV SP, #2FH ;堆栈指针置初值

MOV R3, #06H ;LED待显示位数送R3

SETB EA

SETB ET0

SETB TR0

PUSH DPH ;8279的初始化

PUSH DPL

PUSH ACC

MOVDPTR,#0001H ;0001H为8279命令和状态口地址

MOVA, #00H ;置8279工作方式(8个字符显示,左入口;编码扫描键盘,双键锁定)

MOVX @DPTR, A

POP ACC

POP DPL

POP DPH

MOV@R0, #00H ;显示缓冲区清零

INC R0

DJNZ R3,$

CLR A ;累加器清零

LOOP: LCALL DISP

SJMP LOOP

DISP: STEBRS0 ;保护第0组工作寄存器,启用第

一组工作寄存器

MOV R0, #70H ;显示缓冲区首址送R0

MOV R4, #00H

MOV R2, #04H

DIS1: MOV A, @R0

ANL A, #0FH

MOV R5, A

LCALL DISLED

INC R4

MOV A, @R0

ANL A, #0F0H

SWAP A

MOV R5, A

LCALLDISLED

DEC R0

INC R4

DJNZ R2, DIS1

RET

DISLED: PUSH DPH ;显示字符子程序

PUSH DPL

PUSH ACC ;A入栈保护

MOV A, #80H

ADD A, R4

MOV DPTR, #0001H ;8279命令和状态口地址

MOVX @DPTR, A

MOV DPTR, #LEDSEG ;指向字形表首地址

MOV A, R5

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

MOV DPTR, #0000H ;8279数据口地址

MOVX @DPTR, A

POP ACC

POP DPL

POP DPH

RET

LEDSEG: DB 03FH,06H,5BH,4FH,66H,6DH,7DH,07H,

DB 07FH,6FH,77H,7CH,39H,5EH,79H,71H ;

中断服务程序设计

1)、中断服务程序设计思路:

定时器/计数器0设置为工作方式2,并设计时器处值为FFH。这样只要来一个脉冲,计时器就溢出而产生中断,进入中断程序使67H、68H、69H、70H四个计数单元的值实现累加。

2)、中断服务程序清单:

ORG 1000H

CTCO: PUSH ACC

MOV A, 70H

ADD A, #01H

DA A

MOV 70H, A

MOV A, 69H

ADDC A, #00H

CLR C

DA A

MOV 69H, A

MOV A, 68H

ADDC A, #00H

CLR C

DA A

MOV 68H, A

MOV A, 67H

ADDC A

MOV 67H, A

POP ACC

RETI

实习心得

通过本次单片机实习彻底掌握了MCS-51、8279的结构及工作原理,通过它们使我能够完成智能计数器,对智能计数器的工作原理也有了更深的体会和掌握。学会了巧妙的编程方法,掌握了定时器/计数器的应用。

就连我自己也不知道为什么,一开始我就对单片机很感兴趣。我觉得每每听万一堂课,我都有一种说不出的高兴,有时也会发愁,因为课程越往后越难学而且讲课进度再加快,但我没有退缩,每周坚持看单片机。

就这样一步步走到课程设计,也许是没全身心投入,搞了两天程序才搞出来,结果上机时还是存在着错误,和同组人刘欢讨论和修改后才完成了“智能计数器”这个程序的编写。为了更好的完成软硬件的结合,我查阅了相关资料,最终得到了解决。 转眼间,一周的课程设计过去了。经过这么一个过程我更加深刻的认识了单片机。单片机是编程语言中非常重要的一种。它的功能十分强大,而且应用广泛。我在编写这个程序时出现了许多问题,同时也发现了要编好一个程序就要有一个好的程序设计基础。不仅设计程序,就是任何事都是这样的。还有我们做事要持之以恒,迎难而上,这样才能有所成就。由于专业的需要我还要继续学习单片机,并且我相信我也会在这方面作出成绩,并把单片机灵活应用在学习和工作中。

提醒:《基于51单片机智能计数器的设计》最后刷新时间 2024-03-14 01:08:14,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《基于51单片机智能计数器的设计》该内容的真实性请自行鉴别。