📄 11.lst
字号:
页 1
01-29-03
01:55:34
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
;***************************;
; 数控调频台控制器 ;
;***************************;
;
;26H-29H放显示小数位、个位、十位、百位BCD码数,24H-25H放频率控制数据(十六进制)
;
CONBITL EQU 21H ;频率控制字节低8位
CONBITH EQU 22H ;频率控制字节高8位
KEYWORD EQU 23H ;存放键扫描时P1口值
;
;
ORG 0000H ;程序开始地址
0000 02005D LJMP START ;转START执行
ORG 0003H ;
0003 32 RETI ;不用中断程序
ORG 000BH ;
000B 32 RETI ; 不用中断程序
ORG 0013H ;
0013 32 RETI ; 不用中断程序
ORG 001BH ;
001B 32 RETI ; 不用中断程序
ORG 0023H ;
0023 32 RETI ; 不用中断程序
ORG 002BH ;
002B 32 RETI ; 不用中断程序
;
;初始化程序
002C 7820 CLEARMEN: MOV R0,#20H ;20H-29H循环清0
002E 790A MOV R1,#0AH ;
0030 7600 CLEARLOOP: MOV @R0,#00H ;
0032 08 INC R0 ;
0033 D9FB DJNZ R1,CLEARLOOP ;
0035 7580FF MOV P0,#0FFH ;四端口置1
0038 7590FF MOV P1,#0FFH ;
003B 75A0FF MOV P2,#0FFH ;
003E 75B0FF MOV P3,#0FFH ;
0041 C2B0 CLR P3.0 ;BH1415禁止操作
0043 C2B1 CLR P3.1 ;
0045 C2B2 CLR P3.2 ;
0047 12022E LCALL KEYFUN15 ;置立体声发射方式,开立体声发射指示灯
004A 758700 CLEAR1: MOV PCON,#00H ;控制寄存器清0
004D 752900 MOV 29H,#00H ; 置初始值为88MHZ(显示为088.0)
0050 752808 MOV 28H,#08H ;
0053 752708 MOV 27H,#08H ;
0056 752600 MOV 26H,#00H ;
0059 12023F LCALL DISPUPDAT ;写入BH1415芯片(修改发送频率)
005C 22 RET ;子程序返回
;
C:\MY DOCUMENTS\2003.02.12书稿\配套光盘源程序\实例11\11.ASM
页 2
01-29-03
01:55:34
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
;主程序
005D 12002C START: LCALL CLEARMEN ;上电初始化
0060 12006C MAIN: LCALL KEYWORK ;调查键子程序
0063 12028C LCALL DISPLAY ;LED显示一次
0066 0160 AJMP MAIN ;转MAIN循环
0068 00 NOP ;PC出错处理
0069 00 NOP ;
006A 015D AJMP START ;重新初始化
;
; 4*4行列扫描查键子程序
006C 7590FF KEYWORK: MOV P1,#0FFH ; 置P1口为输入状态
006F C290 CLR P1.0 ;扫描第一行(第一行为0)
0071 E590 MOV A,P1 ;读入P1口值
0073 54F0 ANL A,#0F0H ;低四位为0
0075 B4F024 CJNE A,#0F0H,KEYCON ;高四位不为全1(有键按下)转KEYCOON
0078 D290 SETB P1.0 ; 扫描第二行(第二行为0)
007A C291 CLR P1.1 ;
007C E590 MOV A,P1 ; 读入P1口值
007E 54F0 ANL A,#0F0H ; 低四位为0
0080 B4F019 CJNE A,#0F0H,KEYCON ; 高四位不为全1(有键按下)转KEYCOON
0083 D291 SETB P1.1 ; 扫描第三行(第三行为0)
0085 C292 CLR P1.2 ;
0087 E590 MOV A,P1 ; 读入P1口值
0089 54F0 ANL A,#0F0H ; 低四位为0
008B B4F00E CJNE A,#0F0H,KEYCON ; 高四位不为全1(有键按下)转KEYCOON
008E D292 SETB P1.2 ; 扫描第四行(第四行为0)
0090 C293 CLR P1.3 ;
0092 E590 MOV A,P1 ; 读入P1口值
0094 54F0 ANL A,#0F0H ; 低四位为0
0096 B4F003 CJNE A,#0F0H,KEYCON ; 高四位不为全1(有键按下)转KEYCOON
0099 D293 SETB P1.3 ;结束行扫描
009B 22 RET ;子程序返回
009C 1202F5 KEYCON: LCALL DL10MS ;消抖处理
009F E590 MOV A,P1 ;再读入P1口值
00A1 54F0 ANL A,#0F0H ; 低四位为0
00A3 B4F001 CJNE A,#0F0H,KEYCHE ; 高四位不为全1,确有键按下,转KEYCHE
00A6 22 KEYOUT: RET ;干扰,子程序返回
00A7 E590 KEYCHE: MOV A,P1 ;读P1口值
00A9 F523 MOV KEYWORD,A ;放入23H暂存
00AB 12028C CJLOOP: LCALL DISPLAY ;调显示子程序
00AE E590 MOV A,P1 ;读P1口值
00B0 54F0 ANL A,#0F0H ;低四位为0
00B2 B4F0F6 CJNE A,#0F0H,CJLOOP ;高四位为全1(键还按着),转CJLOOP等待释放
00B5 7F00 MOV R7,#00H ;键释放,置R7初值为#00H(查表次数)
00B7 900100 MOV DPTR,#KEYTAB ;取键值表首址
00BA EF CHEKEYLOOP: MOV A,R7 ;查表次数入A
00BB 93 MOVC A,@A+DPTR ;查表
00BC 6523 XRL A,KEYWORD ;查表值与P1口读入值比较
C:\MY DOCUMENTS\2003.02.12书稿\配套光盘源程序\实例11\11.ASM
页 3
01-29-03
01:55:34
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
00BE 6005 JZ KEYOK ;为0(相等)转KEYOK
00C0 0F INC R7 ;不等,查表次数加1
00C1 BF10F6 CJNE R7,#10H,CHEKEYLOOP ;查表次数不超过16次转CHEKEYLOOP再查
00C4 22 RET ;16次到,退出
;
00C5 EF KEYOK: MOV A,R7 ;查表次数入A(即键号值)
00C6 F5F0 MOV B,A ;放入B
00C8 23 RL A ;左移
00C9 25F0 ADD A,B ;相加(键号乘3处理JMP 3字节指令)
00CB 9000CF MOV DPTR,#KEYFUNTAB ;取键功能散转表首址
00CE 73 JMP @A+DPTR ;查表
00CF 020112 KEYFUNTAB: LJMP KEYFUN00 ; 键功能散转表。跳至0号键功能程序
00D2 020131 LJMP KEYFUN01 ; 跳至01号键功能程序
00D5 02015C LJMP KEYFUN02 ; 跳至02号键功能程序
00D8 02016D LJMP KEYFUN03
00DB 02017E LJMP KEYFUN04
00DE 02018E LJMP KEYFUN05
00E1 02019E LJMP KEYFUN06
00E4 0201AE LJMP KEYFUN07
00E7 0201BE LJMP KEYFUN08
00EA 0201CE LJMP KEYFUN09
00ED 0201DE LJMP KEYFUN10
00F0 0201EE LJMP KEYFUN11
00F3 0201FE LJMP KEYFUN12
00F6 02020E LJMP KEYFUN13
00F9 02021E LJMP KEYFUN14
00FC 02022E LJMP KEYFUN15 ; 跳至15号键功能程序
00FF 22 RET ;散转出错返回
;
;键号对应P1口数值表(同时按下两键为无效操作)
0100 EEDEBE
0103 7EEDDD
0106 BD7D KEYTAB: DB 0EEH,0DEH,0BEH,7EH,0EDH,0DDH,0BDH,7DH
0108 EBDBBB
010B 7BE7D7
010E B777FF
0111 FF DB 0EBH,0DBH,0BBH,7BH,0E7H,0D7H,0B7H,77H,0FFH,0FFH
;
;0号键功能程序
0112 0529 KEYFUN00: INC 29H ;百位数加1
0114 E529 MOV A,29H ;入A
0116 C3 CLR C ;清进位标志
0117 B40200 CJNE A,#02H,FUN00 ;
011A 4003 FUN00: JC FUN00OUT ;百位小于2转FUNOO0UT
011C 752900 MOV 29H,#00H ;大于等于2清为0(百位只能是0或1)
011F E529 FUN00OUT: MOV A,29H ; 判断百位是0还是1
0121 6401 XRL A,#01H ;
0123 7005 JNZ F00OUT1 ;若百位为0转FOOOUT1
C:\MY DOCUMENTS\2003.02.12书稿\配套光盘源程序\实例11\11.ASM
页 4
01-29-03
01:55:34
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
0125 752800 MOV 28H,#00H ;若百位为1,十位为0
0128 212D AJMP F00OUT ;
012A 752808 F00OUT1: MOV 28H,#08H ;若百位为0,十位数改为8
012D 12023F F00OUT: LCALL DISPUPDAT ;写入控制芯片(修改发射频率)
0130 22 RET ;返回
;
;01号键功能程序
0131 0528 KEYFUN01: INC 28H ;十位数加1
0133 E528 MOV A,28H ;入A
0135 C3 CLR C ;清进位标志
0136 B40A00 CJNE A,#0AH,FUN01 ;判断是否小于10
0139 4003 FUN01: JC FUN01OUT ;十位数小于10转FUN01OUT
013B 752800 MOV 28H,#00H ;十位数大于或等于10清为0
013E E529 FUN01OUT: MOV A,29H ;判断百位数是0不是1
0140 6401 XRL A,#01H ;
0142 7005 JNZ F01OUT ;
0144 752800 MOV 28H,#00H ;百位数为1时,十位数为0
0147 2158 AJMP F001OUT ;
0149 E528 F01OUT: MOV A,28H ;百 位为0时,十位数只能是8或9
014B 6408 XRL A,#08H ;判断是不是8
014D 6009 JZ F001OUT ;十位数是8转F001OUT
014F E528 MOV A,28H ;
0151 6409 XRL A,#09H ;判断是不是9
0153 6003 JZ F001OUT ;十位数是9转F001OUT
0155 752808 MOV 28H,#08H ;不是8也不是9,十位赋值为8
0158 12023F F001OUT: LCALL DISPUPDAT ;写入控制芯片(修改发射频率)
015B 22 RET ;返回
;
;02号键功能程序
015C 0527 KEYFUN02: INC 27H ;个位数加1
015E E527 MOV A,27H ;
0160 C3 CLR C ;
0161 B40A00 CJNE A,#0AH,FUN02 ;判断是否小于10
0164 4003 FUN02: JC FUN02OUT ;小于10转FUN02OUT
0166 752700 MOV 27H,#00H ;大于或等于10清为0
0169 12023F FUN02OUT: LCALL DISPUPDAT ;写入控制芯片(修改发射频率)
016C 22 RET ;
;
;03号键功能程序
016D 0526 KEYFUN03: INC 26H ;个位数加1
016F E526 MOV A,26H ;
0171 C3 CLR C ;
0172 B40A00 CJNE A,#0AH,FUN03 ;判断是不小于10
0175 4003 FUN03: JC FUN03OUT ;小于10转FUN03OUT
0177 752600 MOV 26H,#00H ;大于或等于10清为0
017A 12023F FUN03OUT: LCALL DISPUPDAT ;写入控制芯片(修改发射频率)
017D 22 RET ;返回
;
C:\MY DOCUMENTS\2003.02.12书稿\配套光盘源程序\实例11\11.ASM
页 5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -