您好,欢迎来电子发烧友网! ,新用户?[免费注册]

您的位置:电子发烧友网>源码下载>汇编编程>

汇编语言 八路抢答器与99秒计数器

大小:0.1 MB 人气: 2017-09-06 需要积分:0

1、八路抢答器

? ? ?ORG 0000H
???? SETB P3.7
???? MOV R0, #00H
???? MOV A , #0FFH
???? MOV P2 , A
L1:? MOV A , P1
???? XRL? A , #0FFH
???? JZ L1
L2:? MOV B , #02H
???? DIV AB
???? INC R0
???? JNZ L2
???? MOV DPTR,#TABLE
???? MOV A,R0
???? MOVC A , @A+DPTR
???? MOV P2 ,A
???? MOV R3 , #0FFH
SS:? CLR P3.7
???? ACALL DELAY
???? SETB P3.7
???? ACALL DELAY
???? DJNZ R3,SS
?????
L4:? SJMP?? L4
DELAY: MOV R1, #249
L3:? NOP
???? NOP
???? DJNZ R1, L3
???? RET
TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;0-9
???? END
?

?

2、99秒计数器
counter equ 30h;分配计数器内存?
timer?? equ 31h;计数速度控制计数器?
speed?? equ 50;计数速度调节(0到255)?
led7seg equ p0;数码管段位接口?
ledbit? equ p2;数码管位选接口
???org 0000h
???ljmp start
?
???org 0030h
start:?mov sp,#60h;设置堆栈指针?
???mov counter,#0;计数器清零初始化?
loop:??mov timer,#speed;计数速度设定?
loop0:?mov a,counter;取出计数值到累加器?
???mov b,#10;设定十进制模?
???div ab;除法,十六进制转十进制?
???da a;BCD码调整?
???anl a,#0fh;清除高位?
???mov dptr,#ledmap;取字符译码表头地址?
???movc a,@a+dptr;查表字符译码?
???mov ledbit,#0ffh;关闭数码管,修改数据前必须关闭?
???mov led7seg,a;送出字符段码?
???mov ledbit,#0feh;打开一位数码管?
???acall delay;延时一段时间
???mov dptr,#ledmap
???mov a,b;取出十位值?
???movc a,@a+dptr
???mov p2,#0ffh
???mov p0,a
???mov p2,#0fdh
???acall delay
???djnz timer,loop0;速度控制,多次显示后计数器+1??
???inc counter;计数器+1?
???mov a,counter
???cjne a,#100,loop;100溢出判断
???mov counter,#0;溢出后归零
???sjmp loop
;经典延时模块?
delay:?mov r7,#100
dd:??mov r6,#10
???djnz r6,$
???djnz r7,dd
???ret
;共阴极数码管字符译码表?
ledmap:?db 03FH,006H,05BH,04FH,066H
???db 06DH,07DH,007H,07FH,06FH
???end
?

3、8*8LED点阵电子屏字符显示程序

描述:????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
;*???????????? 8*8LED点阵电子屏字符显示程序
;*???????????? 四个显示字符数据表放在40H-7FH单元内,字符用8*8点阵,R4(30H)用于
;????????????? 控制显示静止字的时间,R5(31H)静止字显示跳转地址步距,B内放显示首址???????????????????????????????????????????????????????
;*???????????? COL-(8--1)分别接 (P0.0---P0.7)? 即J27-8脚接P0.0? J27-7脚接P0.1
;*???????????? J27-6脚接P0.2? J27-5脚接P0.3??? J27-4脚接P0.4? J27-3脚接P0.5
;*???????????? J27-2脚接P0.6? J27-1脚接P0.7????
;*???????????? S1逐字显示功能程序? S3控制左移显示功能程序???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
;******************************************************************************
? ???????? S1????? BIT??? P3.3??? ;
???????? S2????? BIT??? P3.4??? ;
???????? S3????? BIT??? P3.5??? ;
???????? S4????? BIT??? P3.6??? ;
;******************************************************************************
??????????????? ORG???? 0000H???????? ;程序执行开始地址
??????????????? LJMP??? START???????? ;跳至START执行
??????????????? ORG???? 0003H???????? ;外中断0中断入口地址
??????????????? RETI????????????????? ;中断返回(不开中断)
??????????????? ORG???? 000BH???????? ;定时器T0中断入口地址
??????????????? RETI????????????????? ;中断返回(不开中断)
??????????????? ORG???? 0013H???????? ;外中断1中断入口地址
??????????????? RETI????????????????? ;中断返回(不开中断)
??????????????? ORG???? 001BH???????? ;定时器T1中断入口地址
??????????????? RETI????????????????? ;中断返回(不开中断)
??????????????? ORG???? 0023H???????? ;串行口中断入口地址
??????????????? RETI????????????????? ;中断返回(不开中断)
??????????????? ORG???? 002BH???????? ;定时器T2中断入口地址
??????????????? RETI????????????????? ;中断返回(不开中断)
;******************************************************************************
;主体程序
START:??
??????????????? MOV????? SP,#60H????? ;堆栈在60H开始???????
??????????????? MOV????? 20H,#00H???? ;20H内存单元清0
??????????????? SETB???? 00H????????? ;20H.0位置1
START1:???????? LCALL??? CLEARMEN???? ;调用上电初始化子程序
??????????????? JB?????? 00H,FUN0???? ;20H.0位为1,执行FUN0
??????????????? JB?????? 01H,FUN1???? ;20H.1位为1,执行FUN1
??????????????? JB?????? 02H,FUN2???? ;20H.2位为1,执行FUN2
??????????????? AJMP???? START1?????? ;跳回START1循环
;******************************************************************************
;初始化程序????????
CLEARMEN:??
??????????????? MOV???? A,#0FFH?????? ;四端口置1
??????????????? MOV???? P1,A????????? ;
??????????????? MOV???? P2,A????????? ;
??????????????? MOV???? P3,A????????? ;
??????????????? MOV???? P0,A????????? ;
??????????????? MOV???? DPTR,#TABLE?? ;取"东哥单片机学习网"字符表首址值
??????????????? CLR???? A???????????? ;
??????????????? MOV???? 21H,A???????? ;21H-24H内存单元清0
??????????????? MOV???? 22H,A???????? ;
??????????????? MOV???? 23H,A???????? ;
??????????????? MOV???? 24H,A???????? ;
??????????????? MOV???? R3,A????????? ;R3寄存器清0
??????????????? MOV???? R1,#40H?????? ;设字符表移入内存单元首址
??????????????? MOV???? R2,#20H?????? ;设查表次数(32次)
CLLOOP:???????? MOVC??? A,@A+DPTR???? ;查表将"东哥单片机学习网"字符数据移入内存单元
??????????????? MOV???? @R1,A???????? ;
??????????????? MOV???? A,R3????????? ;
??????????????? INC???? A???????????? ;
??????????????? MOV???? R3,A????????? ;
??????????????? INC???? R1??????????? ;
??????????????? DJNZ??? R2,CLLOOP???? ;查表32次,不到转CLLOOP再查
??????????????? RET?????????????????? ;子程序返回
;******************************************************************************
;键扫描子程序
KEYWORK:??????? MOV????? P3,#0FFH???? ;置输入状态
??????????????? JNB????? S1,KEY1????? ;P3.3为0(键按下)转KEY1
;??????????????? JNB????? S2,KEY2????? ;P3.4为0(键按下)转KEY2
??????????????? JNB????? S3,KEY3????? ;P3.5为0(键按下)转KEY3
KEYRET:???????? RET?????????????????? ;无键按下,子程序返回
;******************************************************************************
;按键1功能处理
KEY1:?????????? LCALL?? DL10MS??????? ;延时10MS削抖动
??????????????? JB????? S1,KEYRET???? ;是干扰转KEYRET结束
??????????????? SETB??? 00H?????????? ;置逐字显示方式标志(20H.0=1)
??????????????? CLR???? 01H?????????? ;
??????????????? CLR???? 02H?????????? ;
??????????????? RET?????????????????? ;子程序返回
;******************************************************************************
; 按键2功能处理
KEY2:?????????? LCALL?? DL10MS??????? ;
??????????????? JB????? S2,KEYRET???? ;
??????????????? SETB??? 01H?????????? ;置上移显示方式标志(20H.1=1)
??????????????? CLR???? 00H?????????? ;
??????????????? CLR???? 02H?????????? ;
??????????????? RET?????????????????? ;
;******************************************************************************
; 按键3功能处理
KEY3:?????????? LCALL?? DL10MS??????? ;
??????????????? JB????? S3,KEYRET???? ;
??????????????? SETB??? 02H?????????? ;置左移显示方式标志(20H.2=1)
??????????????? CLR???? 01H?????????? ;
??????????????? CLR???? 00H?????????? ;
??????????????? RET
;******************************************************************************
;逐字显示功能程序
FUN0:?????????? MOV???? 30H,#80H???? ;1帧显示时间控制(约1秒)
??????????????? MOV???? 31H,#08H???? ;换帧跳转步距为8
??????????????? LJMP??? DISP1??????? ;转显示子程序DISP1
; 上移显示功能程序
FUN1:?????????? MOV???? 30H,#25H???? ;1帧显示时间控制(约80毫秒)
??????????????? MOV???? 31H,#01H???? ;换帧跳转步距为1
??????????????? LJMP??? DISP1??????? ;转显示子程序DISP1
;左移显示功能程序
FUN2:?????????? LJMP??? DISP2??????? ;
;******************************************************************************
;显示控制程序
DISP1:????????? MOV???? B,#40H?????? ;显示数据首址
??????????????? MOV???? R4,30H?????? ;放入1帧显示时间控制数据
??????????????? MOV???? R5,31H?????? ;放入跳转步距控制数据
LOOP:?????????? LCALL?? DISPLAY????? ;调用显示子程序一次
??????????????? DJNZ??? R4,LOOP????? ;1帧显示时间未到再转LOOP循环
??????????????? MOV???? R4,30H?????? ;1帧显示时间到,重装初值
??????????????? MOV???? A,B????????? ;
??????????????? CJNE??? A,#58H,CONT? ;不是末地址转CONT
??????????????? AJMP??? START1?????? ;是末地址,一次显示结束跳回START1
CONT:?????????? ADD???? A,R5???????? ;次帧扫描首址调整
??????????????? MOV???? B,A????????? ;
??????????????? AJMP??? LOOP???????? ;转LOOP进行次帧扫描
;******************************************************************************
;显示子程序,字符数据从P0口输出,扫描控制字从P2口输出,显示1帧约需8MS
DISPLAY:??????? MOV???? A,#0FFH????? ;
??????????????? MOV???? P0,A???????? ;关显示数据
??????????????? MOV???? P2,A???????? ;关扫描
??????????????? MOV???? R6,#0FEH???? ;赋扫描字
??????????????? MOV???? R0,B???????? ;赋显示数据首地址
??????????????? MOV???? R7,#08H????? ;一次扫描8行
DISLOOP:??????? MOV???? A,@R0??????? ;取显示数据
??????????????? MOV???? P0,A???????? ;放入P0口
??????????????? MOV???? P2,R6??????? ;扫描输出(显示某一行)
??????????????? ACALL?? DL1MS??????? ;亮1毫秒
??????????????? INC???? R0?????????? ;指向下一行数据地址
??????????????? MOV???? A,R6???????? ;扫描字移入A
??????????????? RL????? A??????????? ;循环左移一位
??????????????? MOV???? R6,A???????? ;放回R6
??????????????? DJNZ??? R7,DISLOOP?? ;8行扫描未完转DISLOOP继续
??????????????? RET????????????????? ;8行扫描结束
;******************************************************************************
;左移显示控制程序
DISP2:????????? MOV???? R5,#32?????? ; 左移32次
DISP22:???????? LCALL?? DISPP??????? ;调用左移显示控制子程序
??????????????? LCALL?? MOVH???????? ;调用高位移出处理子程序MOVH
??????????????? LCALL?? MOVH1??????? ;调用高位移出处理子程序MOVH1
??DJNZ?R5,DISP22??? ;左移显示32次控制
??????????????? LJMP??? START1?????? ;跳回主程序
;******************************************************************************
; 左移显示控制子程序
DISPP:????????? MOV???? B,#40H?????? ;第一显示字符首址
??????????????? MOV???? R4,#25H????? ;1帧显示时间控制
DISPP1:???????? LCALL?? DISPLAY????? ;调用显示子程序一次
??????????????? DJNZ??? R4,DISPP1??? ;1帧显示时间不到转DISPP再循环
??????????????? RET
;******************************************************************************
; 高位移出处理子程序。将"东哥单片机学习网"6个字符数据的最高位移出至21H-24H单元内
MOVH:?????????? MOV???? R1,#21H????? ;最高位移出存放单元首址
??????????????? MOV???? R0,#40H????? ;"东哥单片机学习网"字符数据首址
??????????????? MOV???? R2,#08H????? ;每"字"移8次
MOV1:?????????? MOV???? A,@R0??????? ;取"电子设计"字符数据
??????????????? CLR???? C??????????? ;清进位C
??????????????? RLC???? A??????????? ;带进位循左移
??????????????? MOV???? @R0,A??????? ;放回原单元
??????????????? MOV???? A,@R1??????? ;存放单元数据入A
??????????????? RRC???? A??????????? ;带进位循右移
??????????????? MOV???? @R1,A??????? ;放回存放单元
??????????????? INC???? R0?????????? ;字符数据地址加1
??????????????? DJNZ??? R2,MOV1????? ;移8次未完转MOV1再移
??????????????? MOV???? R2,#08H????? ;8次移完赋初值
??????????????? INC???? R1?????????? ;存放单元地址加1
??????????????? MOV???? A,R1???????? ;判断地址是否小于25H
??????????????? SUBB??? A,#25H?????? ;
??????????????? JZ????? OUT????????? ;等于25H退出
??????????????? AJMP??? MOV1???????? ;小于25H转MOV1继续
OUT:??????????? RET????????????????? ;子程序结束
;******************************************************************************
;高位移出处理子程序。
MOVH1:????????? MOV???? A,21H??????? ;21H与22H、23H、24H单元数据循交换
??????????????? XCH???? A,24H??????? ;21H与24H全交换
??????????????? XCH???? A,23H??????? ;23H与24H全交换
??????????????? XCH???? A,22H??????? ;23H与22H全交换
??????????????? MOV???? 21H,A??????? ;22H与21H全交换
??????????????? MOV???? R1,#21H????? ;以下是重新组成显示字符数据表程序
??????????????? MOV???? R0,#40H????? ;将21H-24H的各位分别移入50H-6FH的低位
??????????????? MOV???? R2,#08H????? ;移位次数
MOV2:?????????? MOV???? A,@R0??????? ;取字符数据
??????????????? RR????? A??????????? ;右移
??????????????? MOV???? @R0,A??????? ;放回原单元
??????????????? MOV???? A,@R1??????? ;取原移出最高位存放单元数
??????????????? CLR???? C??????????? ;清C
??????????????? RRC???? A??????????? ;带进位循环右移
??????????????? MOV???? @R1,A??????? ;放回原单元
??????????????? MOV???? A,@R0??????? ;取字符数据
??????????????? RLC???? A??????????? ;带进位循环左移
??????????????? MOV???? @R0,A??????? ;放回字符数据
??????????????? INC???? R0?????????? ;字符数据地址加1
??????????????? DJNZ??? R2,MOV2????? ;8次未完转MOV2再继续
??????????????? MOV???? R2,#08H????? ;8次完赋初值
??????????????? INC???? R1?????????? ;原移出最高位存放单元地址加1
??????????????? MOV???? A,R1???????? ;判断地址是否小于25H
??????????????? SUBB??? A,#25H?????? ;
??????????????? JZ????? OUT????????? ;等于25H转OUT退出
??????????????? AJMP??? MOV2???????? ;小于25H转MOV2继续
;******************************************************************************
;1毫秒延时子程序,采用调用扫键子程序延时,可快速读出按纽的状态
DL1MS:????????? MOV???? R3,#64H? ;100*(10+2)us
LOOPK:????????? LCALL?? KEYWORK
??????????????? DJNZ??? R3,LOOPK
??????????????? RET
;******************************************************************************
;0.5毫秒延时子程序
DL512:????????? MOV???? R2,#0FFH
LOOP1:????????? DJNZ??? R2,LOOP1
??????????????? RET
;******************************************************************************
; 10毫秒延时子程序
DL10MS:???????? MOV???? R3,#14H
LOOP2:????????? LCALL?? DL512
??????????????? DJNZ??? R3,LOOP2
??????????????? RET
;******************************************************************************
;"电子设计"显示用ROM数据表
TABLE:????????? DB????? 0DDH,88H,0DDH,88H,5DH,0D8H,0DDH,0D8H???? ;?? 桂
??????????????? DB????? 0F7H,81H,0EFH,0D7H,81H,0E3H,0D5H,0B6H??? ;?? 东
??????????????? DB????? 0B1H,0B5H,04H,0BFH,0B1H,0B5H,9BH,0A4H??? ;?? 设
??????????????? DB????? 0BBH,0BBH,1BH,0A0H,0BBH,0BBH,9BH,0BBH??? ;?? 计
??????????????? DB????? 00H,00H,00H,00H
??????????????? END????????????????????????????????????????????? ;程序结束

非常好我支持^.^

(0) 0%

不好我反对

(0) 0%

      发表评论

      用户评论
      评价:好评中评差评

      发表评论,获取积分! 请遵守相关规定!

      ?