一、设计题目
要求:
利用单片机对单片机实验箱的按键S29发出的负脉冲个数进行加/减计数,计数结果(0~255)在8个LED数码管中的3位进行显示(使用8255进行动态驱动)。
控制功能:
利用拨动开关S26来选择计数的方式。S26接高电平时,进行加法计数。S26接低电平时,进行减法计数;利用拨动开关S27控制计数器的计数。当S27接高电平时,计数器停止计数,同时保持当时的计数结果。当S27接低电平时,计数器处于连续计数工作状态,这时按动S29则进行加/减计数;利用拨动开关S28来控制计数器的复位。当S28接高电平时,计数器处于复位状态,同时将计数结果清零。当S28接低电平时,计数器处于正常计数状态。
使用的主要元器件:
89C51、11.0592MHz晶振、74LS373、74LS138、8255、74LS240、74LS244、共阴极LED数码管LG4042AH、拨动开关S26~S28、按键S29等。
结果的验证:
按动单片机实验系统的按键S29,观察三位数码管的显示是否正确。拨动S26、S27和S28,查看其功能是否正确。分析该计数器的最高工作频率是多少?若要对不同幅值的非方波进行计数,电路应如何改进?
二、原理图
仿真图
硬件
键盘和LED
A: 按键的列线
B: 数码管段码
C: 数码管选择脚
D: 按键的行线
8255电路 数码管驱动电路
CS: 片选信号,低电平有效; A0、A1: 地址信号。
JP52: PC口(键盘行); JP53: PB口;
JP56: PA口(键盘列); JP75: 数码管段码
JP79: 数码管段选
设计中用到的命令字为80H(将A、B、C口设为基本输出模式)
三、程序框图
文章来源:https://www.toymoban.com/news/detail-760663.html
四、部分程序
c语言
#include <REG51.H>
#include<absacc.h>
#define uint unsigned int
#define uchar unsigned char
#define PA XBYTE[0Xf000]
#define PB XBYTE[0Xf001]
#define com XBYTE[0Xf003]
sbit sw26=P1^0;
sbit sw27=P1^1;
sbit sw28=P1^2;
sbit sw29=P3^5;
uchar m,count;
uint u=1;
uchar codevalue[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar chocode[]={0xfe,0xfd,0xfb};
void delay(uint n)
{
uint v;
for(;n>0;n--)
{
for(v=0;v<110;v++) ;
}
}
void display(uchar g)
{
uchar i;
uint j,k;
j=(int)g;
com=0x80;
for(i=0;i<3;i++)
{
PB=chocode[i];
k=j%10;
PA=~codevalue [k];
j=j/10;
delay(2);
}
}
void main()
{
}
汇编语言
;===========================================================
;这是一个脉冲计数器的主控程序,单片机晶振频率11.0592MHz。
;开关S26(P1.0)用来设定计数器的加/减计数。
;开关S27(P1.1)用来设定计数器的启动/停止。
;开关S28(P1.2)用来设定计数器的复位/正常计数。
;按钮S29用来输入计数脉冲。
;显示采用8个LED数码管中的3个,动态驱动方式。
;-----------------------------------------------------------
COM8255 EQU 8003H ;8255命令口
PA_8255 EQU 8000H ;8255的A口
PB_8255 EQU 8001H ;8255的B口
COUNT EQU 20H ;计数单元
BUFFER EQU 21H ;显示缓冲区占用2个字节,21H-22H
A_S BIT P1.0 ;高电平为加法计数
R_S BIT P1.1 ;高定平为启动计数,低电平为停止计数
R_N BIT P1.2 ;高电平为复位,低电平为正常计数
ORG 0
LJMP START
ORG 0BH
LJMP T0S ;转计时处理
ORG 1BH
LJMP T1S
ORG 30H
START: MOV SP,#60H
MOV DPTR,#COM8255 ;指向8255命令口
MOV A,#80H ;PA、PB、PC设为基本输出模式
MOVX @DPTR,A
MOV TMOD,#16H ;设T0计数器,方式2;T1为定时器,方式1
MOV TH0,#0FFH
MOV TL0,#0FFH
MOV TH1,#0DCH ;T1定时10ms,晶振频率11.0592MHz
MOV TL1,#00H
SETB PT0 ;T0为高级中断
SETB ET0 ;允许T0中断
SETB ET1 ;允许T1中断
SETB EA ;开中断
SETB TR1 ;启动T1定时
MOV BUFFER,#0A0H ;显缓区初始化,熄灭千位
MOV BUFFER+1,#0
;====================================================
;T0中断服务程序
;根据S26的电平进行加/减计数
;---------------------------------------------------
T0S: PUSH PSW
SETB A_S
JNB A_S,T0S1 ;减法计数则转移
INC COUNT
SJMP T0S2
T0S1: DEC COUNT
T0S2: POP PSW
RETI
;
;===========================================
;这是一个将16进制数转换为BCD码的程序
;待转换的16进制数在R6中,转换完的结果在R2R3中
;使用的寄存器A,B,R6,R2,R3
;--------------------------------------------
BTOD: MOV A,R6
MOV B,#100
DIV AB
MOV R2,A
MOV A,B
MOV B,#10
DIV AB
SWAP A
ADD A,B
MOV R3,A
RET
;=====================================================
;动态显示子程序
;使用寄存器:R0,R2,R3,A,DPTR
;-----------------------------------------------------
DISP: MOV DPTR,#PB_8255 ;消隐数码管,实际实验箱上不需要
MOV A,#0FFH ;消隐数码管,实际实验箱上不需要
MOVX @DPTR,A ;消隐数码管,实际实验箱上不需要
MOV R0,#BUFFER+1 ;指向显缓区最后一个字节
MOV R3,#2 ;显示字节数为2字节
MOV R2,#0FEH ;位码初值,点亮最右边的数码管
LOOP: MOV A,@R0
ANL A,#0FH ;取出低4位
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#PA_8255
MOVX @DPTR,A ;段码送8255的A口
MOV A,R2
INC DPTR ;指向8255的B口
MOVX @DPTR,A ;位码送8255的B口
RL A ;位码左移
MOV R2,A ;存位码
LCALL DELAY2MS ;延时2ms
MOV DPTR,#PB_8255 ;消隐数码管,实际实验箱上不需要
MOV A,#0FFH ;消隐数码管,实际实验箱上不需要
MOVX @DPTR,A ;消隐数码管,实际实验箱上不需要
MOV A,@R0
ANL A,#0F0H ;取出高4位
SWAP A
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#PA_8255
MOVX @DPTR,A ;段码送8255的A口
MOV A,R2
INC DPTR ;指向8255的B口
MOVX @DPTR,A ;位码送8255的B口
RL A ;位码左移
MOV R2,A ;存位码
LCALL DELAY2MS ;延时2ms
MOV DPTR,#PB_8255 ;消隐数码管,实际实验箱上不需要
MOV A,#0FFH ;消隐数码管,实际实验箱上不需要
MOVX @DPTR,A ;消隐数码管,实际实验箱上不需要
DEC R0
DJNZ R3,LOOP
MOV A,#0FFH
MOVX @DPTR,A ;熄灭所有数码管
RET
TAB: DB 0C0H,0F9H,0A4H,0B0H, 99H, 92H
DB 82H, 0F8H, 80H, 90H, 0FFH
;==============================================
;2ms延时子程序
;使用寄存器:R7
;对于11.0592MHz晶振,实际延时2174微秒=2.174ms
;在主程序中调用,被T0中断打断后实际延时大约为10.87ms左右
;----------------------------------------------
DELAY2MS:
MOV R7,#250
DD1: NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R7,DD1
RET
END
五、下载资源
在文档最后
https://docs.qq.com/doc/DTllyaElCY0RoVEZk文章来源地址https://www.toymoban.com/news/detail-760663.html
到了这里,关于脉冲计数器 单片机课程设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!