📄 tg1286~1.lst
字号:
81C8 87 pshA
81C9 CD 85C3 jsr _Wtite_Command
81CC A7 01 aiS #1
(0040) Wtite_Command(0b00000001); //清屏
81CE A6 01 ldA #1
81D0 87 pshA
81D1 CD 85C3 jsr _Wtite_Command
81D4 A7 01 aiS #1
(0041) delay1600us; //延时>1.6ms
81D6 45 0FA0 ldHX #0x0FA0
81D9 89 pshX
81DA 8B pshH
81DB CD 85F9 jsr _DelayTimes
81DE A7 02 aiS #2
(0042) Wtite_Command(0b00000110); //进入模式设定
81E0 A6 06 ldA #6
81E2 87 pshA
81E3 CD 85C3 jsr _Wtite_Command
81E6 A7 01 aiS #1
(0043) LcdShGrClr(); //清Lcd图形显示屏
81E8 CD 84E0 jsr _LcdShGrClr
81EB 95 tSX
81EC 81 rts
_LcdShCh:
i --> X+0
LcdSBuff --> X+3
81ED A7 FF aiS #-1
81EF 95 tSX
(0044) }
(0045)
(0046) //==================[Lcd显示字符操作]========================
(0047) /*LcdShCh:在液晶显示屏上显示字符数据-------------------*
(0048) *功 能:在液晶显示屏上显示以LcdSBuff为首地址的64个数据 *
(0049) *参 数:待显示的64个数据的首地址 *
(0050) *返 回:无 *
(0051) *-----------------------------------------------------*/
(0052) void LcdShCh(unsigned char *LcdSBuff)
(0053) {
81F0 A6 80 ldA #-128
81F2 87 pshA
81F3 CD 85C3 jsr _Wtite_Command
81F6 A7 01 aiS #1
81F8 95 tSX
(0054) unsigned char i; //data数组计数器(0-63)
(0055) //[Lcd显示64个数据]
(0056) Wtite_Command(0x80); //DDRAM地址设置
(0057) for(i=0;i<64;i++) //显示data中的64个数据
81F9 7F clr 0,X
81FA 20 65 bra 0x8261
(0058) {
81FC F6 ldA 0,X
81FD A1 0F cmp #15
81FF 23 04 bls 0x8205
8201 A1 30 cmp #48
8203 25 19 bcs 0x821E
(0059) //[Lcd按行显示16个数据]
(0060) if((i<=15)||(i>=48)) //第一行和第四行不变
(0061) Wtite_Data(LcdSBuff[i]);
8205 3F 40 clr *__r0
8207 F6 ldA 0,X
8208 EB 04 add 4,X
820A B7 41 stA *__r1
820C B6 40 ldA *__r0
820E E9 03 adc 3,X
8210 B7 40 stA *__r0
8212 55 40 ldHX *__r0
8214 F6 ldA 0,X
8215 87 pshA
8216 CD 85DE jsr _Wtite_Data
8219 A7 01 aiS #1
821B 95 tSX
821C 20 42 bra 0x8260
(0062) else if(i<=31) //显示的第二行为缓冲的第三行
821E F6 ldA 0,X
821F A1 1F cmp #31
8221 22 1A bhi 0x823D
(0063) Wtite_Data(LcdSBuff[i+16]);
8223 3F 40 clr *__r0
8225 EB 04 add 4,X
8227 B7 41 stA *__r1
8229 B6 40 ldA *__r0
822B E9 03 adc 3,X
822D B7 40 stA *__r0
822F 55 40 ldHX *__r0
8231 AF 10 aiX #16
8233 F6 ldA 0,X
8234 87 pshA
8235 CD 85DE jsr _Wtite_Data
8238 A7 01 aiS #1
823A 95 tSX
823B 20 23 bra 0x8260
(0064) else //显示的第三行为缓冲的第二行
(0065) Wtite_Data(LcdSBuff[i-16]);
823D 3F 40 clr *__r0
823F F6 ldA 0,X
8240 A0 10 sub #16
8242 B7 41 stA *__r1
8244 B6 40 ldA *__r0
8246 A2 00 sbc #0
8248 B7 40 stA *__r0
824A B6 41 ldA *__r1
824C EB 04 add 4,X
824E B7 41 stA *__r1
8250 B6 40 ldA *__r0
8252 E9 03 adc 3,X
8254 B7 40 stA *__r0
8256 55 40 ldHX *__r0
8258 F6 ldA 0,X
8259 87 pshA
825A CD 85DE jsr _Wtite_Data
825D A7 01 aiS #1
825F 95 tSX
(0066) }
8260 7C inc 0,X
8261 F6 ldA 0,X
8262 A1 40 cmp #64
8264 25 96 bcs 0x81FC
8266 A7 01 aiS #1
8268 81 rts
_LcdShGrCil:
y --> X+0
mistake --> X+1
x --> X+5
GrE --> X+12
GrCilMV --> X+11
CR --> X+10
Cx --> X+9
Cy --> X+8
8269 A7 FA aiS #-6
826B 95 tSX
(0067) }
(0068)
(0069) //=====[Lcd画图操作:包括画圆,画矩形框,图形清屏,画点等]=====
(0070) /*LcdShGrCil:在Lcd上显示或取消空心圆型-----------------*
(0071) *功 能:在Lcd上的指定位置显示或取消空心圆型 *
(0072) *参 数:Cx为圆心横坐标,Cy为圆心纵坐标 *
(0073) * CR为圆的半径,GrE确定图形是否有效 *
(0074) * GrCilMV为显示圆型时的正误差值 *
(0075) * 例如:半径为10,误差为4;半径为30,误差为30 *
(0076) *返 回:无 *
(0077) *-----------------------------------------------------*/
(0078) void LcdShGrCil(unsigned char Cy,unsigned char Cx,
(0079) unsigned char CR,unsigned char
(0080) GrCilMV,unsigned char GrE)
(0081) {
826C A6 36 ldA #54
826E 87 pshA
826F CD 85C3 jsr _Wtite_Command
8272 A7 01 aiS #1
8274 95 tSX
(0082) unsigned char x,y; //坐标的循环控制变量
(0083) long int mistake; //显示时的误差值
(0084) Wtite_Command(0b00110110); //扩展指令,绘图开
(0085) for(y=Cy-CR;y<=Cy+CR;y++)
8275 E6 08 ldA 8,X
8277 E0 0A sub 10,X
8279 F7 stA 0,X
827A CC 83FA jmp 0x83FA
(0086) for(x=Cx-CR;x<=Cx+CR;x++)
827D E6 09 ldA 9,X
827F E0 0A sub 10,X
8281 E7 05 stA 5,X
8283 CC 83EA jmp 0x83EA
(0087) {
8286 3F 40 clr *__r0
8288 E6 09 ldA 9,X
828A B7 41 stA *__r1
828C 3F 42 clr *__r2
828E E6 05 ldA 5,X
8290 B0 41 sub *__r1
8292 B7 41 stA *__r1
8294 B6 42 ldA *__r2
8296 B2 40 sbc *__r0
8298 B7 40 stA *__r0
829A 3F 42 clr *__r2
829C E6 08 ldA 8,X
829E B7 43 stA *__r3
82A0 3F 44 clr *__r4
82A2 F6 ldA 0,X
82A3 B0 43 sub *__r3
82A5 B7 43 stA *__r3
82A7 B6 44 ldA *__r4
82A9 B2 42 sbc *__r2
82AB B7 42 stA *__r2
82AD B6 43 ldA *__r3
82AF 87 pshA
82B0 B6 42 ldA *__r2
82B2 87 pshA
82B3 B6 43 ldA *__r3
82B5 87 pshA
82B6 B6 42 ldA *__r2
82B8 87 pshA
82B9 CD 881C jsr __mul16
82BC A7 04 aiS #4
82BE 4E 4D43 mov *__rlo,*__r3
82C1 4E 4C42 mov *__rhi,*__r2
82C4 B6 41 ldA *__r1
82C6 87 pshA
82C7 B6 40 ldA *__r0
82C9 87 pshA
82CA B6 41 ldA *__r1
82CC 87 pshA
82CD B6 40 ldA *__r0
82CF 87 pshA
82D0 CD 881C jsr __mul16
82D3 A7 04 aiS #4
82D5 4E 4D41 mov *__rlo,*__r1
82D8 4E 4C40 mov *__rhi,*__r0
82DB B6 41 ldA *__r1
82DD BB 43 add *__r3
82DF B7 41 stA *__r1
82E1 B6 40 ldA *__r0
82E3 B9 42 adc *__r2
82E5 B7 40 stA *__r0
82E7 3F 42 clr *__r2
82E9 E6 0A ldA 10,X
82EB B7 43 stA *__r3
82ED 3F 44 clr *__r4
82EF E6 0A ldA 10,X
82F1 87 pshA
82F2 B6 44 ldA *__r4
82F4 87 pshA
82F5 B6 43 ldA *__r3
82F7 87 pshA
82F8 B6 42 ldA *__r2
82FA 87 pshA
82FB CD 881C jsr __mul16
82FE A7 04 aiS #4
8300 4E 4D43 mov *__rlo,*__r3
8303 4E 4C42 mov *__rhi,*__r2
8306 B6 41 ldA *__r1
8308 B0 43 sub *__r3
830A B7 41 stA *__r1
830C B6 40 ldA *__r0
830E B2 42 sbc *__r2
8310 B7 40 stA *__r0
8312 4F clrA
8313 E7 02 stA 2,X
8315 E7 01 stA 1,X
8317 B6 41 ldA *__r1
8319 E7 04 stA 4,X
831B B6 40 ldA *__r0
831D E7 03 stA 3,X
831F 2A 04 bpl 0x8325
8321 63 02 com 2,X
8323 63 01 com 1,X
(0088) mistake=(x-Cx)*(x-Cx)+(y-Cy)*(y-Cy)-CR*CR;
(0089) //误差在范围之内时,显示该点
(0090) if((mistake<=GrCilMV)&&(mistake>=-GrCilMV))
8325 3F 42 clr *__r2
8327 3F 41 clr *__r1
8329 3F 40 clr *__r0
832B E6 0B ldA 11,X
832D B7 43 stA *__r3
832F E6 04 ldA 4,X
8331 87 pshA
8332 E6 03 ldA 3,X
8334 87 pshA
8335 E6 02 ldA 2,X
8337 87 pshA
8338 E6 01 ldA 1,X
833A 87 pshA
833B B6 43 ldA *__r3
833D 87 pshA
833E B6 42 ldA *__r2
8340 87 pshA
8341 B6 41 ldA *__r1
8343 87 pshA
8344 B6 40 ldA *__r0
8346 87 pshA
8347 CD 8730 jsr __cmp32
834A A7 08 aiS #8
834C 93 03 ble 0x8351
834E CC 83E8 jmp 0x83E8
8351 3F 40 clr *__r0
8353 E6 0B ldA 11,X
8355 B7 41 stA *__r1
8357 B6 40 ldA *__r0
8359 40 negA
835A 87 pshA
835B B6 41 ldA *__r1
835D 40 negA
835E B7 41 stA *__r1
8360 86 pulA
8361 A2 00 sbc #0
8363 B7 40 stA *__r0
8365 4E 4143 mov *__r1,*__r3
8368 4E 4042 mov *__r0,*__r2
836B 3F 41 clr *__r1
836D 3F 40 clr *__r0
836F 3D 42 tst *__r2
8371 2A 04 bpl 0x8377
8373 33 41 com *__r1
8375 33 40 com *__r0
8377 E6 04 ldA 4,X
8379 87 pshA
837A E6 03 ldA 3,X
837C 87 pshA
837D E6 02 ldA 2,X
837F 87 pshA
8380 E6 01 ldA 1,X
8382 87 pshA
8383 B6 43 ldA *__r3
8385 87 pshA
8386 B6 42 ldA *__r2
8388 87 pshA
8389 B6 41 ldA *__r1
838B 87 pshA
838C B6 40 ldA *__r0
838E 87 pshA
838F CD 8730 jsr __cmp32
8392 A7 08 aiS #8
8394 91 52 blt 0x83E8
(0091) {
8396 E6 0C ldA 12,X
8398 A1 01 cmp #1
839A 26 0D bne 0x83A9
(0092) if(GrE==1) LcdShGr1P(y,x);//显示该点
839C E6 05 ldA 5,X
839E 87 pshA
839F F6 ldA 0,X
83A0 87 pshA
83A1 CD 8520 jsr _LcdShGr1P
83A4 A7 02 aiS #2
83A6 95 tSX
83A7 20 3F bra 0x83E8
(0093) //清除该点
(0094) else if(y<=31) LcdShGr16P(y,(x/16),0);
83A9 F6 ldA 0,X
83AA A1 1F cmp #31
83AC 22 1C bhi 0x83CA
83AE 45 0000 ldHX #0x0000
83B1 89 pshX
83B2 8B pshH
83B3 95 tSX
83B4 AF 02 aiX #2
83B6 E6 05 ldA 5,X
83B8 AE 10 ldX #16
83BA 8C clrH
83BB 52 div
83BC 95 tSX
83BD AF 02 aiX #2
83BF 87 pshA
83C0 F6 ldA 0,X
83C1 87 pshA
83C2 CD 858D jsr _LcdShGr16P
83C5 A7 04 aiS #4
83C7 95 tSX
83C8 20 1E bra 0x83E8
(0095) else LcdShGr16P(y-32,x/16+8,0);
83CA 45 0000 ldHX #0x0000
83CD 89 pshX
83CE 8B pshH
83CF 95 tSX
83D0 AF 02 aiX #2
83D2 E6 05 ldA 5,X
83D4 AE 10 ldX #16
83D6 8C clrH
83D7 52 div
83D8 95 tSX
83D9 AF 02 aiX #2
83DB AB 08 add #8
83DD 87 pshA
83DE F6 ldA 0,X
83DF A0 20 sub #32
83E1 87 pshA
83E2 CD 858D jsr _LcdShGr16P
83E5 A7 04 aiS #4
83E7 95 tSX
(0096) }
83E8 6C 05 inc 5,X
83EA E6 09 ldA 9,X
83EC EB 0A add 10,X
83EE B7 40 stA *__r0
83F0 E6 05 ldA 5,X
83F2 B1 40 cmp *__r0
83F4 22 03 bhi 0x83F9
83F6 CC 8286 jmp 0x8286
83F9 7C inc 0,X
83FA E6 08 ldA 8,X
83FC EB 0A add 10,X
83FE B7 40 stA *__r0
8400 F6 ldA 0,X
8401 B1 40 cmp *__r0
8403 22 03 bhi 0x8408
8405 CC 827D jmp 0x827D
(0097) }
(0098) // LcdShGr1P(Cy,Cx);//显示圆心
(0099) Wtite_Command(0b00110000);//基本指令
8408 A6 30 ldA #48
840A 87 pshA
840B CD 85C3 jsr _Wtite_Command
840E A7 01 aiS #1
8410 95 tSX
8411 A7 06 aiS #6
8413 81 rts
_LcdShGrRe:
RC --> X+0
LC --> X+2
TBC --> X+4
i --> X+6
y --> X+7
Px --> X+8
GrE --> X+12
ln --> X+11
8414 A7 F7 aiS #-9
8416 95 tSX
(0100) }
(0101)
(0102) /*LcdShGrRe:在Lcd的指定行上显示或取消矩型边框--------*
(0103) *功 能:在Lcd上指定行上显示或取消矩型边框 *
(0104) *参 数:ln为指定的行数(0-3), GrE确定图形是否有效 *
(0105) *返 回:无 *
(0106) *---------------------------------------------------*/
(0107) void LcdShGrRe(unsigned char ln,unsigned char GrE)
(0108) {
8417 E6 0B ldA 11,X
8419 27 04 beq 0x841F
841B A1 02 cmp #2
841D 26 04 bne 0x8423
(0109) unsigned char Px,y;//行页号坐标,列坐标
(0110) unsigned char i; //循环变量
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -