⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1.s

📁 这是个lcd12864液晶的串行驱动程序
💻 S
📖 第 1 页 / 共 2 页
字号:
	clr R2
	out 0x1a,R2
	.dbline 170
;    PORTA=0x00; 
	out 0x1b,R2
L14:
	.dbline 172
;    do 
;    { EN_H; 
	.dbline 172
	sbi 0x18,0
	.dbline 173
;      Lstate  = PINA; 
	in R20,0x19
	.dbline 174
;      EN_L;   
	cbi 0x18,0
	.dbline 175
L15:
	.dbline 175
;    }while(Lstate & 0x80); 
	sbrc R20,7
	rjmp L14
	.dbline 176
;    DDRA=0xff; 
	ldi R24,255
	out 0x1a,R24
	.dbline 177
;    DI_H; 
	sbi 0x18,2
	.dbline 178
;    RW_L; 
	cbi 0x18,1
	.dbline 179
;    DATA     = Rdat; 
	out 0x1b,R16
	.dbline 180
;    EN_H; 
	sbi 0x18,0
	.dbline 181
;    EN_L; 
	cbi 0x18,0
	.dbline -2
L13:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r Lstate 20 c
	.dbsym r Rdat 16 c
	.dbend
	.dbfunc e LCD_INT _LCD_INT fV
	.even
_LCD_INT::
	.dbline -1
	.dbline 187
; } 
; //----------------------------------------------------------------------------- 
; // LCD:Iniatlize(DIlcdsplay). 
; //----------------------------------------------------------------------------- 
; void LCD_INT(void) 
; { 
	.dbline 188
;    Wleft_Cmad(0xc0);                 // Left  display start line; 
	ldi R16,192
	xcall _Wleft_Cmad
	.dbline 189
;    Wrigt_Cmad(0xc0);                 // Right display start line; 
	ldi R16,192
	xcall _Wrigt_Cmad
	.dbline 190
;    Wleft_Cmad(0x3f);                 // Left  display On; 
	ldi R16,63
	xcall _Wleft_Cmad
	.dbline 191
;    Wrigt_Cmad(0x3f);                 // Right display On;  
	ldi R16,63
	xcall _Wrigt_Cmad
	.dbline -2
L17:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e LCD_CLR _LCD_CLR fV
;        adrPage -> R20
;         adrLaw -> R22
	.even
_LCD_CLR::
	xcall push_gset2
	.dbline -1
	.dbline 197
; } 
; //----------------------------------------------------------------------------- 
; // LCD:Clear picture. 
; //----------------------------------------------------------------------------- 
; void LCD_CLR(void) 
; { 
	.dbline 199
;    unsigned char adrPage,adrLaw; 
;    for(adrPage = 0; adrPage < 8; adrPage++) 
	clr R20
	xjmp L22
L19:
	.dbline 200
;    {  Wleft_Cmad(adrPage | 0xb8); 
	.dbline 200
	mov R16,R20
	ori R16,184
	xcall _Wleft_Cmad
	.dbline 201
;       Wrigt_Cmad(adrPage | 0xb8); 
	mov R16,R20
	ori R16,184
	xcall _Wrigt_Cmad
	.dbline 202
;       Wleft_Cmad(0x40); 
	ldi R16,64
	xcall _Wleft_Cmad
	.dbline 203
;       Wrigt_Cmad(0x40); 
	ldi R16,64
	xcall _Wrigt_Cmad
	.dbline 204
;       for(adrLaw = 0; adrLaw < 64; adrLaw++) 
	clr R22
	xjmp L26
L23:
	.dbline 205
	.dbline 205
	clr R16
	xcall _Wleft_Data
	.dbline 206
	clr R16
	xcall _Wrigt_Data
	.dbline 207
L24:
	.dbline 204
	inc R22
L26:
	.dbline 204
	cpi R22,64
	brlo L23
	.dbline 208
L20:
	.dbline 199
	inc R20
L22:
	.dbline 199
	cpi R20,8
	brlo L19
	.dbline -2
L18:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r adrPage 20 c
	.dbsym r adrLaw 22 c
	.dbend
	.dbfunc e WriteHZ _WriteHZ fV
;              i -> R20
;           left -> R22
;              j -> R14
;           dptr -> R10,R11
;         ColSum -> R12
;      adrColumn -> y+12
;        adrPage -> y+10
;          XH_HZ -> R20
	.even
_WriteHZ::
	st -y,r19
	st -y,r18
	xcall push_gset5
	mov R20,R16
	ldd R12,y+14
	.dbline -1
	.dbline 214
;       {   Wleft_Data(0x00); 
;           Wrigt_Data(0x00); 
;       } 
;    } 
; } 
; //----------------------------------------------------------------------------- 
; // LCD:DIlcdsplay Chinese. 
; //----------------------------------------------------------------------------- 
; void WriteHZ(uchar XH_HZ,uchar adrPage,int adrColumn,uchar ColSum) 
; { 
	.dbline 216
;    unsigned int  dptr;               // dptr_adderss for HZ code. 
;    unsigned char left=0, i, j; 
	clr R22
	.dbline 217
;    dptr = XH_HZ * 32; 
	ldi R24,32
	mul R24,R20
	movw R10,R0
	.dbline 218
;    if((adrColumn-64) >= 0) left = 0;   // left = 0:for right. 
	ldd R24,y+12
	ldd R25,y+13
	subi R24,64
	sbci R25,0
	cpi R24,0
	ldi R30,0
	cpc R25,R30
	brlt L28
	.dbline 218
	xjmp L29
L28:
	.dbline 219
;    else if((adrColumn-64) < 0)  left = 1;   // left = 1:for left. 
	ldd R24,y+12
	ldd R25,y+13
	subi R24,64
	sbci R25,0
	cpi R24,0
	ldi R30,0
	cpc R25,R30
	brge L30
	.dbline 219
	ldi R22,1
L30:
L29:
	.dbline 220
;    for(i=0; i<2; i++) 
	clr R20
	xjmp L35
L32:
	.dbline 221
;    { 
	.dbline 222
;       if(left == 0) 
	tst R22
	brne L36
	.dbline 223
;           { Wrigt_Cmad(adrPage | 0xb8);  
	.dbline 223
	ldd R16,y+10
	ori R16,184
	xcall _Wrigt_Cmad
	.dbline 224
;             Wrigt_Cmad(adrColumn | 0x40); 
	ldd R16,y+12
	ldd R17,y+13
	ori R16,64
	xcall _Wrigt_Cmad
	.dbline 225
;             for(j=0; j< ColSum; j++)     
	clr R14
	xjmp L41
L38:
	.dbline 226
	.dbline 227
	ldi R24,<_HZK
	ldi R25,>_HZK
	movw R30,R10
	add R30,R24
	adc R31,R25
	lpm R16,Z
	xcall _Wrigt_Data
	.dbline 228
	movw R24,R10
	adiw R24,1
	movw R10,R24
	.dbline 229
L39:
	.dbline 225
	inc R14
L41:
	.dbline 225
	cp R14,R12
	brlo L38
	.dbline 230
;           { 
;              Wrigt_Data(HZK[dptr]); 
;              dptr = dptr + 1;     
;           } 
;       } 
L36:
	.dbline 231
;       if(left == 1) 
	cpi R22,1
	brne L42
	.dbline 232
;           {          Wleft_Cmad(adrPage | 0xb8); 
	.dbline 232
	ldd R16,y+10
	ori R16,184
	xcall _Wleft_Cmad
	.dbline 233
;           Wleft_Cmad(adrColumn | 0x40); 
	ldd R16,y+12
	ldd R17,y+13
	ori R16,64
	xcall _Wleft_Cmad
	.dbline 234
	clr R14
	xjmp L47
L44:
	.dbline 234
	.dbline 235
	ldi R24,<_HZK
	ldi R25,>_HZK
	movw R30,R10
	add R30,R24
	adc R31,R25
	lpm R16,Z
	xcall _Wleft_Data
	.dbline 236
	movw R24,R10
	adiw R24,1
	movw R10,R24
	.dbline 236
L45:
	.dbline 234
	inc R14
L47:
	.dbline 234
;           for(j=0; j< ColSum; j++)    { 
	cp R14,R12
	brlo L44
	.dbline 237
;              Wleft_Data(HZK[dptr]); 
;              dptr = dptr + 1;    } 
;       } 
L42:
	.dbline 238
	ldd R0,y+10
	inc R0
	std y+10,R0
	.dbline 239
L33:
	.dbline 220
	inc R20
L35:
	.dbline 220
	cpi R20,2
	brsh X0
	xjmp L32
X0:
	.dbline -2
L27:
	xcall pop_gset5
	adiw R28,2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r left 22 c
	.dbsym r j 14 c
	.dbsym r dptr 10 i
	.dbsym r ColSum 12 c
	.dbsym l adrColumn 12 I
	.dbsym l adrPage 10 c
	.dbsym r XH_HZ 20 c
	.dbend
	.dbfunc e WriteDG _WriteDG fV
;              i -> R20
;           left -> R22
;              j -> R14
;           dptr -> R10,R11
;      adrColumn -> R12,R13
;        adrPage -> y+10
;         XH_Dig -> R20
	.even
_WriteDG::
	st -y,r19
	st -y,r18
	xcall push_gset5
	mov R20,R16
	ldd R12,y+12
	ldd R13,y+13
	.dbline -1
	.dbline 245
;           adrPage = adrPage + 1; 
;    } 
; } 
; //----------------------------------------------------------------------------- 
; // LCD:DIlcdsplay ASCII. 
; //----------------------------------------------------------------------------- 
; void WriteDG(uchar XH_Dig,uchar adrPage,int adrColumn) 
; { 
	.dbline 248
;    unsigned int  dptr;               // dptr_adderss for Dig code. 
;    unsigned char left, i, j; 
;    dptr = XH_Dig * 16; 
	ldi R24,16
	mul R24,R20
	movw R10,R0
	.dbline 249
;    if(adrColumn-64 >= 0) left = 0;   // left = 0:for right. 
	movw R24,R12
	subi R24,64
	sbci R25,0
	cpi R24,0
	ldi R30,0
	cpc R25,R30
	brlt L49
	.dbline 249
	clr R22
	xjmp L50
L49:
	.dbline 250
;    else                  left = 1;   // left = 1:for left. 
	ldi R22,1
L50:
	.dbline 252
; 
;    for(i=0; i<2; i++) 
	clr R20
	xjmp L54
L51:
	.dbline 253
;    { 
	.dbline 254
;       if(left == 0) 
	tst R22
	brne L55
	.dbline 255
;           {          Wrigt_Cmad(adrPage | 0xb8);   
	.dbline 255
	ldd R16,y+10
	ori R16,184
	xcall _Wrigt_Cmad
	.dbline 256
;           Wrigt_Cmad(adrColumn | 0x40); 
	mov R16,R12
	ori R16,64
	xcall _Wrigt_Cmad
	.dbline 257
	clr R14
	xjmp L60
L57:
	.dbline 257
	.dbline 258
	ldi R24,<_Dig
	ldi R25,>_Dig
	movw R30,R10
	add R30,R24
	adc R31,R25
	lpm R16,Z
	xcall _Wrigt_Data
	.dbline 259
	movw R24,R10
	adiw R24,1
	movw R10,R24
	.dbline 259
L58:
	.dbline 257
	inc R14
L60:
	.dbline 257
;           for(j=0; j< 8; j++)      { 
	mov R24,R14
	cpi R24,8
	brlo L57
	.dbline 260
;              Wrigt_Data(Dig[dptr]); 
;              dptr = dptr + 1;      } 
;       } 
L55:
	.dbline 261
;       if(left == 1) 
	cpi R22,1
	brne L61
	.dbline 262
;           {          Wleft_Cmad(adrPage | 0xb8); 
	.dbline 262
	ldd R16,y+10
	ori R16,184
	xcall _Wleft_Cmad
	.dbline 263
;           Wleft_Cmad(adrColumn | 0x40); 
	mov R16,R12
	ori R16,64
	xcall _Wleft_Cmad
	.dbline 264
	clr R14
	xjmp L66
L63:
	.dbline 264
	.dbline 265
	ldi R24,<_Dig
	ldi R25,>_Dig
	movw R30,R10
	add R30,R24
	adc R31,R25
	lpm R16,Z
	xcall _Wleft_Data
	.dbline 266
	movw R24,R10
	adiw R24,1
	movw R10,R24
	.dbline 266
L64:
	.dbline 264
	inc R14
L66:
	.dbline 264
;           for(j=0; j< 8; j++)      { 
	mov R24,R14
	cpi R24,8
	brlo L63
	.dbline 267
;              Wleft_Data(Dig[dptr]); 
;              dptr = dptr + 1;      } 
;       } 
L61:
	.dbline 268
	ldd R0,y+10
	inc R0
	std y+10,R0
	.dbline 269
L52:
	.dbline 252
	inc R20
L54:
	.dbline 252
	cpi R20,2
	brsh X1
	xjmp L51
X1:
	.dbline -2
L48:
	xcall pop_gset5
	adiw R28,2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r left 22 c
	.dbsym r j 14 c
	.dbsym r dptr 10 i
	.dbsym r adrColumn 12 I
	.dbsym l adrPage 10 c
	.dbsym r XH_Dig 20 c
	.dbend
	.dbfunc e delay_1ms _delay_1ms fV
;              i -> R16,R17
	.even
_delay_1ms::
	.dbline -1
	.dbline 274
;           adrPage = adrPage + 1; 
;    } 
; } 
; 
; #define xtal 4    
; void delay_1ms(void) 
; { unsigned int i; 
	.dbline 275
;  for(i=1;i<(unsigned int)(xtal*143-2);i++) 
	ldi R16,1
	ldi R17,0
	xjmp L71
L68:
	.dbline 276
L69:
	.dbline 275
	subi R16,255  ; offset = 1
	sbci R17,255
L71:
	.dbline 275
	cpi R16,58
	ldi R30,2
	cpc R17,R30
	brlo L68
	.dbline -2
L67:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 i
	.dbend
	.dbfunc e delay_ms _delay_ms fV
;              i -> R20,R21
;              n -> R22,R23
	.even
_delay_ms::
	xcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 279
;     ; 
; } 
; void delay_ms(unsigned int n) 
; { 
	.dbline 280
;  unsigned int i=0; 
	clr R20
	clr R21
	xjmp L74
L73:
	.dbline 282
	.dbline 282
	xcall _delay_1ms
	.dbline 283
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 284
L74:
	.dbline 281
;    while(i<n) 
	cp R20,R22
	cpc R21,R23
	brlo L73
	.dbline -2
L72:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r n 22 i
	.dbend
	.dbfunc e main _main fV
	.even
_main::
	sbiw R28,3
	.dbline -1
	.dbline 289
;    {delay_1ms(); 
;     i++; 
;    } 
; } 
; 
; 
; void main() 
; { 
	.dbline 290
;    PORTA = 0x00; 
	clr R2
	out 0x1b,R2
	.dbline 291
;    DDRA  = 0xFF; 
	ldi R24,255
	out 0x1a,R24
	.dbline 292
;    DDRB  = 0xff ; 
	out 0x17,R24
	.dbline 293
;    PORTB=0xff; 
	out 0x18,R24
	.dbline 294
;    PORTC = 0xff; 
	out 0x15,R24
	.dbline 295
;    DDRC  = 0xFF; 
	out 0x14,R24
	.dbline 296
;    PORTC = 0xff; 
	out 0x15,R24
	.dbline 297
;    PORTD = 0xFF;  
	out 0x12,R24
	.dbline 298
;    LCD_INT(); 
	xcall _LCD_INT
	.dbline 299
;    LCD_CLR(); 
	xcall _LCD_CLR
	.dbline 300
;    WriteHZ(12, 0, 5, 64);         // 氧电势 
	ldi R24,64
	std y+2,R24
	ldi R24,5
	ldi R25,0
	std y+1,R25
	std y+0,R24
	clr R18
	ldi R16,12
	xcall _WriteHZ
	.dbline 301
;    WriteHZ(17, 0, 108, 16);       // mv 
	ldi R24,16
	std y+2,R24
	ldi R24,108
	ldi R25,0
	std y+1,R25
	std y+0,R24
	clr R18
	ldi R16,17
	xcall _WriteHZ
	.dbline 302
;    WriteHZ(0, 2, 0, 64);          // 氧量 
	ldi R24,64
	std y+2,R24
	clr R2
	clr R3
	std y+1,R3
	std y+0,R2
	ldi R18,2
	clr R16
	xcall _WriteHZ
	.dbline 303
;    WriteDG(11, 2, 108);           // % 
	ldi R24,108
	ldi R25,0
	std y+1,R25
	std y+0,R24
	ldi R18,2
	ldi R16,11
	xcall _WriteDG
	.dbline 304
;    WriteHZ(8, 4, 0, 64);          // 热电势 
	ldi R24,64
	std y+2,R24
	clr R2
	clr R3
	std y+1,R3
	std y+0,R2
	ldi R18,4
	ldi R16,8
	xcall _WriteHZ
	.dbline 305
;    WriteHZ(17, 4, 108, 16);       // mv          
	ldi R24,16
	std y+2,R24
	ldi R24,108
	ldi R25,0
	std y+1,R25
	std y+0,R24
	ldi R18,4
	ldi R16,17
	xcall _WriteHZ
	.dbline 306
;    WriteHZ(4, 6, 0, 64);          // 温度 
	ldi R24,64
	std y+2,R24
	clr R2
	clr R3
	std y+1,R3
	std y+0,R2
	ldi R18,6
	ldi R16,4
	xcall _WriteHZ
	.dbline 307
;    WriteHZ(16, 6,108, 16);         // C 
	ldi R24,16
	std y+2,R24
	ldi R24,108
	ldi R25,0
	std y+1,R25
	std y+0,R24
	ldi R18,6
	ldi R16,16
	xcall _WriteHZ
	.dbline -2
L76:
	adiw R28,3
	.dbline 0 ; func end
	ret
	.dbend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -