數(shù)控調頻臺匯編程序_第1頁
數(shù)控調頻臺匯編程序_第2頁
數(shù)控調頻臺匯編程序_第3頁
數(shù)控調頻臺匯編程序_第4頁
數(shù)控調頻臺匯編程序_第5頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、數(shù)控調頻臺匯編程序 日期:2011-05-21 來源:本站原創(chuàng) 作者:佚名 字體:大 中 小 (投遞新聞) ;26H-29H放顯示小數(shù)位、個位、十位、百位BCD碼數(shù),24H-25H放頻率控制數(shù)據(jù)(十六進制) ; CONBITL EQU 21H ;頻率控制字節(jié)低8位 CONBITH EQU 22H ;頻率控制字節(jié)高8位 KEYWORD EQU 23H ;存放鍵掃描時P1口值 ; ; ORG 0000H ;程序開始地址 LJMP START ;轉START執(zhí)行 ORG 0003H ; RETI ;不用中斷程序 ORG 000BH ; RETI ; 不用中斷程序 ORG 0013H ; RETI ;

2、 不用中斷程序 ORG 001BH ; RETI ; 不用中斷程序 ORG 0023H ; RETI ; 不用中斷程序 ORG 002BH ; RETI ; 不用中斷程序 ; ;初始化程序 CLEARMEN: MOV R0,#20H ;20H-29H循環(huán)清0 MOV R1,#0AH ; CLEARLOOP: MOV R0,#00H ; INC R0 ; DJNZ R1,CLEARLOOP ; MOV P0,#0FFH ;四端口置1 MOV P1,#0FFH ; MOV P2,#0FFH ; MOV P3,#0FFH ; CLR P3.0 ;BH1415禁止操作 CLR P3.1 ; CLR P

3、3.2 ; LCALL KEYFUN15 ;置立體聲發(fā)射方式,開立體聲發(fā)射指示燈 CLEAR1: MOV PCON,#00H ;控制寄存器清0 MOV 29H,#00H ; 置初始值為88MHZ(顯示為088.0) MOV 28H,#08H ; MOV 27H,#08H ; MOV 26H,#00H ; LCALL DISPUPDAT ;寫入BH1415芯片(修改發(fā)送頻率) RET ;子程序返回 ; ;主程序 START: LCALL CLEARMEN ;上電初始化 MAIN: LCALL KEYWORK ;調查鍵子程序 LCALL DISPLAY ;LED顯示一次 AJMP MAIN ;轉M

4、AIN循環(huán) NOP ;PC出錯處理 NOP ; AJMP START ;重新初始化 ; ; 4*4行列掃描查鍵子程序 KEYWORK: MOV P1,#0FFH ; 置P1口為輸入狀態(tài) CLR P1.0 ;掃描第一行(第一行為0) MOV A,P1 ;讀入P1口值 ANL A,#0F0H ;低四位為0 CJNE A,#0F0H,KEYCON ;高四位不為全1(有鍵按下)轉KEYCOON SETB P1.0 ; 掃描第二行(第二行為0) CLR P1.1 ; MO V A,P1 ; 讀入P1口值 ANL A,#0F0H ; 低四位為0 CJNE A,#0F0H,KEYCON ; 高四位不為全1(

5、有鍵按下)轉KEYCOON SETB P1.1 ; 掃描第三行(第三行為0) CLR P1.2 ; MOV A,P1 ; 讀入P1口值 ANL A,#0F0H ; 低四位為0 CJNE A,#0F0H,KEYCON ; 高四位不為全1(有鍵按下)轉KEYCOON SETB P1.2 ; 掃描第四行(第四行為0) CLR P1.3 ; MOV A,P1 ; 讀入P1口值 ANL A,#0F0H ; 低四位為0 CJNE A,#0F0H,KEYCON ; 高四位不為全1(有鍵按下)轉KEYCOON SETB P1.3 ;結束行掃描 RET ;子程序返回 KEYCON: LCALL DL10MS ;

6、消抖處理 MOV A,P1 ;再讀入P1口值 ANL A,#0F0H ; 低四位為0 CJNE A,#0F0H,KEYCHE ; 高四位不為全1,確有鍵按下,轉KEYCHE KEYOUT: RET ;干擾,子程序返回 KEYCHE: MOV A,P1 ;讀P1口值 MOV KEYWORD,A ;放入23H暫存 CJLOOP: LCALL DISPLAY ;調顯示子程序 MOV A,P1 ;讀P1口值 ANL A,#0F0H ;低四位為0 CJNE A,#0F0H,CJLOOP ;高四位為全1(鍵還按著),轉CJLOOP等待釋放 MOV R7,#00H ;鍵釋放,置R7初值為#00H(查表次數(shù))

7、 MOV DPTR,#KEYTAB ;取鍵值表首址 CHEKEYLOOP: MOV A,R7 ;查表次數(shù)入A MOVC A,A+DPTR ;查表 XRL A,KEYWORD ;查表值與P1口讀入值比較 JZ KEYOK ;為0(相等)轉KEYOK INC R7 ;不等,查表次數(shù)加1 CJNE R7,#10H,CHEKEYLOOP ;查表次數(shù)不超過16次轉CHEKEYLOOP再查 RET ;16次到,退出 ; KEYOK: MOV A,R7 ;查表次數(shù)入A(即鍵號值) MOV B,A ;放入B RL A ;左移 ADD A,B ;相加(鍵號乘3處理JMP 3字節(jié)指令) MOV DPTR,#KEY

8、FUNTAB ;取鍵功能散轉表首址 JMP A+DPTR ;查表 KEYFUNTAB: LJMP KEYFUN00 ; 鍵功能散轉表。跳至0號鍵功能程序 LJMP KEYFUN01 ; 跳至01號鍵功能程序 LJMP KEYFUN02 ; 跳至02號鍵功能程序 LJMP KEYFUN03 LJMP KEYFUN04 LJMP KEYFUN05 LJMP KEYFUN06 LJMP KEYFUN07 LJMP KEYFUN08 LJMP KEYFUN09 LJMP KEYFUN10 LJMP KEYFUN11 LJMP KEYFUN12 LJMP KEYFUN13 LJMP KEYFUN14 L

9、JMP KEYFUN15 ; 跳至15號鍵功能程序 RET ;散轉出錯返回 ; ;鍵號對應P1口數(shù)值表(同時按下兩鍵為無效操作) KEYTAB: DB 0EEH,0DEH,0BEH,7EH,0EDH,0DDH,0BDH,7DH DB 0EBH,0DBH,0BBH,7BH,0E7H,0D7H,0B7H,77H,0FFH,0FFH ; ;0號鍵功能程序 KEYFUN00: INC 29H ;百位數(shù)加1 MOV A,29H ;入A CLR C ;清進位標志 CJNE A,#02H,FUN00 ; FUN00: JC FUN00OUT ;百位小于2轉FUNOO0UT MOV 29H,#00H ;大于等

10、于2清為0(百位只能是0或1) FUN00OUT: MOV A,29H ; 判斷百位是0還是1 XRL A,#01H ; JNZ F00OUT1 ;若百位為0轉FOOOUT1 MOV 28H,#00H ;若百位為1,十位為0 AJMP F00OUT ; F00OUT1: MOV 28H,#08H ;若百位為0,十位數(shù)改為8 F00OUT: LCALL DISPUPDAT ;寫入控制芯片(修改發(fā)射頻率) RET ;返回 ; ;01號鍵功能程序 KEYFUN01: INC 28H ;十位數(shù)加1 MOV A,28H ;入A CLR C ;清進位標志 CJNE A,#0AH,FUN01 ;判斷是否小于

11、10 FUN01: JC FUN01OUT ;十位數(shù)小于10轉FUN01OUT MOV 28H,#00H ;十位數(shù)大于或等于10清為0 FUN01OUT: MOV A,29H ;判斷百位數(shù)是0不是1 XRL A,#01H ; JNZ F01OUT ; MOV 28H,#00H ;百位數(shù)為1時,十位數(shù)為0 AJMP F001OUT ; F01OUT: MOV A,28H ;百 位為0時,十位數(shù)只能是8或9 XRL A,#08H ;判斷是不是8 JZ F001OUT ;十位數(shù)是8轉F001OUT MOV A,28H ; XRL A,#09H ;判斷是不是9 JZ F001OUT ;十位數(shù)是9轉F0

12、01OUT MOV 28H,#08H ;不是8也不是9,十位賦值為8 F001OUT: LCALL DISPUPDAT ;寫入控制芯片(修改發(fā)射頻率) RET ;返回 ; ;02號鍵功能程序 KEYFUN02: INC 27H ;個位數(shù)加1 MOV A,27H ; CLR C ; CJNE A,#0AH,FUN02 ;判斷是否小于10 FUN02: JC FUN02OUT ;小于10轉FUN02OUT MOV 27H,#00H ;大于或等于10清為0 FUN02OUT: LCALL DISPUPDAT ;寫入控制芯片(修改發(fā)射頻率) RET ; ; ;03號鍵功能程序 KEYFUN03: IN

13、C 26H ;個位數(shù)加1 MOV A,26H ; CLR C ; CJNE A,#0AH,FUN03 ;判斷是不小于10 FUN03: JC FUN03OUT ;小于10轉FUN03OUT MOV 26H,#00H ;大于或等于10清為0 FUN03OUT: LCALL DISPUPDAT ;寫入控制芯片(修改發(fā)射頻率) RET ;返回 ; ;04號鍵功能程序(頻率預置鍵) KEYFUN04: MOV 29H,#01H ; 預置109.0MHZ發(fā)射頻率 MOV 28H,#00H MOV 27H,#09H MOV 26H,#00H LCALL DISPUPDAT ;寫入控制芯片(修改發(fā)射頻率)

14、RET ; ;05號鍵功能程序(頻率預置鍵) KEYFUN05: MOV 29H,#01H ; 預置108.0MHZ發(fā)射頻率 MOV 28H,#00H MOV 27H,#08H MOV 26H,#00H LCALL DISPUPDAT ;寫入控制芯片(修改發(fā)射頻率) RET ; ;06號鍵功能程序(頻率預置鍵) KEYFUN06: MOV 29H,#01H ; 預置105.0MHZ發(fā)射頻率 MOV 28H,#00H MOV 27H,#05H MOV 26H,#00H LCALL DISPUPDAT ;寫入控制芯片(修改發(fā)射頻率) RET ; ;07號鍵功能程序(頻率預置鍵) KEYFUN07:

15、 MOV 29H,#01H ; 預置100.0MHZ發(fā)射頻率 MOV 28H,#00H MOV 27H,#00H MOV 26H,#00H LCALL DISPUPDAT ;寫入控制芯片(修改發(fā)射頻率) RET ; ;08號鍵功能程序(頻率預置鍵) KEYFUN08: MOV 29H,#00H ; 預置98.0MHZ發(fā)射頻率 MOV 28H,#09H MOV 27H,#08H MOV 26H,#00H LCALL DISPUPDAT ;寫入控制芯片(修改發(fā)射頻率) RET ; ;09號鍵功能程序(頻率預置鍵) KEYFUN09: MOV 29H,#00H ; 預置96.0MHZ發(fā)射頻率 MOV

16、 28H,#09H MOV 27H,#06H MOV 26H,#00H LCALL DISPUPDAT ;寫入控制芯片(修改發(fā)射頻率) RET ; ;10號鍵功能程序(頻率預置鍵) KEYFUN10: MOV 29H,#00H ; 預置94.0MHZ發(fā)射頻率 MOV 28H,#09H MOV 27H,#04H MOV 26H,#00H LCALL DISPUPDAT ;寫入控制芯片(修改發(fā)射頻率) RET ; ;11號鍵功能程序(頻率預置鍵) KEYFUN11: MOV 29H,#00H ; 預置92.0MHZ發(fā)射頻率 MOV 28H,#09H MOV 27H,#02H MOV 26H,#00

17、H LCALL DISPUPDAT ;寫入控制芯 片(修改發(fā)射頻率) RET ; ;12號鍵功能程序(頻率預置鍵) KEYFUN12: MOV 29H,#00H ; 預置90.0MHZ發(fā)射頻率 MOV 28H,#09H MOV 27H,#00H MOV 26H,#00H LCALL DISPUPDAT ;寫入控制芯片(修改發(fā)射頻率) RET ; ;13號鍵功能程序(頻率預置鍵) KEYFUN13: MOV 29H,#00H ; 預置88.0MHZ發(fā)射頻率 MOV 28H,#08H MOV 27H,#08H MOV 26H,#00H LCALL DISPUPDAT ;寫入控制芯片(修改發(fā)射頻率)

18、 RET ; ;14號鍵功能程序(頻率預置鍵) ; 預置87.0MHZ發(fā)射頻率 KEYFUN14: MOV 29H,#00H MOV 28H,#08H MOV 27H,#07H MOV 26H,#08H LCALL DISPUPDAT ;寫入控制芯片(修改發(fā)射頻率) RET ; ;15號鍵功能程序(立體聲/單聲道設置鍵) KEYFUN15: CPL 03H ;立體/單聲標志取反 JNB 03H,MONO ;為0轉單聲道MONO CLR P3.3 ;為1開立體聲指示燈 LCALL PUTBIT ;發(fā)送控制字至BH1415 RET ;返回 MONO: SETB P3.3 ;關立體聲指示燈 LCAL

19、L PUTBIT ;發(fā)控制字至BH1415 RET ;返回 ; ; 將BCD碼轉為十六進制數(shù),與5位控制碼合成操作碼,寫入控制芯片 DISPUPDAT: LCALL BCDB ; 調BCD碼轉為十六進制數(shù)程序 LCALL CONCOMMAND ; 調與5位控制碼合成操作碼程序 LCALL PUTBIT ; 發(fā)控制字至BH1415 RET ;返回 ; ; 將BCD碼轉為十六進制數(shù)程序 BCDB: MOV CONBITL,#00H ; 控制字清0 MOV CONBITH,#00H ; 控制字清0 MOV CONBITL,26H ;小數(shù)位數(shù)放入控制字低8位 MOV A,27H ;個位數(shù)乘10操作 M

20、OV B,#10 ; LCALL MULLOOP ;調乘法子程序 MOV A,28H ;十位數(shù)乘100操作 MOV B,#100 ; LCALL MULLOOP ; 調乘法子程序 MOV A,29H ; JNZ ADD3E8 ;百位數(shù)為1轉ADD3E8(加1000操作) RET ; 百位數(shù)為0退出 ADD3E8: CLR C ;清進位檔標志 MOV A,#0E8H ;低8位加法 ADD A,CONBITL ;累加 MOV CONBITL,A ;放回CONBITL MOV A,#03H ; 高8位加法 ADDC A,CONBITH ;控制字高8 位處理 MOV CONBITH,A ;放回CONB

21、ITH RET ;返回 ; ;乘法及累加處理程序(將四位顯示的十進制BCD碼轉為1個二進制數(shù)) MULLOOP: MUL AB ;乘法 CLR C ;清進位標志 ADD A,CONBITL ;積低8位與CONBITL相加 MOV CONBITL,A ;放回CONBITL MOV A,CONBITH ; ADDC A,B ;積高8位與CONBITH帶進位累加 MOV CONBITH,A ;放回CONBITH RET ;返回 ; ;頻率控制數(shù)據(jù)與5位控制碼合成BH1415控制字 CONCOMMAND: ANL CONBITH,#07H ;高四位為0 MOV A,20H ;控制字放入A ORL A,

22、CONBITH ;合成控制字 MOV CONBITH,A ;放回CONBITH RET ;返回 ; ; ; 顯示程序 ; ; ;共陽LED顯示,P0口輸出段碼,P2口輸出掃描字 DISPLAY: MOV R1,#26H ;顯示首址 MOV R5,#0FEH ;設掃描字 PLAY: MOV A,R5 ;放入A MOV P2,A ;P2口輸出 MOV A,R1 ;取顯示數(shù)據(jù) MOV DPTR,#TAB ;取段碼表首址 MOVC A,A+DPTR ;查段碼 MOV P0,A ;從P0輸出 MOV A,R5 ;讀入掃描字 JB ACC.1,PLAY1 ; 不是十位(LED),不顯示小數(shù)點 CLR P0.7 ;是十位,顯示小數(shù)點 PLAY1: LCALL DL1MS ;點亮1毫秒 INC R1 ;指向下一顯示數(shù)據(jù) JNB ACC.3,ENDOUT ;是第四位LED,退出 RL A ;不是,左移一位 MOV R5,A ;放回R5 SETB P0.7 ;關小數(shù)點 AJMP PLAY ;轉PLAY循環(huán) ENDOUT: MOV P2,#0FFH ;顯示結束,關顯示輸出口 MOV P0,#0FFH ; RET

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論