當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀] ;26H-29H放顯示小數(shù)位、個(gè)位、十位、百位BCD碼數(shù),24H-25H放頻率控制數(shù)據(jù)(十六進(jìn)制);CONBITLEQU21H;頻率控制字節(jié)低8位CONBITHEQU22H;頻率控制字節(jié)高8位KEYWORDEQU23H;存放鍵掃描時(shí)P1口值;;ORG0000H;程

;26H-29H放顯示小數(shù)位、個(gè)位、十位、百位BCD碼數(shù),24H-25H放頻率控制數(shù)據(jù)(十六進(jìn)制)
;
CONBITLEQU21H;頻率控制字節(jié)低8位
CONBITHEQU22H;頻率控制字節(jié)高8位

KEYWORDEQU23H;存放鍵掃描時(shí)P1口值
;
;
ORG0000H;程序開始地址
LJMPSTART;轉(zhuǎn)START執(zhí)行
ORG0003H;
RETI;不用中斷程序
ORG000BH;
RETI;不用中斷程序
ORG0013H;
RETI;不用中斷程序
ORG001BH;
RETI;不用中斷程序
ORG0023H;
RETI;不用中斷程序
ORG002BH;
RETI;不用中斷程序
;
;初始化程序
CLEARMEN:MOVR0,#20H;20H-29H循環(huán)清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;置立體聲發(fā)射方式,開立體聲發(fā)射指示燈
CLEAR1:MOVPCON,#00H;控制寄存器清0
MOV29H,#00H;置初始值為88MHz(顯示為088.0)
MOV28H,#08H;
MOV27H,#08H;
MOV26H,#00H;
LCALLDISPUPDAT;寫入BH1415芯片(修改發(fā)送頻率)
RET;子程序返回
;
;主程序
START:LCALLCLEARMEN;上電初始化
MAIN:LCALLKEYWORK;調(diào)查鍵子程序
LCALLDISPLAY;LED顯示一次
AJMPMAIN;轉(zhuǎn)MAIN循環(huán)
NOP;PC出錯(cuò)處理
NOP;
AJMPSTART;重新初始化
;
;4*4行列掃描查鍵子程序
KEYWORK:MOVP1,#0FFH;置P1口為輸入狀態(tài)
CLRP1.0;掃描第一行(第一行為0)
MOVA,P1;讀入P1口值
ANLA,#0F0H;低四位為0
CJNEA,#0F0H,KEYCON;高四位不為全1(有鍵按下)轉(zhuǎn)KEYCOON
SETBP1.0;掃描第二行(第二行為0)
CLRP1.1;
MOVA,P1;讀入P1口值
ANLA,#0F0H;低四位為0
CJNEA,#0F0H,KEYCON;高四位不為全1(有鍵按下)轉(zhuǎn)KEYCOON
SETBP1.1;掃描第三行(第三行為0)
CLRP1.2;
MOVA,P1;讀入P1口值
ANLA,#0F0H;低四位為0
CJNEA,#0F0H,KEYCON;高四位不為全1(有鍵按下)轉(zhuǎn)KEYCOON
SETBP1.2;掃描第四行(第四行為0)
CLRP1.3;
MOVA,P1;讀入P1口值
ANLA,#0F0H;低四位為0
CJNEA,#0F0H,KEYCON;高四位不為全1(有鍵按下)轉(zhuǎn)KEYCOON
SETBP1.3;結(jié)束行掃描
RET;子程序返回
KEYCON:LCALLDL10MS;消抖處理
MOVA,P1;再讀入P1口值
ANLA,#0F0H;低四位為0
CJNEA,#0F0H,KEYCHE;高四位不為全1,確有鍵按下,轉(zhuǎn)KEYCHE
KEYOUT:RET;干擾,子程序返回
KEYCHE:MOVA,P1;讀P1口值
MOVKEYWORD,A;放入23H暫存
CJLOOP:LCALLDISPLAY;調(diào)顯示子程序
MOVA,P1;讀P1口值
ANLA,#0F0H;低四位為0
CJNEA,#0F0H,CJLOOP;高四位為全1(鍵還按著),轉(zhuǎn)CJLOOP等待釋放
MOVR7,#00H;鍵釋放,置R7初值為#00H(查表次數(shù))
MOVDPTR,#KEYTAB;取鍵值表首址
CHEKEYLOOP:MOVA,R7;查表次數(shù)入A
MOVCA,@A+DPTR;查表
XRLA,KEYWORD;查表值與P1口讀入值比較
JZKEYOK;為0(相等)轉(zhuǎn)KEYOK
INCR7;不等,查表次數(shù)加1
CJNER7,#10H,CHEKEYLOOP;查表次數(shù)不超過16次轉(zhuǎn)CHEKEYLOOP再查
RET;16次到,退出
;
KEYOK:MOVA,R7;查表次數(shù)入A(即鍵號(hào)值)
MOVB,A;放入B
RLA;左移
ADDA,B;相加(鍵號(hào)乘3處理JMP3字節(jié)指令)
MOVDPTR,#KEYFUNTAB;取鍵功能散轉(zhuǎn)表首址
JMP@A+DPTR;查表
KEYFUNTAB:LJMPKEYFUN00;鍵功能散轉(zhuǎn)表。跳至0號(hào)鍵功能程序
LJMPKEYFUN01;跳至01號(hào)鍵功能程序
LJMPKEYFUN02;跳至02號(hào)鍵功能程序
LJMPKEYFUN03
LJMPKEYFUN04
LJMPKEYFUN05
LJMPKEYFUN06
LJMPKEYFUN07
LJMPKEYFUN08
LJMPKEYFUN09
LJMPKEYFUN10
LJMPKEYFUN11
LJMPKEYFUN12
LJMPKEYFUN13
LJMPKEYFUN14
LJMPKEYFUN15;跳至15號(hào)鍵功能程序
RET;散轉(zhuǎn)出錯(cuò)返回
;
;鍵號(hào)對(duì)應(yīng)P1口數(shù)值表(同時(shí)按下兩鍵為無效操作)
KEYTAB:DB0EEH,0DEH,0BEH,7EH,0EDH,0DDH,0BDH,7DH
DB0EBH,0DBH,0BBH,7BH,0E7H,0D7H,0B7H,77H,0FFH,0FFH
;
;0號(hào)鍵功能程序
KEYFUN00:INC29H;百位數(shù)加1
MOVA,29H;入A
CLRC;清進(jìn)位標(biāo)志
CJNEA,#02H,FUN00;
FUN00:JCFUN00OUT;百位小于2轉(zhuǎn)FUNOO0UT
MOV29H,#00H;大于等于2清為0(百位只能是0或1)
FUN00OUT:MOVA,29H;判斷百位是0還是1
XRLA,#01H;
JNZF00OUT1;若百位為0轉(zhuǎn)FOOOUT1
MOV28H,#00H;若百位為1,十位為0
AJMPF00OUT;
F00OUT1:MOV28H,#08H;若百位為0,十位數(shù)改為8
F00OUT:LCALLDISPUPDAT;寫入控制芯片(修改發(fā)射頻率)
RET;返回
;
;01號(hào)鍵功能程序
KEYFUN01:INC28H;十位數(shù)加1
MOVA,28H;入A
CLRC;清進(jìn)位標(biāo)志
CJNEA,#0AH,FUN01;判斷是否小于10
FUN01:JCFUN01OUT;十位數(shù)小于10轉(zhuǎn)FUN01OUT
MOV28H,#00H;十位數(shù)大于或等于10清為0
FUN01OUT:MOVA,29H;判斷百位數(shù)是0不是1
XRLA,#01H;
JNZF01OUT;
MOV28H,#00H;百位數(shù)為1時(shí),十位數(shù)為0
AJMPF001OUT;
F01OUT:MOVA,28H;百位為0時(shí),十位數(shù)只能是8或9
XRLA,#08H;判斷是不是8
JZF001OUT;十位數(shù)是8轉(zhuǎn)F001OUT
MOVA,28H;
XRLA,#09H;判斷是不是9
JZF001OUT;十位數(shù)是9轉(zhuǎn)F001OUT
MOV28H,#08H;不是8也不是9,十位賦值為8
F001OUT:LCALLDISPUPDAT;寫入控制芯片(修改發(fā)射頻率)
RET;返回
;
;02號(hào)鍵功能程序
KEYFUN02:INC27H;個(gè)位數(shù)加1
MOVA,27H;
CLRC;
CJNEA,#0AH,FUN02;判斷是否小于10
FUN02:JCFUN02OUT;小于10轉(zhuǎn)FUN02OUT
MOV27H,#00H;大于或等于10清為0
FUN02OUT:LCALLDISPUPDAT;寫入控制芯片(修改發(fā)射頻率)
RET;
;
;03號(hào)鍵功能程序
KEYFUN03:INC26H;個(gè)位數(shù)加1
MOVA,26H;
CLRC;
CJNEA,#0AH,FUN03;判斷是不小于10
FUN03:JCFUN03OUT;小于10轉(zhuǎn)FUN03OUT
MOV26H,#00H;大于或等于10清為0
FUN03OUT:LCALLDISPUPDAT;寫入控制芯片(修改發(fā)射頻率)
RET;返回
;
;04號(hào)鍵功能程序(頻率預(yù)置鍵)
KEYFUN04:MOV29H,#01H;預(yù)置109.0MHZ發(fā)射頻率
MOV28H,#00H
MOV27H,#09H
MOV26H,#00H
LCALLDISPUPDAT;寫入控制芯片(修改發(fā)射頻率)
RET
;
;05號(hào)鍵功能程序(頻率預(yù)置鍵)
KEYFUN05:MOV29H,#01H;預(yù)置108.0MHZ發(fā)射頻率
MOV28H,#00H
MOV27H,#08H
MOV26H,#00H
LCALLDISPUPDAT;寫入控制芯片(修改發(fā)射頻率)
RET
;
;06號(hào)鍵功能程序(頻率預(yù)置鍵)
KEYFUN06:MOV29H,#01H;預(yù)置105.0MHZ發(fā)射頻率
MOV28H,#00H
MOV27H,#05H
MOV26H,#00H
LCALLDISPUPDAT;寫入控制芯片(修改發(fā)射頻率)
RET
;
;07號(hào)鍵功能程序(頻率預(yù)置鍵)
KEYFUN07:MOV29H,#01H;預(yù)置100.0MHZ發(fā)射頻率
MOV28H,#00H
MOV27H,#00H
MOV26H,#00H
LCALLDISPUPDAT;寫入控制芯片(修改發(fā)射頻率)
RET
;
;08號(hào)鍵功能程序(頻率預(yù)置鍵)
KEYFUN08:MOV29H,#00H;預(yù)置98.0MHZ發(fā)射頻率
MOV28H,#09H
MOV27H,#08H
MOV26H,#00H
LCALLDISPUPDAT;寫入控制芯片(修改發(fā)射頻率)
RET
;
;09號(hào)鍵功能程序(頻率預(yù)置鍵)
KEYFUN09:MOV29H,#00H;預(yù)置96.0MHZ發(fā)射頻率
MOV28H,#09H
MOV27H,#06H
MOV26H,#00H
LCALLDISPUPDAT;寫入控制芯片(修改發(fā)射頻率)
RET
;
;10號(hào)鍵功能程序(頻率預(yù)置鍵)
KEYFUN10:MOV29H,#00H;預(yù)置94.0MHZ發(fā)射頻率
MOV28H,#09H
MOV27H,#04H
MOV26H,#00H
LCALLDISPUPDAT;寫入控制芯片(修改發(fā)射頻率)
RET
;
;11號(hào)鍵功能程序(頻率預(yù)置鍵)
KEYFUN11:MOV29H,#00H;預(yù)置92.0MHZ發(fā)射頻率
MOV28H,#09H
MOV27H,#02H
MOV26H,#00H
LCALLDISPUPDAT;寫入控制芯片(修改發(fā)射頻率)
RET
;
;12號(hào)鍵功能程序(頻率預(yù)置鍵)
KEYFUN12:MOV29H,#00H;預(yù)置90.0MHZ發(fā)射頻率
MOV28H,#09H
MOV27H,#00H
MOV26H,#00H
LCALLDISPUPDAT;寫入控制芯片(修改發(fā)射頻率)
RET
;
;13號(hào)鍵功能程序(頻率預(yù)置鍵)
KEYFUN13:MOV29H,#00H;預(yù)置88.0MHZ發(fā)射頻率
MOV28H,#08H
MOV27H,#08H
MOV26H,#00H
LCALLDISPUPDAT;寫入控制芯片(修改發(fā)射頻率)
RET
;
;14號(hào)鍵功能程序(頻率預(yù)置鍵);預(yù)置87.0MHZ發(fā)射頻率
KEYFUN14:MOV29H,#00H
MOV28H,#08H
MOV27H,#07H
MOV26H,#08H
LCALLDISPUPDAT;寫入控制芯片(修改發(fā)射頻率)
RET
;
;15號(hào)鍵功能程序(立體聲/單聲道設(shè)置鍵)
KEYFUN15:CPL03H;立體/單聲標(biāo)志取反
JNB03H,MONO;為0轉(zhuǎn)單聲道MONO
CLRP3.3;為1開立體聲指示燈
LCALLPUTBIT;發(fā)送控制字至BH1415
RET;返回
MONO:SETBP3.3;關(guān)立體聲指示燈
LCALLPUTBIT;發(fā)控制字至BH1415
RET;返回
;
;將BCD碼轉(zhuǎn)為十六進(jìn)制數(shù),與5位控制碼合成操作碼,寫入控制芯片
DISPUPDAT:LCALLBCDB;調(diào)BCD碼轉(zhuǎn)為十六進(jìn)制數(shù)程序
LCALLCONCOMMAND;調(diào)與5位控制碼合成操作碼程序
LCALLPUTBIT;發(fā)控制字至BH1415
RET;返回
;
;將BCD碼轉(zhuǎn)為十六進(jìn)制數(shù)程序
BCDB:MOVCONBITL,#00H;控制字清0
MOVCONBITH,#00H;控制字清0
MOVCONBITL,26H;小數(shù)位數(shù)放入控制字低8位
MOVA,27H;個(gè)位數(shù)乘10操作
MOVB,#10;
LCALLMULLOOP;調(diào)乘法子程序
MOVA,28H;十位數(shù)乘100操作
MOVB,#100;
LCALLMULLOOP;調(diào)乘法子程序
MOVA,29H;
JNZADD3E8;百位數(shù)為1轉(zhuǎn)ADD3E8(加1000操作)
RET;百位數(shù)為0退出
ADD3E8:CLRC;清進(jìn)位檔標(biāo)志
MOVA,#0E8H;低8位加法
ADDA,CONBITL;累加
MOVCONBITL,A;放回CONBITL
MOVA,#03H;高8位加法
ADDCA,CONBITH;控制字高8位處理
MOVCONBITH,A;放回CONBITH
RET;返回
;
;乘法及累加處理程序(將四位顯示的十進(jìn)制BCD碼轉(zhuǎn)為1個(gè)二進(jìn)制數(shù))
MULLOOP:MULAB;乘法
CLRC;清進(jìn)位標(biāo)志
ADDA,CONBITL;積低8位與CONBITL相加
MOVCONBITL,A;放回CONBITL
MOVA,CONBITH;
ADDCA,B;積高8位與CONBITH帶進(jìn)位累加
MOVCONBITH,A;放回CONBITH
RET;返回
;
;頻率控制數(shù)據(jù)與5位控制碼合成BH1415控制字
CONCOMMAND:ANLCONBITH,#07H;高四位為0
MOVA,20H;控制字放入A
ORLA,CONBITH;合成控制字
MOVCONBITH,A;放回CONBITH
RET;返回
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;顯示程序;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;共陽LED顯示,P0口輸出段碼,P2口輸出掃描字
DISPLAY:MOVR1,#26H;顯示首址
MOVR5,#0FEH;設(shè)掃描字
PLAY:MOVA,R5;放入A
MOVP2,A;P2口輸出
MOVA,@R1;取顯示數(shù)據(jù)
MOVDPTR,#TAB;取段碼表首址
MOVCA,@A+DPTR;查段碼
MOVP0,A;從P0輸出
MOVA,R5;讀入掃描字
JBACC.1,PLAY1;不是十位(LED),不顯示小數(shù)點(diǎn)
CLRP0.7;是十位,顯示小數(shù)點(diǎn)
PLAY1:LCALLDL1MS;點(diǎn)亮1毫秒
INCR1;指向下一顯示數(shù)據(jù)
JNBACC.3,ENDOUT;是第四位LED,退出
RLA;不是,左移一位
MOVR5,A;放回R5
SETBP0.7;關(guān)小數(shù)點(diǎn)
AJMPPLAY;轉(zhuǎn)PLAY循環(huán)
ENDOUT:MOVP2,#0FFH;顯示結(jié)束,關(guān)顯示輸出口
MOVP0,#0FFH;
RET;返回
;
;0-9共陽段碼表
TAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0FFH
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;發(fā)送控制字節(jié)子程序;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
PUTBIT:MOVA,CONBITL;低8位控制字入A
SETBP3.2;BH1415使能(允許寫)
LCALLPUT;發(fā)送8位
MOVA,CONBITH;高8位控制字入A
LCALLPUT;發(fā)送8位
CLRP3.2;BH1415寫禁止
CLRP3.0;復(fù)位
CLRP3.1;復(fù)位
RET;返回
;
;字節(jié)發(fā)送子程序
PUT:MOVR3,#8;發(fā)送8位控制
CLRC;清C
PUT1:RRCA;帶進(jìn)位位右移(先發(fā)低位)
MOVP3.0,C;低位送至P3.0口
NOP;延時(shí)4微秒
NOP;
NOP;
NOP;
SETBP3.1;鎖存數(shù)據(jù)(上升沿時(shí)鎖存數(shù)據(jù))
NOP;延時(shí)4微秒
NOP;
NOP;
NOP;
CLRP3.1;
DJNZR3,PUT1;8位未發(fā)完轉(zhuǎn)PUT1再發(fā)
RET;8位發(fā)完結(jié)束
;
;513微秒延時(shí)子程序
DL513:MOVR3,#0FFH
DL513LOOP:DJNZR3,DL513LOOP
RET
;
;1毫秒延時(shí)子程序(LED點(diǎn)亮用)
DL1MS:MOVR4,#02H
DL1MSLOOP:LCALLDL513
DJNZR4,DL1MSLOOP
RET
;
;10毫秒延時(shí)子程序(消抖動(dòng)用)
DL10MS:MOVR6,#0AH
DL10MSLOOP:LCALLDL1MS
DJNZR6,DL10MSLOOP
RET
;
;
END;程序結(jié)束

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉