本帖最后由 ♫感♬觉♩ 于 2014-4-25 11:56 编辑
用51仿真了一个脉冲计数器(别人的程序),工作挺正常的,但是写进12C5A60S2后,显示变得很暗几乎看不到,话说貌似扫描过快,无奈不知怎么改程序,如果好改,求大神帮忙指点一下,如果改起来挺麻烦,就算了,告知一下便可!!!如果有朋友有相关的程序或方便的话,求不吝赐我一份!谢谢,,,
源程序在此:
NUM_B EQU 30H ;计数、显示单元起始地址
NUM_N EQU 8 ;计数、显示单元的字节数
ORG 0000H
JMP START
ORG 001BH
JMP T1_INT
;------------------------
START:
MOV TMOD, #60H ;T1计数方式2
MOV TH1, #255 ;初始值为FF
MOV TL1, #255 ;当收到一个输入,立刻引起中断
SETB TR1 ;启动T1
MOV IE, #10001000B;允许中断
MOV SP, #40H ;设置堆栈
;------------------------
M_LOOP:
CALL DISP
SJMP M_LOOP
;------------------------
DISP:
MOV R0, #NUM_B ;30H
MOV R2, #1 ;先显示最低位
D_LOOP:
MOV A, @R0
ADD A, #(D_TAB - $ - 3)
MOVC A,
@a + PC
MOV P2, #0 ;关闭显示,消隐
MOV P0, A ;输出段码
MOV P2, R2 ;输出位码
CALL DL1MS
MOV A, R2 ;修改位码
RL A
MOV R2, A
INC R0 ;修改显示指针
CJNE R0, #NUM_B + NUM_N, D_LOOP
RET
;------------------------
D_TAB: ;共阳极段码
DB 0C0H,0F9H,0A4H,0B0H, 99H, 92H, 82H,0F8H
DB 80H, 90H, 88H, 83H,0C6H,0A1H, 86H, 8EH,0FFH;FF是空白的代码
;------------------------
DL1MS: ;延时
MOV R7, #242
DJNZ R7, $
DJNZ R7, $
RET
;------------------------
T1_INT: ;T1中断程序
PUSH PSW ;保护现场
SETB RS0 ;换用工作区
MOV R0, #NUM_B
T1_LOOP:
INC @R0 ;数字加一
CJNE @R0, #10, T1_END ;不到10就退出
MOV @R0, #0 ;到10就清零
INC R0 ;转去下一位
CJNE R0, #NUM_B + NUM_N, T1_LOOP
T1_END:
POP PSW ;恢复现场
RE
ti
;------------------------
END
;=====================================================
MOV R7, #242
把延迟时间242增大就可以了
12C5A60S2指令速度比51快10倍左右。单单增加R7的值是延长不了多少时间的。最大值只能增加到255.可以改为双重循环。
- DL1MS: ;延时
- MOV R7, #242
- L1:MOV R6, #10
- DJNZ R6, $
- DJNZ R7, L1
- RET
复制代码具体R7,R6设置什么值还得下载进去试试在确定。
一周热门 更多>