当前位置:首页 > 单片机 > 单片机
[导读] ;26H-29H放显示小数位、个位、十位、百位BCD码数,24H-25H放频率控制数据(十六进制);CONBITLEQU21H;频率控制字节低8位CONBITHEQU22H;频率控制字节高8位KEYWORDEQU23H;存放键扫描时P1口值;;ORG0000H;程

;26H-29H放显示小数位、个位、十位、百位BCD码数,24H-25H放频率控制数据(十六进制)
;
CONBITLEQU21H;频率控制字节低8位
CONBITHEQU22H;频率控制字节高8位

KEYWORDEQU23H;存放键扫描时P1口值
;
;
ORG0000H;程序开始地址
LJMPSTART;转START执行
ORG0003H;
RETI;不用中断程序
ORG000BH;
RETI;不用中断程序
ORG0013H;
RETI;不用中断程序
ORG001BH;
RETI;不用中断程序
ORG0023H;
RETI;不用中断程序
ORG002BH;
RETI;不用中断程序
;
;初始化程序
CLEARMEN:MOVR0,#20H;20H-29H循环清0
MOVR1,#0AH;
CLEARLOOP:MOV@R0,#00H;
INCR0;
DJNZR1,CLEARLOOP;
MOVP0,#0FFH;四端口置1
MOVP1,#0FFH;
MOVP2,#0FFH;
MOVP3,#0FFH;
CLRP3.0;BH1415禁止操作
CLRP3.1;
CLRP3.2;
LCALLKEYFUN15;置立体声发射方式,开立体声发射指示灯
CLEAR1:MOVPCON,#00H;控制寄存器清0
MOV29H,#00H;置初始值为88MHz(显示为088.0)
MOV28H,#08H;
MOV27H,#08H;
MOV26H,#00H;
LCALLDISPUPDAT;写入BH1415芯片(修改发送频率)
RET;子程序返回
;
;主程序
START:LCALLCLEARMEN;上电初始化
MAIN:LCALLKEYWORK;调查键子程序
LCALLDISPLAY;LED显示一次
AJMPMAIN;转MAIN循环
NOP;PC出错处理
NOP;
AJMPSTART;重新初始化
;
;4*4行列扫描查键子程序
KEYWORK:MOVP1,#0FFH;置P1口为输入状态
CLRP1.0;扫描第一行(第一行为0)
MOVA,P1;读入P1口值
ANLA,#0F0H;低四位为0
CJNEA,#0F0H,KEYCON;高四位不为全1(有键按下)转KEYCOON
SETBP1.0;扫描第二行(第二行为0)
CLRP1.1;
MOVA,P1;读入P1口值
ANLA,#0F0H;低四位为0
CJNEA,#0F0H,KEYCON;高四位不为全1(有键按下)转KEYCOON
SETBP1.1;扫描第三行(第三行为0)
CLRP1.2;
MOVA,P1;读入P1口值
ANLA,#0F0H;低四位为0
CJNEA,#0F0H,KEYCON;高四位不为全1(有键按下)转KEYCOON
SETBP1.2;扫描第四行(第四行为0)
CLRP1.3;
MOVA,P1;读入P1口值
ANLA,#0F0H;低四位为0
CJNEA,#0F0H,KEYCON;高四位不为全1(有键按下)转KEYCOON
SETBP1.3;结束行扫描
RET;子程序返回
KEYCON:LCALLDL10MS;消抖处理
MOVA,P1;再读入P1口值
ANLA,#0F0H;低四位为0
CJNEA,#0F0H,KEYCHE;高四位不为全1,确有键按下,转KEYCHE
KEYOUT:RET;干扰,子程序返回
KEYCHE:MOVA,P1;读P1口值
MOVKEYWORD,A;放入23H暂存
CJLOOP:LCALLDISPLAY;调显示子程序
MOVA,P1;读P1口值
ANLA,#0F0H;低四位为0
CJNEA,#0F0H,CJLOOP;高四位为全1(键还按着),转CJLOOP等待释放
MOVR7,#00H;键释放,置R7初值为#00H(查表次数)
MOVDPTR,#KEYTAB;取键值表首址
CHEKEYLOOP:MOVA,R7;查表次数入A
MOVCA,@A+DPTR;查表
XRLA,KEYWORD;查表值与P1口读入值比较
JZKEYOK;为0(相等)转KEYOK
INCR7;不等,查表次数加1
CJNER7,#10H,CHEKEYLOOP;查表次数不超过16次转CHEKEYLOOP再查
RET;16次到,退出
;
KEYOK:MOVA,R7;查表次数入A(即键号值)
MOVB,A;放入B
RLA;左移
ADDA,B;相加(键号乘3处理JMP3字节指令)
MOVDPTR,#KEYFUNTAB;取键功能散转表首址
JMP@A+DPTR;查表
KEYFUNTAB:LJMPKEYFUN00;键功能散转表。跳至0号键功能程序
LJMPKEYFUN01;跳至01号键功能程序
LJMPKEYFUN02;跳至02号键功能程序
LJMPKEYFUN03
LJMPKEYFUN04
LJMPKEYFUN05
LJMPKEYFUN06
LJMPKEYFUN07
LJMPKEYFUN08
LJMPKEYFUN09
LJMPKEYFUN10
LJMPKEYFUN11
LJMPKEYFUN12
LJMPKEYFUN13
LJMPKEYFUN14
LJMPKEYFUN15;跳至15号键功能程序
RET;散转出错返回
;
;键号对应P1口数值表(同时按下两键为无效操作)
KEYTAB:DB0EEH,0DEH,0BEH,7EH,0EDH,0DDH,0BDH,7DH
DB0EBH,0DBH,0BBH,7BH,0E7H,0D7H,0B7H,77H,0FFH,0FFH
;
;0号键功能程序
KEYFUN00:INC29H;百位数加1
MOVA,29H;入A
CLRC;清进位标志
CJNEA,#02H,FUN00;
FUN00:JCFUN00OUT;百位小于2转FUNOO0UT
MOV29H,#00H;大于等于2清为0(百位只能是0或1)
FUN00OUT:MOVA,29H;判断百位是0还是1
XRLA,#01H;
JNZF00OUT1;若百位为0转FOOOUT1
MOV28H,#00H;若百位为1,十位为0
AJMPF00OUT;
F00OUT1:MOV28H,#08H;若百位为0,十位数改为8
F00OUT:LCALLDISPUPDAT;写入控制芯片(修改发射频率)
RET;返回
;
;01号键功能程序
KEYFUN01:INC28H;十位数加1
MOVA,28H;入A
CLRC;清进位标志
CJNEA,#0AH,FUN01;判断是否小于10
FUN01:JCFUN01OUT;十位数小于10转FUN01OUT
MOV28H,#00H;十位数大于或等于10清为0
FUN01OUT:MOVA,29H;判断百位数是0不是1
XRLA,#01H;
JNZF01OUT;
MOV28H,#00H;百位数为1时,十位数为0
AJMPF001OUT;
F01OUT:MOVA,28H;百位为0时,十位数只能是8或9
XRLA,#08H;判断是不是8
JZF001OUT;十位数是8转F001OUT
MOVA,28H;
XRLA,#09H;判断是不是9
JZF001OUT;十位数是9转F001OUT
MOV28H,#08H;不是8也不是9,十位赋值为8
F001OUT:LCALLDISPUPDAT;写入控制芯片(修改发射频率)
RET;返回
;
;02号键功能程序
KEYFUN02:INC27H;个位数加1
MOVA,27H;
CLRC;
CJNEA,#0AH,FUN02;判断是否小于10
FUN02:JCFUN02OUT;小于10转FUN02OUT
MOV27H,#00H;大于或等于10清为0
FUN02OUT:LCALLDISPUPDAT;写入控制芯片(修改发射频率)
RET;
;
;03号键功能程序
KEYFUN03:INC26H;个位数加1
MOVA,26H;
CLRC;
CJNEA,#0AH,FUN03;判断是不小于10
FUN03:JCFUN03OUT;小于10转FUN03OUT
MOV26H,#00H;大于或等于10清为0
FUN03OUT:LCALLDISPUPDAT;写入控制芯片(修改发射频率)
RET;返回
;
;04号键功能程序(频率预置键)
KEYFUN04:MOV29H,#01H;预置109.0MHZ发射频率
MOV28H,#00H
MOV27H,#09H
MOV26H,#00H
LCALLDISPUPDAT;写入控制芯片(修改发射频率)
RET
;
;05号键功能程序(频率预置键)
KEYFUN05:MOV29H,#01H;预置108.0MHZ发射频率
MOV28H,#00H
MOV27H,#08H
MOV26H,#00H
LCALLDISPUPDAT;写入控制芯片(修改发射频率)
RET
;
;06号键功能程序(频率预置键)
KEYFUN06:MOV29H,#01H;预置105.0MHZ发射频率
MOV28H,#00H
MOV27H,#05H
MOV26H,#00H
LCALLDISPUPDAT;写入控制芯片(修改发射频率)
RET
;
;07号键功能程序(频率预置键)
KEYFUN07:MOV29H,#01H;预置100.0MHZ发射频率
MOV28H,#00H
MOV27H,#00H
MOV26H,#00H
LCALLDISPUPDAT;写入控制芯片(修改发射频率)
RET
;
;08号键功能程序(频率预置键)
KEYFUN08:MOV29H,#00H;预置98.0MHZ发射频率
MOV28H,#09H
MOV27H,#08H
MOV26H,#00H
LCALLDISPUPDAT;写入控制芯片(修改发射频率)
RET
;
;09号键功能程序(频率预置键)
KEYFUN09:MOV29H,#00H;预置96.0MHZ发射频率
MOV28H,#09H
MOV27H,#06H
MOV26H,#00H
LCALLDISPUPDAT;写入控制芯片(修改发射频率)
RET
;
;10号键功能程序(频率预置键)
KEYFUN10:MOV29H,#00H;预置94.0MHZ发射频率
MOV28H,#09H
MOV27H,#04H
MOV26H,#00H
LCALLDISPUPDAT;写入控制芯片(修改发射频率)
RET
;
;11号键功能程序(频率预置键)
KEYFUN11:MOV29H,#00H;预置92.0MHZ发射频率
MOV28H,#09H
MOV27H,#02H
MOV26H,#00H
LCALLDISPUPDAT;写入控制芯片(修改发射频率)
RET
;
;12号键功能程序(频率预置键)
KEYFUN12:MOV29H,#00H;预置90.0MHZ发射频率
MOV28H,#09H
MOV27H,#00H
MOV26H,#00H
LCALLDISPUPDAT;写入控制芯片(修改发射频率)
RET
;
;13号键功能程序(频率预置键)
KEYFUN13:MOV29H,#00H;预置88.0MHZ发射频率
MOV28H,#08H
MOV27H,#08H
MOV26H,#00H
LCALLDISPUPDAT;写入控制芯片(修改发射频率)
RET
;
;14号键功能程序(频率预置键);预置87.0MHZ发射频率
KEYFUN14:MOV29H,#00H
MOV28H,#08H
MOV27H,#07H
MOV26H,#08H
LCALLDISPUPDAT;写入控制芯片(修改发射频率)
RET
;
;15号键功能程序(立体声/单声道设置键)
KEYFUN15:CPL03H;立体/单声标志取反
JNB03H,MONO;为0转单声道MONO
CLRP3.3;为1开立体声指示灯
LCALLPUTBIT;发送控制字至BH1415
RET;返回
MONO:SETBP3.3;关立体声指示灯
LCALLPUTBIT;发控制字至BH1415
RET;返回
;
;将BCD码转为十六进制数,与5位控制码合成操作码,写入控制芯片
DISPUPDAT:LCALLBCDB;调BCD码转为十六进制数程序
LCALLCONCOMMAND;调与5位控制码合成操作码程序
LCALLPUTBIT;发控制字至BH1415
RET;返回
;
;将BCD码转为十六进制数程序
BCDB:MOVCONBITL,#00H;控制字清0
MOVCONBITH,#00H;控制字清0
MOVCONBITL,26H;小数位数放入控制字低8位
MOVA,27H;个位数乘10操作
MOVB,#10;
LCALLMULLOOP;调乘法子程序
MOVA,28H;十位数乘100操作
MOVB,#100;
LCALLMULLOOP;调乘法子程序
MOVA,29H;
JNZADD3E8;百位数为1转ADD3E8(加1000操作)
RET;百位数为0退出
ADD3E8:CLRC;清进位档标志
MOVA,#0E8H;低8位加法
ADDA,CONBITL;累加
MOVCONBITL,A;放回CONBITL
MOVA,#03H;高8位加法
ADDCA,CONBITH;控制字高8位处理
MOVCONBITH,A;放回CONBITH
RET;返回
;
;乘法及累加处理程序(将四位显示的十进制BCD码转为1个二进制数)
MULLOOP:MULAB;乘法
CLRC;清进位标志
ADDA,CONBITL;积低8位与CONBITL相加
MOVCONBITL,A;放回CONBITL
MOVA,CONBITH;
ADDCA,B;积高8位与CONBITH带进位累加
MOVCONBITH,A;放回CONBITH
RET;返回
;
;频率控制数据与5位控制码合成BH1415控制字
CONCOMMAND:ANLCONBITH,#07H;高四位为0
MOVA,20H;控制字放入A
ORLA,CONBITH;合成控制字
MOVCONBITH,A;放回CONBITH
RET;返回
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;显示程序;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;共阳LED显示,P0口输出段码,P2口输出扫描字
DISPLAY:MOVR1,#26H;显示首址
MOVR5,#0FEH;设扫描字
PLAY:MOVA,R5;放入A
MOVP2,A;P2口输出
MOVA,@R1;取显示数据
MOVDPTR,#TAB;取段码表首址
MOVCA,@A+DPTR;查段码
MOVP0,A;从P0输出
MOVA,R5;读入扫描字
JBACC.1,PLAY1;不是十位(LED),不显示小数点
CLRP0.7;是十位,显示小数点
PLAY1:LCALLDL1MS;点亮1毫秒
INCR1;指向下一显示数据
JNBACC.3,ENDOUT;是第四位LED,退出
RLA;不是,左移一位
MOVR5,A;放回R5
SETBP0.7;关小数点
AJMPPLAY;转PLAY循环
ENDOUT:MOVP2,#0FFH;显示结束,关显示输出口
MOVP0,#0FFH;
RET;返回
;
;0-9共阳段码表
TAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0FFH
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;发送控制字节子程序;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
PUTBIT:MOVA,CONBITL;低8位控制字入A
SETBP3.2;BH1415使能(允许写)
LCALLPUT;发送8位
MOVA,CONBITH;高8位控制字入A
LCALLPUT;发送8位
CLRP3.2;BH1415写禁止
CLRP3.0;复位
CLRP3.1;复位
RET;返回
;
;字节发送子程序
PUT:MOVR3,#8;发送8位控制
CLRC;清C
PUT1:RRCA;带进位位右移(先发低位)
MOVP3.0,C;低位送至P3.0口
NOP;延时4微秒
NOP;
NOP;
NOP;
SETBP3.1;锁存数据(上升沿时锁存数据)
NOP;延时4微秒
NOP;
NOP;
NOP;
CLRP3.1;
DJNZR3,PUT1;8位未发完转PUT1再发
RET;8位发完结束
;
;513微秒延时子程序
DL513:MOVR3,#0FFH
DL513LOOP:DJNZR3,DL513LOOP
RET
;
;1毫秒延时子程序(LED点亮用)
DL1MS:MOVR4,#02H
DL1MSLOOP:LCALLDL513
DJNZR4,DL1MSLOOP
RET
;
;10毫秒延时子程序(消抖动用)
DL10MS:MOVR6,#0AH
DL10MSLOOP:LCALLDL1MS
DJNZR6,DL10MSLOOP
RET
;
;
END;程序结束

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭