1. 实验任务<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
利用AT89S51单片机来制作一个手动计数器,在AT89S51单片机的P3.7管脚接方波信号(频率5HZ),计数方波低电平,用单片机的P2.0-P2.7接一个共阴数码管,作为00-99计数的个位数显示,用单片机的P0.0-P0.7接一个共阴数码管,作为00-99计数的十位数显示。
2.程序实现
1. 汇编源程序
Count EQU 30H
SP1 BIT P3.7
ORG 0
START: MOV Count,#00H
NEXT: MOV A,Count
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV A,B
MOVC A,@A+DPTR
MOV P2,A
WT: JNB SP1,WT
WAIT: JB SP1,WAIT
INC Count
MOV A,Count
CJNE A,#100,NEXT
LJMP START
DELY10MS: MOV R6,#20
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
2. C语言源程序
#include <AT89X51.H>
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char Count;
void main(void)
{
Count=0;
P0=table[Count/10];
P2=table[Count%10];
while(1)
{
if(P3_7==0)
{
Count++;
if(Count==100)
{
Count=0;
}
P0=table[Count/10];
P2=table[Count%10];
while(P3_7==0);
}
}
}
注:计数外部脉冲完全不需要延时函数,因为是由外部脉冲设置的固定周期的延时。但是在 第七个实验IO口直接驱动数码管显示中前一个数字和后一个数字的显示必须要延时函数来设置时间延时,否则就会造成数码管频闪,人眼无法分辨其显示的数字
文章评论(0条评论)
登录后参与讨论