📄 sample.s43
字号:
BIS R7,R5 ;Y1=R5
BIS R7,R6 ;Y2=R6
AND R5,R8
AND R6,R8
RET
;----------------------------------------------------
;延时子程序DELAY20MS
;----------------------------------------------------
DELAY20MS:
PUSH R5
MOV #2000,R5
DELAYLOOP
CALL #DELAY10US
DEC R5
JNZ DELAYLOOP
POP R5
RET
DELAY10US
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RET
;----------------------------------------------------
;显示左屏子程序LCDLPRO
;----------------------------------------------------
LCDLPRO
BIS.B #RST,&P5OUT
CALL #DELAY10US
BIC.B #RST,&P5OUT ;复位LCD
MOV #00B8H,R5
CALL #LCDWRI ;设置页地址=0
MOV #0040H,R5
CALL #LCDWRI ;设置Y地址=0
MOV #64,R6
MOV #CH_TABLE1,R7
LCDLPRO1
MOV @R7+,R5
AND #00FFH,R5
CALL #LCDWRD
DEC R6
JNZ LCDLPRO1
MOV #00B9H,R5
CALL #LCDWRI ;设置页地址=1
MOV #64,R6
MOV #CH_TABLE1,R7
LCDLPRO2
MOV @R7+,R5
SWPB R5
AND #00FFH,R5
CALL #LCDWRD
DEC R6
JNZ LCDLPRO2 ;显示第一行汉字
MOV #00BAH,R5
CALL #LCDWRI ;设置页地址=2
MOV #64,R6
MOV #CH_TABLE2,R7
LCDLPRO3
MOV @R7+,R5
AND #00FFH,R5
CALL #LCDWRD
DEC R6
JNZ LCDLPRO3
MOV #00BBH,R5
CALL #LCDWRI ;设置页地址=3
MOV #64,R6
MOV #CH_TABLE2,R7
LCDLPRO4
MOV @R7+,R5
SWPB R5
AND #00FFH,R5
CALL #LCDWRD
DEC R6
JNZ LCDLPRO4 ;显示第二行汉字
MOV #00BCH,R5
CALL #LCDWRI ;设置页地址=4
MOV #0070H,R5
CALL #LCDWRI ;设置Y地址=48
MOV #16,R6
MOV #CH_TABLE3,R7
LCDLPRO5
MOV @R7+,R5
AND #00FFH,R5
CALL #LCDWRD
DEC R6
JNZ LCDLPRO5
MOV #00BDH,R5
CALL #LCDWRI ;设置页地址=5
MOV #0070H,R5
CALL #LCDWRI ;设置Y地址=48
MOV #16,R6
MOV #CH_TABLE3,R7
LCDLPRO6
MOV @R7+,R5
SWPB R5
AND #00FFH,R5
CALL #LCDWRD
DEC R6
JNZ LCDLPRO6 ;显示第三行汉字
MOV #00BEH,R5
CALL #LCDWRI ;设置页地址=6
MOV #0070H,R5
CALL #LCDWRI ;设置Y地址=48
MOV #16,R6
MOV #CH_TABLE4,R7
LCDLPRO7
MOV @R7+,R5
AND #00FFH,R5
CALL #LCDWRD
DEC R6
JNZ LCDLPRO7
MOV #00BFH,R5
CALL #LCDWRI ;设置页地址=7
MOV #0070H,R5
CALL #LCDWRI ;设置Y地址=48
MOV #16,R6
MOV #CH_TABLE4,R7
LCDLPRO8
MOV @R7+,R5
SWPB R5
AND #00FFH,R5
CALL #LCDWRD
DEC R6
JNZ LCDLPRO8 ;显示第四行汉字
MOV.B &P4IN,R14 ;读通道号
AND #00FFH,R14
CALL #HBCD
MOV #12,R6
CLRC
LCDLPRO9
RLC R12
RLC R13
DEC R6
JNZ LCDLPRO9
AND #0,R12
BIS #0DDDDH,R12
MOV #6,R6
MOV #0BDH,R7
CLR R8
CALL #REFRESH
MOV #0DDDDH,R12
MOV #0DDDDH,R13
MOV #6,R6
MOV #0BCH,R7
CALL #REFRESH
MOV #0DDDDH,R12
MOV #0DDDDH,R13
MOV #6,R6
MOV #0BEH,R7
CALL #REFRESH
MOV #0DDDDH,R12
MOV #0DDDDH,R13
MOV #6,R6
MOV #0BFH,R7
CALL #REFRESH
MOV #003FH,R5
CALL #LCDWRI ;开显示
RET
;----------------------------------------------------
;显示右屏子程序LCDRPRO
;----------------------------------------------------
LCDRPRO
MOV #ADCDATA,R9
MOV #00B7H,R7
MOV #0100H,R8
MOV #6,R10
LCDRPRO1
MOV @R9+,R11
MOV #5,R6
CALL #TRANSVOLT
CALL #HBCD
MOV #8,R6
INC R7
CALL #REFRESH
DEC R10
JNZ LCDRPRO1
MOV #2,R10
LCDRPRO2
MOV @R9+,R11
MOV #1,R6
CALL #TRANSVOLT
CALL #HBCD
MOV R13,R15
SWPB R15
AND #0F00H,R15
BIS #00B0H,R15
MOV #4,R6
LCDRPRO3
CLRC
RLC R12
RLC R13
DEC R6
JNZ LCDRPRO3
AND #0F00FH,R13
BIS R15,R13
AND #0FF00H,R12
BIS #00EFH,R12
MOV #8,R6
INC R7
CALL #REFRESH
DEC R10
JNZ LCDRPRO2
RET
;----------------------------------------------------
;换算成电压值子程序TRANSVOLT,R11,R6输入,R14输出
;----------------------------------------------------
TRANSVOLT
PUSH R7
PUSH R8
DINT
MOV #2500,&MPY
MOV R6,&OP2
NOP
NOP
MOV &RESHI,R6
MOV &RESLO,&MPY
MOV R11,&OP2
NOP
NOP
MOV &RESHI,R8
MOV &RESLO,R7
MOV R6,&MPY
MOV R11,&OP2
NOP
NOP
ADD &RESLO,R8
MOV #12,R6
TRANSLOOP
CLRC
RRC R8
RRC R7
DEC R6
JNZ TRANSLOOP
MOV R7,R14
POP R8
POP R7
EINT
RET
;----------------------------------------------------
;刷新屏子程序REFRESH,输入数据R12\R13,字符数R6
; 页地址R7,R8:高字节非零选择CS2
;----------------------------------------------------
REFRESH
PUSH R9
PUSH R10
MOV R7,R5
CALL #LCDWRI
MOV #40H,R5
CALL #LCDWRI
REFLOOP
CLRC
MOV #4,R9
REFLOOP0
RLC R12
RLC R13
RLC R10
DEC R9
JNZ REFLOOP0
RLC R10
RLC R10
RLC R10
AND #0078H,R10
MOV #8,R9
ADD #D_TABLE,R10
REFLOOP1
MOV.B @R10+,R5
BIS R8,R5
CALL #LCDWRD
DEC R9
JNZ REFLOOP1
DEC R6
JNZ REFLOOP
POP R10
POP R9
RET
;----------------------------------------------------
;写LCD命令子程序LCDWRI,R5放命令字
;----------------------------------------------------
LCDWRI
BIC.B #EN+RW+DI,&P5OUT
BIS.B #CS1+CS2,&P5OUT
BIS.B #EN,&P5OUT
NOP
MOV.B R5,&P1OUT
NOP
BIC.B #EN,&P5OUT
RET
;----------------------------------------------------
;读LCD状态子程序RDSTATUS,R5输出
;----------------------------------------------------
RDSTATUS
MOV.B #0,&P1DIR
BIC.B #EN+DI,&P5OUT
BIS.B #RW+CS1+CS2,&P5OUT
BIS.B #EN,&P5OUT
NOP
MOV.B &P1IN,R5
NOP
BIC.B #EN,&P5OUT
MOV.B #0FFH,&P1DIR
RET
;----------------------------------------------------
;写LCD数据子程序LCDWRD,R5放数据字节,高字节非零选择CS2
;----------------------------------------------------
LCDWRD
BIC.B #EN+RW+CS1+CS2,&P5OUT
BIS.B #DI,&P5OUT
PUSH R5
BIT #0FF00H,R5
JZ LCDWRD1
BIS.B #CS2,&P5OUT
JMP LCDWRD2
LCDWRD1
BIS.B #CS1,&P5OUT
LCDWRD2
POP R5
BIS.B #EN,&P5OUT
NOP
MOV.B R5,&P1OUT
NOP
BIC.B #EN,&P5OUT
RET
;----------------------------------------------------
;16进制转换成BCD码子程序HBCD,IN:R14,OUT:R13,R12
;----------------------------------------------------
HBCD
PUSH R10
PUSH R11
CLR R12
CLR R13
MOV #10000,R11
CALL #BCDDIV
SWPB R10
RLA R10
RLA R10
RLA R10
RLA R10
MOV R10,R13 ;万位
MOV #1000,R11
CALL #BCDDIV
SWPB R10
BIS R10,R13 ;千位
BIS #00B0H,R13 ;小数点
MOV #100,R11
CALL #BCDDIV
BIS R10,R13 ;百位
MOV #10,R11
CALL #BCDDIV
SWPB R10
RLA R10
RLA R10
RLA R10
RLA R10
BIS R10,R12 ;十位
AND #000FH,R14
SWPB R14
BIS R14,R12 ;个位
BIS #00DAH,R12 ;空+V
POP R11
POP R10
RET
;----------------------------------------------------
;BCD码除法子程序BCDDIV,被除数R14,除数R11,返回 R10
;----------------------------------------------------
BCDDIV
CLR R10
BCDDIV0
CMP R11,R14
JL BCDDIVEND
SUB R11,R14
INC R10
JMP BCDDIV0
BCDDIVEND
RET
;----------------------------------------------------
;ADC转换子程序ADCPRO
;----------------------------------------------------
ADCPRO
CLR &ADC12IFG
BIS #ADC12SC+ENC,&ADC12CTL0
ADCLOOP
BIT #BIT8,&ADC12IFG
JZ ADCLOOP
BIC #ADC12SC+ENC,&ADC12CTL0
RET
;----------------------------------------------------
;FLASH数据段擦除、写操作子程序ERASESEG、WRSEG,R15放段首地址
;----------------------------------------------------
ERASESEG
MOV #WDTPW+WDTHOLD,&WDTCTL ;关WDT
DINT ;禁止中断
MOV #FWKEY+FSSEL0+FN1,&FCTL2
MOV #FWKEY+ERASE,&FCTL1
MOV #FWKEY,&FCTL3
MOV #0FFH,0(R15)
MOV #FWKEY,&FCTL1
MOV #FWKEY+LOCK,&FCTL3
EINT
RET
WRSEG
PUSH R13
PUSH R14
MOV #WDTPW+WDTHOLD,&WDTCTL ;关WDT
DINT ;禁止中断
MOV #FWKEY+FSSEL0+FN1,&FCTL2
MOV &DATAPOINT,R15
MOV #8,R14
MOV #ADCDATA,R13
WRSEGLOOP
MOV #FWKEY+WRT,&FCTL1
MOV #FWKEY,&FCTL3
MOV @R13+,0(R15)
MOV #FWKEY,&FCTL1
INCD R15
DEC R14
JNZ WRSEGLOOP
MOV R15,&DATAPOINT
BIS #FIRSTDATA,&FLAG
MOV #0100H,R15
CALL ERASESEG ;擦除信息段
MOV #FWKEY+WRT,&FCTL1
MOV #FWKEY,&FCTL3
MOV #DATAPOINT,0(R15) ;写数据指针DATAPOINT于信息段
MOV #FWKEY,&FCTL1
XOR #FXKEY+LOCK,&FCTL3
POP R14
POP R13
EINT
RET
CH_TABLE1
DW 0000H,0420H,7CC2H,0618H,22C0H,4110H,3FFEH,4090H
DW 2010H,1FF8H,0048H,0048H,7FC4H,0064H,0040H,0000H ;"浙"
DW 0000H,4020H,4020H,2020H,1020H,0820H,0620H,01FEH
DW 0220H,0420H,0820H,1020H,2020H,6030H,2020H,0000H ;"大"
DW 0000H,0000H,0FF0H,0490H,0490H,0490H,3FFEH,4490H
DW 4490H,4490H,4490H,47F8H,4010H,7000H,0000H,0000H ;"电"
DW 0000H,0000H,0000H,0000H,0C484H,0A2FEH,9280H,8C00H
DW 0000H,0000H,0000H,4040H,8080H,0000H,0000H,0000H ;"1\2\"
CH_TABLE2
DW 0000H,2000H,7F7CH,2044H,1FC4H,1144H,117CH,0220H
DW 7F10H,22AEH,2248H,22A8H,7E9CH,0108H,0100H,0000H ;"路"
DW 0000H,4000H,3000H,0FF8H,0128H,4124H,23E6H,1804H
DW 07F8H,0048H,0048H,0044H,7FC6H,0064H,0040H,0000H ;"所"
DW 0000H,0060H,3E5CH,0250H,0250H,7FFEH,0250H,2250H
DW 3E50H,0000H,07F8H,2000H,4000H,3FFEH,0000H,0000H ;"制"
DW 0000H,0000H,0000H,3000H,2844H,2492H,0FE92H,206CH
DW 0000H,0000H,0000H,4040H,8080H,0000H,0000H,0000H ;"3\4\"
CH_TABLE3
DW 0000H,0000H,0000H,7C00H,924EH,928AH,928AH,6072H
DW 0000H,0000H,0000H,4040H,8080H,0000H,0000H,0000H ;"5\6\"
CH_TABLE4
DW 0000H,0000H,0000H,0000H,6C02H,92F2H,920EH,6C02H
DW 0000H,0000H,0000H,4040H,8080H,0000H,0000H,0000H ;"7\8\"
D_TABLE
DB 00H,00H,3EH,7FH,41H,7FH,3EH,00H ;"0"
DB 00H,00H,42H,7FH,7FH,40H,00H,00H ;"1"
DB 00H,00H,62H,73H,59H,4FH,46H,00H ;"2"
DB 00H,00H,22H,6BH,49H,7FH,36H,00H ;"3"
DB 00H,18H,1CH,16H,7FH,7FH,10H,00H ;"4"
DB 00H,00H,27H,67H,45H,75H,39H,00H ;"5"
DB 00H,3EH,7FH,49H,49H,79H,30H,00H ;"6"
DB 00H,00H,01H,79H,7FH,07H,01H,00H ;"7"
DB 00H,00H,36H,7FH,49H,7FH,36H,00H ;"8"
DB 00H,00H,06H,4FH,49H,7FH,3EH,00H ;"9"
DB 01H,07H,39H,40H,39H,07H,01H,00H ;"V"(0AH)
DB 00H,00H,00H,60H,60H,00H,00H,00H ;"."(0BH)
DB 03H,03H,3CH,42H,81H,81H,81H,42H ;"℃"(0CH)
DB 00H,00H,00H,00H,00H,00H,00H,00H ;"NULL"(0DH)
DB 40H,7EH,02H,7EH,02H,7EH,40H,00H ;"m"(0EH)
DB 80H,0E0H,9EH,11H,9EH,0E0H,80H,00H ;"A"(0FH)
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -