单片机0~99计数器
目录
设计任务…………………………………………………… .3
00~~99手动计数器设计程序框图……………………………3
00~~99手动计数器的主程序…………………………………3
功能说明………………………………………………………6
原理图…………………………………………………………10
检测与调试……………………………………………………10
总结与体会…………………………………………………10
一、设计任务
(1)、功能及技术指标要求
利用AT89S51单片机来制作一个手动计数器。
(2)、设计内容
在AT89S51单片机的P3.7管脚接一个轻触开关,作为手动计数的按钮,用单片机的P2.0-P2.7接一个共阴数码管,作为00-99计数的个位数显示,用单片机的P0.0-P0.7接一个共阴数码管,作为00-99计数的十位数显示。
(3)、设计思路及关键技术
一个完整00~`99手动计数器想当于一个简单的单片机系统,该系统设置电路、单片机、显示电路等构成。单片机是集成IC芯片,只需根据实际设计要求选型。其他部分都需要根据应用要求和性能指标自行设计。
二、00~~99手动计数器的设计程序框图
、
三、00~~99手动计数器的主程序
CountEQU 30H ; EQU ——标号赋值伪指令SP1BIT P3.7
ORG 0
START:MOV Count,#00H
NEXT:MOV A,Count
MOV B,#10
DIV AB ; A除以B,商(存于)A余(下)B
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV A,B
MOVC A,@A+DPTR
MOV P2,A
WT:JNB SP1,WT ;SP为0转移
WAIT:JB SP1,WAIT ;SP为1转移
LCALL DELY10MS
JB SP1,WAIT
INC Count ; Count加1
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 ;0---9
END
7. C语言源程序
#include
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char Count;
?
void delay10ms(void)
{
unsigned char i,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
?
void main(void)
{
Count=0;
P0=table[Count/10];
P2=table[Count%10];
while(1)
{
if(P3_7==0)
{
delay10ms();
if(P3_7==0)
{
Count++;
if(Count==100)
{
Count=0;
}
P0=table[Count/10];
P2=table[Count%10];
while(P3_7==0);
}
}
}
}
四、功能说明
(1)芯片由UNTITLED—ISISPROFESSIONAL实验系统提供(AT89C51)
1.主要特性:
与MCS-51兼容
4K字节可编程闪烁存储器