?? lcd2-458.dt
字號:
;FOR SMC1602 液晶屏
;芯片為EM78P458AM
;內部RC,外接51K電阻
;振蕩模式為4MHz晶振
;看門狗關,指令周期為2個CLOCK
;==============寄存器的定義========================
R0 == 0X00
TCC == 0X01
PC == 0X02
R3 == 0X03
C==0
DC==1
Z==2
P==3
T==4
PS0==5
PS1==6
CMPOUT==7
R4 == 0X04
P5 == 0X05
K1 == 0
K2 == 1
K3 == 2
KPW == 3
EB == 4
CPW == 5
RS == 6
EA == 7
P6 == 0X06
AFA ==0
RFA ==1
AFB ==2
RFB ==3
D4 ==4
D5 ==5
D6 ==6
D7 ==7
IOCB == 0XB ;下拉控制
IOCC == 0XC ;漏極開路控制
IOCD == 0XD ;上拉控制
R_F == 0XF ;中斷狀態寄存器
IOCF== 0XF ;IOW中斷屏蔽寄存器
;ADC Contro Registers
ADDATA == 0XA ;MOV
ADCONR == 0X9 ;MOV
ADRUN==4
ADPD==3
ADIS2==2 ;模擬輸入選擇
ADIS1==1
ADIS0==0
ADCONC == 0XA ;IOW
VREFS==7 ;參考電壓,0為工作電壓
CE==6
COE==5
IMS2==4 ;模擬和數據I/O口選擇
IMS1==3
IMS0==2
CKR1==1 ;ADC時鐘分頻數
CKR0==0
GCON== 0X9 ;IOW
OP2E==7 ;增溢放大器2,==0時OP2關閉
OP1E==6
G22==5 ;增溢選擇
G21==4
G20==3
G12==2
G11==1
G10==0
;=============數組LINE1 LINE2==================================
;BANK0==================
LINE1 == 0X20 ;0X20-0X2F
LINE2 == 0X30 ;0X30-0X3F
;============用戶寄存器========================================
TMP ==0XB
FG ==0XC ;低兩位
; DATA ==0XD
; ==0XE ;低兩位
S1 == 0X10 ;通用寄存器
S2 == 0X11
S3 == 0X12
CHANEL == 0X14
CHANELB == 0X15
CN1 == 0X16
CN2 == 0X17
;DATA == 0X18
;ADDR == 0X19
TM1 == 0X1A
TM2 == 0X1B
TEM1 == 0X1C
TEM2 == 0X1D
LP_CNT0 == 0X1E
LP_CNT1 == 0X1F
;==========================STAR0===============================
ORG 0
JMP INITIAL
ORG 1 ;軟件中斷地址
RETI
ORG 8 ;硬件中斷地址
RETI
ORG 10
;=============================================================
TABLE: ;存放LCD顯示數組數據
ADD PC, A
RETL @0X86 ;A0_864.6MHz
RETL @0X46
RETL @0X86 ;A1_863.6MHz
RETL @0X36
RETL @0X86 ;A2_862.6MHz
RETL @0X26
RETL @0X86 ;A3_861.6MHz
RETL @0X16
RETL @0X85 ;A4_806.3MHz
RETL @0X86
RETL @0X85 ;A5_851.6MHz
RETL @0X16
RETL @0X84 ;A6_848.6MHz
RETL @0X86
RETL @0X84 ;A7_847.6MHz
RETL @0X76
RETL @0X84 ;A8_846.6MHz
RETL @0X66
RETL @0X85 ;A9_852.6MHz
RETL @0X26
RETL @0X85 ;AA_857.6MHz
RETL @0X76
RETL @0X85 ;AB_856.6MHz
RETL @0X66
RETL @0X85 ;AC_855.6MHz
RETL @0X56
RETL @0X85 ;AD_854.6MHz
RETL @0X46
RETL @0X85 ;AE_853.6MHz
RETL @0X36
RETL @0X85 ;AF_852.6MHz
RETL @0X26
;B
RETL @0X84 ;B0_840.6MHz
RETL @0X06
RETL @0X83 ;B1_839.6MHz
RETL @0X96
RETL @0X83 ;B2_838.6MHz
RETL @0X86
RETL @0X83 ;B3_837.6MHz
RETL @0X76
RETL @0X83 ;B4_834.6MHz
RETL @0X46
RETL @0X82 ;B5_827.6MHz
RETL @0X76
RETL @0X82 ;B6_824.6MHz
RETL @0X46
RETL @0X82 ;B7_823.6MHz
RETL @0X36
RETL @0X82 ;B8_822.6MHz
RETL @0X26
RETL @0X82 ;B9_828.6MHz
RETL @0X86
RETL @0X83 ;BA_830.6MHz
RETL @0X06
RETL @0X81 ;BB_819.6MHz
RETL @0X96
RETL @0X81 ;BC_817.6MHz
RETL @0X76
RETL @0X81 ;BD_815.6MHz
RETL @0X56
RETL @0X81 ;BE_814.6MHz
RETL @0X46
RETL @0X81 ;BF_813.6MHz
RETL @0X36
;=============================================================
POWERONA:
ADD PC, A
RETL @0X20
RETL @0X20
RETL @0X20
RETL @0X20
RETL @0X20
RETL @0X45 ;E
RETL @0X4D ;M
RETL @0X4F ;O
RETL @0X43 ;C
RETL @0X4C ;L
RETL @0X45 ;E
RETL @0X57 ;W
RETL @0X20
RETL @0X20
RETL @0X20
RETL @0X20
POWERONB:
ADD PC, A
RETL @0X20
RETL @0X4D ;M
RETL @0X49 ;I
RETL @0X43 ;C
RETL @0X52 ;R
RETL @0X4F ;O
RETL @0X50 ;P
RETL @0X48 ;H
RETL @0X4F ;O
RETL @0X4E ;N
RETL @0X45 ;E
RETL @0X20 ;
RETL @0X53 ;S
RETL @0X59 ;Y
RETL @0X53 ;S
RETL @0X20
;=============================================================
GCRAMTAB:
ADD PC, A
RETL @0X1F
RETL @0X1F
RETL @0X1F
RETL @0X1F
RETL @0X1F
RETL @0X1F
RETL @0X1F
RETL @0X00
RETL @0X1F
RETL @0X11
RETL @0X0A
RETL @0X04
RETL @0X04
RETL @0X04
RETL @0X04
RETL @0X00
;=======================寫LCD命令字A屏===========================
;INPUT: A
;=======================
COMMAND_WA:
BC P5,EA
BC P5,RS
MOV TEM1,A
MOV A,P6
AND A,@0X0F
MOV TEM2,A
MOV A,TEM1
AND A,@0XF0
OR A,TEM2
MOV P6,A
NOP
NOP
BS P5,EA
NOP
NOP
NOP
BC P5,EA
SWAPA TEM1
AND A,@0XF0
OR A,TEM2
MOV P6,A
NOP
NOP
BS P5,EA
NOP
NOP
NOP
BC P5,EA
RET
;=======================寫LCD數據字A屏===========================
;INPUT: A
;=======================
DATA_WA:
BC P5,EA
BS P5,RS
MOV TEM1,A
MOV A,P6
AND A,@0X0F
MOV TEM2,A
MOV A,TEM1
AND A,@0XF0
OR A,TEM2
MOV P6,A
NOP
NOP
BS P5,EA
NOP
NOP
NOP
BC P5,EA
SWAPA TEM1
AND A,@0XF0
OR A,TEM2
MOV P6,A
NOP
NOP
BS P5,EA
NOP
NOP
NOP
BC P5,EA
RET
;=======================寫LCD命令字B屏===========================
;INPUT: A
;=======================
COMMAND_WB:
BC P5,EB
BC P5,RS
MOV TEM1,A
MOV A,P6
AND A,@0X0F
MOV TEM2,A
MOV A,TEM1
AND A,@0XF0
OR A,TEM2
MOV P6,A
NOP
NOP
BS P5,EB
NOP
NOP
NOP
BC P5,EB
SWAPA TEM1
AND A,@0XF0
OR A,TEM2
MOV P6,A
NOP
NOP
BS P5,EB
NOP
NOP
NOP
BC P5,EB
RET
;=======================寫LCD數據字B屏===========================
;INPUT: A
;=======================
DATA_WB:
BC P5,EB
BS P5,RS
MOV TEM1,A
MOV A,P6
AND A,@0X0F
MOV TEM2,A
MOV A,TEM1
AND A,@0XF0
OR A,TEM2
MOV P6,A
NOP
NOP
BS P5,EB
NOP
NOP
NOP
BC P5,EB
SWAPA TEM1
AND A,@0XF0
OR A,TEM2
MOV P6,A
NOP
NOP
BS P5,EB
NOP
NOP
NOP
BC P5,EB
RET
;=======================初始化LCD===========================
INIT_LCD:
CALL DELAY5MS
CALL DELAY5MS
CALL DELAY5MS
CALL DELAY5MS
MOV A,@0X30
CALL COMMAND_WA
MOV A,@0X30
CALL COMMAND_WB
CALL DELAY5MS
CALL DELAY5MS
MOV A,@0X30
CALL COMMAND_WA
MOV A,@0X30
CALL COMMAND_WB
CALL DELAY5MS
CALL DELAY5MS
MOV A,@0X30
CALL COMMAND_WA
MOV A,@0X30
CALL COMMAND_WB
CALL DELAY5MS
CALL DELAY5MS
MOV A,@0X28 ;4位數據,2行5x7點陣
CALL COMMAND_WA
MOV A,@0X28
CALL COMMAND_WB
CALL DELAY5MS
MOV A,@0X08 ;關顯示
CALL COMMAND_WA
MOV A,@0X08
CALL COMMAND_WB
CALL DELAY5MS
CALL DELAY5MS
MOV A,@0X01 ;清顯示
CALL COMMAND_WA
MOV A,@0X01
CALL COMMAND_WB
CALL DELAY5MS
MOV A,@0X06 ;光標移動方--右移
CALL COMMAND_WA
MOV A,@0X06S
CALL COMMAND_WB
CALL DELAY5MS
MOV A,@0X0C ;開顯示
CALL COMMAND_WA
MOV A,@0X0C
CALL COMMAND_WB
CALL DELAY5MS
;初始化自編字庫
MOV A,@0X40
CALL COMMAND_WA
MOV A,@0X40
CALL COMMAND_WB
CALL DELAY50US
CLR S1
WRITE_LP:
MOV A,S1
CALL GCRAMTAB
CALL DATA_WA
CALL DELAY50US
MOV A,S1
CALL GCRAMTAB
CALL DATA_WB
CALL DELAY50US
INC S1
MOV A,S1
XOR A,@16
JBS R3,Z
JMP WRITE_LP
RET
;=======================清數據緩沖區===========================
CLEARSTRING:
MOV A,@0X20
MOV R4,A
MOV A,@32
MOV S1,A
AGAIN:
MOV A,@0X20
MOV R0,A
INC R4
DJZ S1
JMP AGAIN
CLR R4
RET
;=======================數據緩沖區初始化========================
INITSTRING:
CALL CLEARSTRING
MOV A,@0X52
MOV 0X20,A
MOV A,@0X46
MOV 0X21,A
MOV A,@0X41
MOV 0X27,A
MOV A,@0X46
MOV 0X28,A
MOV A,@0X43
MOV 0X30,A
MOV A,@0X48
MOV 0X30,A
MOV A,@0X2E
MOV 0X3B,A
MOV A,@0X4D
MOV 0X3D,A
MOV A,@0X48
MOV 0X3E,A
MOV A,@0X7A
MOV 0X3F,A
CLR R4
RET
;=======================填充數據緩沖區========================
GETSTRING:
CALL CLEARSTRING
CLR TM1
SGL:
INCA TM1
MOV TM2,A
MOV A,@0XFF
MOV S1,A
SLG:
DEC TM2
INC S1
MOV A,@0X20
ADD A,TM2
MOV R4,A
MOV A,S1
CALL POWERONA
MOV R0,A
MOV A,TM2
SUB A,@0X3F
MOV R4,A
MOV A,S1
CALL POWERONB
MOV R0,A
MOV A,TM1
XOR A,S1
JBS R3,Z
JMP SLG
CALL DISPLAYALL
MOV A,@0X32 ;延時0.5S
MOV S2,A
STW: CALL DELAY5MS
DJZ S2
JMP STW
CALL DELAY5MS
INC TM1
MOV A,TM1
XOR A,@16
JBS R3,Z
JMP SGL
CLR R4
RET
;=======================LCD數據顯示===========================
DISPLAYALL:
MOV A,@0X80
CALL COMMAND_WA
MOV A,@0X80
CALL COMMAND_WB
CALL DELAY50US
CALL DELAY50US
MOV A,@LINE1 ;緩沖區首址
MOV R4,A
LP_L1:
MOV A,R0
CALL DATA_WA
MOV A,R0
CALL DATA_WB
CALL DELAY50US
INC R4
MOV A,R4
XOR A,@0X30
JBS R3, 2
JMP LP_L1
CALL DELAY50US
MOV A,@0XC0
CALL COMMAND_WA
MOV A,@0XC0
CALL COMMAND_WB
CALL DELAY50US
CALL DELAY50US
LP_L2:
MOV A,R0
CALL DATA_WA
MOV A,R0
CALL DATA_WB
CALL DELAY50US
INC R4
MOV A,R4
XOR A,@0X40
JBS R3, 2
JMP LP_L2
CALL DELAY50US
CLR R4
RET
;============================Delay=============================
DELAY5MS: ;延時5mS
MOV A, @10
MOV LP_CNT0, A
P0_DLY:
NOP
MOV A, @199
MOV LP_CNT1, A
P0_LP:
NOP
NOP
NOP
DJZ LP_CNT1 ;5 X 199 (LP_CNT1 = 199) = 995
JMP P0_LP ;5 + 995(P0_LP所有的指令) = 1000
DJZ LP_CNT0 ;1000 X 10 (LP_CNT0 = 2) = 10000
JMP P0_DLY ;10000 + 1 (CALL)+ 1(RET) + 2(2MOV) + 1(CALL) = 10005
RET ;10005 * 0.5 = 5.0025(mS)
;------------------------------------------
DELAY50US: ;延時50uS
MOV A,@48
MOV LP_CNT0,A
DELAY_LOOP:
DJZ LP_CNT0
JMP DELAY_LOOP
RET
;------------------------------------------
DELAY6US: ;延時6uS
MOV A,@4
MOV LP_CNT0,A
SHORT:
DJZ LP_CNT0
JMP SHORT
RET
;====================================================================================
DISAF:
MOV A,@0X80 ;
SUB A,TMP
JBS R3,C
JMP CH_AF2
JBC FG,0
JMP AF1B
MOV A,@0X00
MOV 0X27,A
MOV 0X26,A
MOV 0X25,A
MOV 0X24,A
RET
AF1B: MOV A,@0X00
MOV 0X37,A
MOV 0X36,A
MOV 0X35,A
MOV 0X34,A
RET
CH_AF2:
MOV A,@0X65 ;
SUB A,TMP
JBS R3,C
JMP CH_AF3
JBC FG,0
JMP AF2B
MOV A,@0X20
MOV 0X27,A
MOV A,@0X00
MOV 0X26,A
MOV 0X25,A
MOV 0X24,A
RET
AF2B: MOV A,@0X20
MOV 0X37,A
MOV A,@0X00
MOV 0X36,A
MOV 0X35,A
MOV 0X34,A
RET
CH_AF3:
MOV A,@0X45 ;50
SUB A,TMP
JBS R3,C
JMP CH_AF4
JBC FG,0
JMP AF3B
MOV A,@0X20
MOV 0X27,A
MOV 0X26,A
MOV A,@0X00
MOV 0X25,A
MOV 0X24,A
RET
AF3B: MOV A,@0X20
MOV 0X37,A
MOV 0X36,A
MOV A,@0X00
MOV 0X35,A
MOV 0X34,A
RET
CH_AF4:
MOV A,@0X30 ;
SUB A,TMP
JBS R3,C
JMP CH_AF5
JBC FG,0
JMP AF4B
MOV A,@0X20
MOV 0X27,A
MOV 0X26,A
MOV 0X25,A
MOV A,@0X00
MOV 0X24,A
RET
AF4B: MOV A,@0X20
MOV 0X37,A
MOV 0X36,A
MOV 0X35,A
MOV A,@0X00
MOV 0X34,A
RET
CH_AF5:
JBC FG,0
JMP AF5B
MOV A,@0X20
MOV 0X24,A
MOV 0X25,A
MOV 0X26,A
MOV 0X27,A
RET
AF5B: MOV A,@0X20
MOV 0X34,A
MOV 0X35,A
MOV 0X36,A
MOV 0X37,A
RET
;====================================================================================
DISFQA:
;============================================================================
;====================================MAIN====================================
;============================================================================
INITIAL:
MOV A,@0B11110000 ;
IOW IOCB
MOV A,@0B11111111 ;
IOW IOCC
MOV A,@0B11111111 ;
IOW IOCD
MOV A,@0B00001111 ;
IOW P5
MOV A,@0B00001111 ;
IOW P6
MOV A,@0B00001111
MOV P6,A
MOV A,@0B00001111
MOV P5,A
DISI
CALL DELAY5MS
CALL DELAY5MS
CALL DELAY5MS
CALL DELAY5MS
CALL INIT_LCD ;初始化LCD
CALL DELAY5MS
CALL GETSTRING
MOV A,@0XFF ;延時1S
MOV S2,A
WOO: CALL DELAY5MS
DJZ S2
JMP WOO
CALL INITSTRING
MOV A,@0XFF
MOV CHANELB,A
WHILE:
MOV A,P5 ;檢測K1-K5(0-31)
AND A,@0X07
MOV CHANEL,A
XOR A,CHANELB
JBC R3,Z
JMP CH_ANT1
MOV A,CHANEL
MOV CHANELB,A
BC R3,C
RLC CHANEL
MOV A,CHANEL
CALL TABLE
MOV S3,A
SWAPA S3
AND A,@0X0F
ADD A,@0X30
MOV 0X28,A ;BIT8頻點數據1
MOV A,S3
AND A,@0X0F
ADD A,@0X30
MOV 0X29,A ;BIT9頻點數據2
INCA CHANEL
CALL TABLE
MOV S3,A
SWAPA S3
AND A,@0X0F
ADD A,@0X30
MOV 0X2A,A ;BIT10頻點數據3
MOV A,S3
AND A,@0X0F
ADD A,@0X30
MOV 0X2C,A ;BIT12頻點數據4
MOV A,CHANEL
ADD A,@32
MOV CHANEL,A
CALL TABLE
MOV S3,A
SWAPA S3
AND A,@0X0F
ADD A,@0X30
MOV 0X38,A ;BIT8頻點數據1
MOV A,S3
AND A,@0X0F
ADD A,@0X30
MOV 0X39,A ;BIT9頻點數據2
INCA CHANEL
CALL TABLE
MOV S3,A
SWAPA S3
AND A,@0X0F
ADD A,@0X30
MOV 0X3A,A ;BIT10頻點數據3
MOV A,S3
AND A,@0X0F
ADD A,@0X30
MOV 0X3C,A ;BIT12頻點數據4
;-------------------------------------------------
CH_ANT1:
JBS P6,ANT1
JMP ANT_10
MOV A,@0X41
MOV 0X20,A
JMP CH_ANT2
ANT_10: MOV A,@0X20
MOV 0X20,A
CH_ANT2:JBS P6,ANT2
JMP ANT_20
MOV A,@0X42
MOV 0X30,A
JMP INIADC
ANT_20: MOV A,@0X20
MOV 0X30,A
INIADC:
MOV A,@0B00001100 ;工作電壓作參考,AD0-AD3模擬輸入,T=fosc/4
IOW ADCONC
CLR R_F
MOV A,ADCONR
AND A,@0XF8 ;AN0(AF1)輸入
MOV ADCONR,A
BS ADCONR,ADPD ;啟動AD采樣
MOV A,@0B00000000
IOW GCON ;關增溢放大器
CALL DELAY6US
BS ADCONR,ADRUN ;啟動AD轉換
CH_AFA: JBC ADCONR,ADRUN
JMP CH_AFA
; CALL DELAY6US
; CALL DELAY6US
; CALL DELAY6US
BC ADCONR,ADPD ;關閉AD采樣
MOV A,ADDATA
MOV TMP,A
BC FG,0
CALL DISAF
CLR R_F
MOV A,ADCONR
AND A,@0XF8
OR A,@0X02 ;AD2(RF1)輸入
MOV ADCONR,A
BS ADCONR,ADPD ;啟動AD采樣
CALL DELAY6US
BS ADCONR,ADRUN ;啟動AD轉換
CH_AFB: JBC ADCONR,ADRUN
JMP CH_AFB
; CALL DELAY6US
; CALL DELAY6US
; CALL DELAY6US
BC ADCONR,ADPD ;關閉AD采樣
MOV A,ADDATA
MOV TMP,A
BS FG,0
CALL DISAF
MOV A,@0B00000000 ;AD0模擬輸入,AD1-AD7O數字I/O輸入,T=fosc/4
IOW ADCONC
NOP
CALL DISPLAYALL
JMP WHILE
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -