模擬調諧電臺的試驗參考代碼:
;1602-LCD模擬調電臺匯編代碼
;Lxa0最后修改于2018-1-28-V1.0
;本代碼晶體為11.0592MHz
;代碼中未注明的只占用區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設方式0,T1門控與方式1
mov tcon,#04h ;T0原始方式,INT1下降沿觸發
;mov ie,#84h ;設中斷允許
mov ip,#04h ;設中斷優先級別
mov sp,#7fh ;設堆棧入口
mov 08h,#30h ;解碼轉換用
mov 09h,#07h ;解碼轉換用
mov 10h,#30h ;讀紅外波頭存放首址
mov 11h,#2fh ;讀紅外波頭48個
mov 20h,#00h ;讀紅外、解碼、動作,電臺最大最小標志位06h和05h
mov 21h,#00h ;動作指令碼占
mov 22h,#09h ;電臺頻率小數位
mov 23h,#07h ;電臺頻率個位
mov 24h,#00h ;電臺頻率十位
mov 25h,#01h ;電臺頻率百位
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 ;顯示開,光標關
acall wcom
MOV p0,#06H ;字符不動,光標自動右移一格
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 ;進入區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
;延時0.5mS子代碼**************************************************
ys:nop
push dph
push dpl
push acc
push psw
clr psw.3 ;進入區0工作寄存器
clr psw.4
MOV R7,#04 ;延時0.5mS子程序
ys00:MOV R6,#0FFH
DJNZ R6,$
DJNZ R7,ys00
pop psw
pop acc
pop dpl
pop dph
RET
;以下是字符數據表**************************************************
tab001: db" Lxa0 ",00h
tab002: db" FM--000.0 MHz ",00h
;顯示xsz子程序<占用區0>********************************************
org 0200h
xsz:nop
push dph ;保護現場
push dpl
push acc
push psw
mov p0,#0c9h ;設置小數位地址
lcall wcom
mov a,22h ;取小數位數據
add a,#30h ;加上#30h就是去CGROM取數據
mov p0,a
lcall wdat ;送出顯示
mov p0,#0c7h ;設置頻率個位地址
lcall wcom
mov a,23h ;取頻率個位數據
add a,#30h
mov p0,a
lcall wdat ;送出顯示
mov p0,#0c6h ;設置頻率十位地址
lcall wcom
mov a,24h ;取頻率十位數據
add a,#30h
mov p0,a
lcall wdat ;送出顯示
mov p0,#0c5h ;設置頻率百位地址
lcall wcom
mov a,25h ;取頻率百位數據
add a,#30h
mov p0,a
lcall wdat ;送出顯示
mov p0,#80h ;顯示天線符號
lcall wcom
mov p0,#00h
lcall wdat
mov p0,#81h ;顯示信號符號
lcall wcom
mov p0,#01h
lcall wdat
mov p0,#8fh ;顯示電池符號
lcall wcom
mov p0,#02h
lcall wdat
pop psw ;恢復現場
pop acc
pop dpl
pop dph
ret ;返回
;寫命令和數據子代碼************************************************
org 0280h
wcom:CLR RS ;送命令
CLR RW
clr E
acall ys
setb E
clr E
RET
wdat:SETB RS ;送數據
CLR RW
clr E
acall ys
setb E
clr E
RET
;建立自定義CGRAM字符庫子程序(占用區0工作寄存器)********************
org 0300h
cgwr:nop
push dph
push dpl
push acc
push psw
mov p0,#40h ;設置CGRAM首地址
lcall wcom
mov r2,#64 ;設置天線信號電池等共8X8=64個代碼
mov r3,#00h
mov dptr,#cgtab1 ;設置字符代碼表首地址
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數據表*************************************************
cgtab1:
db 15H,15H,15H,0EH,04H,04H,04H,00H ;"天線"代碼=0x08h
db 00H,00H,01H,03H,07H,0fH,1fH,00H ;"信號"代碼=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 |