2个回答
展开全部
;********************************************************************/
/* 实验目的:1、掌握数码管的动态扫描原理
* 2、掌握单片机对按键的控制原理
* 实验内容:通过按一下P3.3按键,数码管做 1 的累加, 实现00~99的计数功能,当计到99时又从00开始
*/
;/* 程序详细功能介绍:
; * 具体的硬件结构,大家可以看 WS 系列产品的原理图
;* 利用AT89S51单片机来制作一个手动计数器,在AT89S51单片机的P3.3管脚接一个轻触开关,
;* 作为手动计数的按钮. 数码管驱动采用动态扫描方式用单片机的P0.0-P0.7驱动数码管的段码,
;* P1.3 控制个位数码管的共阳极公共端,P1.2 控制十位数码管的共阳极公共端
;* 大家可自行修改程序,扩展到0000~9999的计数范围
;*/
Count EQU 30H
AN BIT P3.3
WEI BIT 00H;按键消除振荡位标志
ORG 0000H
CLR P2.7
LJMP START
ORG 0100H
START: MOV Count,#00H
NEXT: MOV A,Count
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A ;十位的显示处理
CLR P1.2
LCALL DELY10MS
SETB P1.2
MOV A,B
MOVC A,@A+DPTR
MOV P0,A ;个位的显示处理
CLR P1.3
LCALL DELY10MS
SETB P1.3
;*****************************
;********按键方法一***********
;*****************************
;JB AN,NEXT ;按键检测
;LCALL DELY10MS;
;LCALL DELY10MS;
;LCALL DELY10MS;
;LCALL DELY10MS;
;JB AN,NEXT
;LCALL DELY10MS
;LCALL DELY10MS
;LCALL DELY10MS
;*****************************
;*****按键方法二**************
;*****************************
JB AN,NEXT1 ;按键检测
JB WEI,NEXT ;在程序循环过来时,若按键没有放开,则不执行下面的程序
SETB WEI ;对按键标志位置1
LJMP NEXT2 ;执行计数加1程序
NEXT1:CLR WEI;若按键放开,则对按键标志位清0,
LJMP NEXT ;在执行显示程序,实现按键的消除振荡
NEXT2: ;
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 0C0H;0
DB 0F9H;1
DB 0A4H;2
DB 0B0H;3
DB 099H;4
DB 092H;5
DB 082H;6
DB 0F8H;7
DB 080H;8
DB 090H;9
END
/* 实验目的:1、掌握数码管的动态扫描原理
* 2、掌握单片机对按键的控制原理
* 实验内容:通过按一下P3.3按键,数码管做 1 的累加, 实现00~99的计数功能,当计到99时又从00开始
*/
;/* 程序详细功能介绍:
; * 具体的硬件结构,大家可以看 WS 系列产品的原理图
;* 利用AT89S51单片机来制作一个手动计数器,在AT89S51单片机的P3.3管脚接一个轻触开关,
;* 作为手动计数的按钮. 数码管驱动采用动态扫描方式用单片机的P0.0-P0.7驱动数码管的段码,
;* P1.3 控制个位数码管的共阳极公共端,P1.2 控制十位数码管的共阳极公共端
;* 大家可自行修改程序,扩展到0000~9999的计数范围
;*/
Count EQU 30H
AN BIT P3.3
WEI BIT 00H;按键消除振荡位标志
ORG 0000H
CLR P2.7
LJMP START
ORG 0100H
START: MOV Count,#00H
NEXT: MOV A,Count
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A ;十位的显示处理
CLR P1.2
LCALL DELY10MS
SETB P1.2
MOV A,B
MOVC A,@A+DPTR
MOV P0,A ;个位的显示处理
CLR P1.3
LCALL DELY10MS
SETB P1.3
;*****************************
;********按键方法一***********
;*****************************
;JB AN,NEXT ;按键检测
;LCALL DELY10MS;
;LCALL DELY10MS;
;LCALL DELY10MS;
;LCALL DELY10MS;
;JB AN,NEXT
;LCALL DELY10MS
;LCALL DELY10MS
;LCALL DELY10MS
;*****************************
;*****按键方法二**************
;*****************************
JB AN,NEXT1 ;按键检测
JB WEI,NEXT ;在程序循环过来时,若按键没有放开,则不执行下面的程序
SETB WEI ;对按键标志位置1
LJMP NEXT2 ;执行计数加1程序
NEXT1:CLR WEI;若按键放开,则对按键标志位清0,
LJMP NEXT ;在执行显示程序,实现按键的消除振荡
NEXT2: ;
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 0C0H;0
DB 0F9H;1
DB 0A4H;2
DB 0B0H;3
DB 099H;4
DB 092H;5
DB 082H;6
DB 0F8H;7
DB 080H;8
DB 090H;9
END
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询