|
模擬調(diào)諧電臺(tái)的試驗(yàn)參考代碼:
;1602-LCD模擬調(diào)電臺(tái)匯編代碼
;Lxa0最后修改于2018-1-28-V1.0
;本代碼晶體為11.0592MHz
;代碼中未注明的只占用區(qū)0
RS EQU p2.5 ;定義液晶接口
RW EQU p2.6
E EQU p2.7
org 0000h
ljmp mm
;主程序*********************************************************
org 0100h
mm:nop
acall ys
mov tmod,#90h ;T0設(shè)方式0,T1門控與方式1
mov tcon,#04h ;T0原始方式,INT1下降沿觸發(fā)
;mov ie,#84h ;設(shè)中斷允許
mov ip,#04h ;設(shè)中斷優(yōu)先級(jí)別
mov sp,#7fh ;設(shè)堆棧入口
mov 08h,#30h ;解碼轉(zhuǎn)換用
mov 09h,#07h ;解碼轉(zhuǎn)換用
mov 10h,#30h ;讀紅外波頭存放首址
mov 11h,#2fh ;讀紅外波頭48個(gè)
mov 20h,#00h ;讀紅外、解碼、動(dòng)作,電臺(tái)最大最小標(biāo)志位06h和05h
mov 21h,#00h ;動(dòng)作指令碼占
mov 22h,#09h ;電臺(tái)頻率小數(shù)位
mov 23h,#07h ;電臺(tái)頻率個(gè)位
mov 24h,#00h ;電臺(tái)頻率十位
mov 25h,#01h ;電臺(tái)頻率百位
mov 26h,#00h ;XX暫存單元
mov 27h,#00h ;XX暫存單元
mov p0,#01H ;清屏
acall wcom
MOV p0,#38H ;使用8Bits匯流排,顯示2行5*7字符
acall wcom
MOV p0,#0CH ;顯示開,光標(biāo)關(guān)
acall wcom
MOV p0,#06H ;字符不動(dòng),光標(biāo)自動(dòng)右移一格
acall wcom
MOV p0,#80H ;第一行的開始位置
acall wcom
MOV DPTR,#TAB001 ;到TABLE1取碼
acall xsztab
MOV p0,#0C0H ;第二行的開始位置
acall wcom
MOV DPTR,#TAB002 ;到TABLE2 取碼
acall xsztab
acall cgwr
m0:nop
acall ys
acall xsz
sjmp m0
;顯示tab001和tab002子代碼*****************************************
xsztab:nop
push dph
push dpl
push acc
push psw
clr psw.3 ;進(jìn)入?yún)^(qū)0工作寄存器
clr psw.4
mov r1,#00h
A1:mov a,r1
MOVC A,@A+DPTR ;到table取碼
mov p0,a
acall wdat ;顯示到lcd
INC r1
CJNE A,#0,A1 ;是否到00h
pop psw
pop acc
pop dpl
pop dph
RET
;延時(shí)0.5mS子代碼**************************************************
ys:nop
push dph
push dpl
push acc
push psw
clr psw.3 ;進(jìn)入?yún)^(qū)0工作寄存器
clr psw.4
MOV R7,#04 ;延時(shí)0.5mS子程序
ys00:MOV R6,#0FFH
DJNZ R6,$
DJNZ R7,ys00
pop psw
pop acc
pop dpl
pop dph
RET
;以下是字符數(shù)據(jù)表**************************************************
tab001: db" Lxa0 ",00h
tab002: db" FM--000.0 MHz ",00h
;顯示xsz子程序<占用區(qū)0>********************************************
org 0200h
xsz:nop
push dph ;保護(hù)現(xiàn)場(chǎng)
push dpl
push acc
push psw
mov p0,#0c9h ;設(shè)置小數(shù)位地址
lcall wcom
mov a,22h ;取小數(shù)位數(shù)據(jù)
add a,#30h ;加上#30h就是去CGROM取數(shù)據(jù)
mov p0,a
lcall wdat ;送出顯示
mov p0,#0c7h ;設(shè)置頻率個(gè)位地址
lcall wcom
mov a,23h ;取頻率個(gè)位數(shù)據(jù)
add a,#30h
mov p0,a
lcall wdat ;送出顯示
mov p0,#0c6h ;設(shè)置頻率十位地址
lcall wcom
mov a,24h ;取頻率十位數(shù)據(jù)
add a,#30h
mov p0,a
lcall wdat ;送出顯示
mov p0,#0c5h ;設(shè)置頻率百位地址
lcall wcom
mov a,25h ;取頻率百位數(shù)據(jù)
add a,#30h
mov p0,a
lcall wdat ;送出顯示
mov p0,#80h ;顯示天線符號(hào)
lcall wcom
mov p0,#00h
lcall wdat
mov p0,#81h ;顯示信號(hào)符號(hào)
lcall wcom
mov p0,#01h
lcall wdat
mov p0,#8fh ;顯示電池符號(hào)
lcall wcom
mov p0,#02h
lcall wdat
pop psw ;恢復(fù)現(xiàn)場(chǎng)
pop acc
pop dpl
pop dph
ret ;返回
;寫命令和數(shù)據(jù)子代碼************************************************
org 0280h
wcom:CLR RS ;送命令
CLR RW
clr E
acall ys
setb E
clr E
RET
wdat:SETB RS ;送數(shù)據(jù)
CLR RW
clr E
acall ys
setb E
clr E
RET
;建立自定義CGRAM字符庫(kù)子程序(占用區(qū)0工作寄存器)********************
org 0300h
cgwr:nop
push dph
push dpl
push acc
push psw
mov p0,#40h ;設(shè)置CGRAM首地址
lcall wcom
mov r2,#64 ;設(shè)置天線信號(hào)電池等共8X8=64個(gè)代碼
mov r3,#00h
mov dptr,#cgtab1 ;設(shè)置字符代碼表首地址
cgwr00:mov a,r3
movc a,@a+dptr ;取字符代碼
mov p0,a
lcall wdat
inc r3
djnz r2,cgwr00
pop psw
pop acc
pop dpl
pop dph
ret
;以下是CGRAM數(shù)據(jù)表*************************************************
cgtab1:
db 15H,15H,15H,0EH,04H,04H,04H,00H ;"天線"代碼=0x08h
db 00H,00H,01H,03H,07H,0fH,1fH,00H ;"信號(hào)"代碼=0x09h
db 04H,1FH,11H,15H,15H,11H,1FH,00H ;"電池"代碼=0x10h
db 00h,01h,02h,03h,04h,05h,06h,07h ;"空"代碼=0x05h
db 00h,01h,02h,03h,04h,05h,06h,07h ;"空"代碼=0x00h
db 00h,01h,02h,03h,04h,05h,06h,07h ;"空"代碼=0x01h
db 00h,01h,02h,03h,04h,05h,06h,07h ;"空"代碼=0x02h
db 00h,01h,02h,03h,04h,05h,06h,07h ;"空"代碼=0x03h
;******************************************************************
end |
|