跪求51汇编 LED动态显示程序

来源:百度知道 编辑:UC知道 时间:2024/06/04 10:29:22
本人刚学51单片机,现遇到一个问题,如下
现编个一个99.9秒计时控制器,第一次按开关SP1,启动计时器同时灯1亮,第二次按,停止计时器同时灯2亮,第三次按,计时器清零同时灯3亮!
汇编程序如下,现在想改为动态扫描数码管的方法,请高手赐教,完成后,追加500分。要求,P0口接动态共阳数码管的段选,P2.0~P2.2接个位十倍百位的位选。最好用PROTEUS仿真能通过。这厢有礼了!请高手赐教完整程序!或者知道本人 QQ 550809798 注明单片机指导!
TCNTA EQU 30H
TCNTB EQU 31H
GW EQU 32H
KEYCNT EQU 33H
SW EQU 34H
BW EQU 35H
SP1 BIT P3.5
ORG 00H
LJMP STAR
ORG 0BH
LJMP INT_T0
STAR: MOV P0,#0CH
MOV P1,#40H
MOV P2,#4EH
LCALL DELAY2S
START:
MOV KEYCNT,#00H
MOV GW,#00H
MOV A,GW
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV SW,#00H
MOV A,SW
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P1,A
MOV BW,#00H
MOV A,BW
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
MOV TMOD,#02H
SETB ET0
SETB EA
WT: JB SP1,WT
LCALL DELY10MS
JB SP1,WT
INC KEYCNT
MOV A,KEYCNT
CJNE A,#01H,KN1
SETB TR0<

我想看看啊。

这个程序因为要精确计时,所以最好使用中断程序来完成。
大家编程的思维方式和格式不一样,加上我也没有太多时间来帮你写代码,所以我只是将具体程序的流程说给你,希望对你有帮助。
(加一句,这个程序完全没有必要设置3个按键,因为3个按键在任意时刻只有3个可以被响应,所以合并成1个最好)

;下面的代码直接粘贴到编译其中,然后按照注释添加代码

;##################################################
;添加基本的复位程序

;定义寄存器

;定义秒整数寄存器:miao1=0

;定义秒小数寄存器:miao2=0

;定义复位状态位:zhuangtai1=1

;定义运行状态位:zhuangtai2=0

;定义停止状态位:zhuangtai3=0

;定义显示状态位:xianshi1=1(个位)

;定义显示状态位:xianshi2=0(十位)

;定义显示状态位:xianshi3=0(百位)

;点亮发光管3,熄灭发光管1,2

;将定时器0溢出时间设定为0.01秒

;开启定时器0
;########################
;进入循环判断主程序
;(循环判断主程序开始处

;如果当前是复位状态(zhuangtai1=1),那么循环判断按键1,等待启动(按键1按下后经过延时去抖确定,然后zhuangtai1=0,zhuangtai2=1,zhuangtai3=0,点亮发光管1,熄灭3,返回循环判断主程序开始处)
;如果当前是运行状态(zhuangtai2=1),那么循环判断按键2,等待停止(按键2按下后经过延时去抖确定、然后zhuangtai1=0,zhuangtai2=0,zhuangtai3=1,点亮发光管2,熄灭1,返回循环判断主程序开始处)
;如果当前是停止状