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

📄 lcd.s

📁 ATMEGA16L 驱动的串口12864
💻 S
字号:
	.module lcd.c
	.area text(rom, con, rel)
	.dbfile E:\AVR程序\12864串口/lcd.h
	.dbfunc e delay_1us _delay_1us fV
	.even
_delay_1us::
	.dbline -1
	.dbline 19
; #include "lcd.h"
; 
; #define CS BIT(5)
; #define SID BIT(6)
; #define SCLK BIT(7)
; 
; #define LCD_ON PORTD &=~ BIT(7)
; #define LCD_OFF PORTD &=~ BIT(7)
; 
; 
; #define EN_CS PORTA  |=  CS
; #define DIS_CS PORTA &=~ CS
; 
; #define ST_SID PORTA |= SID
; #define CLS_SID PORTA &=~ SID
; 
; #define ST_SCLK PORTA |= SCLK
; #define CLS_SCLK PORTA &=~ SCLK
; 
	.dbline 20
; 
	nop
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e delay_nus _delay_nus fV
;              i -> R20,R21
;              n -> R22,R23
	.even
_delay_nus::
	xcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 24
; unsigned char  ma[] ={"汉字显示LCD"};
; unsigned char flash ma2[]={"自带字库图文混排"};
; unsigned char flash ma3[]={"控制IC:ST7920  "};
; unsigned char flash ma4[]={"功能强大使用方便"};
	.dbline 25
; 
	clr R20
	clr R21
	.dbline 26
; void portini(void)
	xjmp L6
L3:
	.dbline 27
	xcall _delay_1us
L4:
	.dbline 26
	subi R20,255  ; offset = 1
	sbci R21,255
L6:
	.dbline 26
	cp R20,R22
	cpc R21,R23
	brlo L3
	.dbline -2
L2:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r n 22 i
	.dbend
	.dbfunc e delay_1ms _delay_1ms fV
;              i -> R16,R17
	.even
_delay_1ms::
	.dbline -1
	.dbline 31
; {
;     DDRD=0xff;
;     PORTD = 0xff;
;     DDRB = 0xff;
;     PORTB = 0xff;
	.dbline 33
	clr R16
	clr R17
	xjmp L11
L8:
	.dbline 33
L9:
	.dbline 33
	subi R16,255  ; offset = 1
	sbci R17,255
L11:
	.dbline 33
; }
; 
	cpi R16,116
	ldi R30,4
	cpc R17,R30
	brlo L8
	.dbline -2
L7:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 i
	.dbend
	.dbfunc e delay_nms _delay_nms fV
;              i -> R20,R21
;              n -> R22,R23
	.even
_delay_nms::
	xcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 37
; void delaynms(uint di) //延时
; {
;  uint da,db;
;  for(da=0;da<di;da++)
	.dbline 38
;    for(db=0;db<1000;db++);
	clr R20
	clr R21
	.dbline 39
; }
	xjmp L16
L13:
	.dbline 40
	xcall _delay_1ms
L14:
	.dbline 39
	subi R20,255  ; offset = 1
	sbci R21,255
L16:
	.dbline 39
	cp R20,R22
	cpc R21,R23
	brlo L13
	.dbline -2
L12:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r n 22 i
	.dbend
	.area data(ram, con, rel)
	.dbfile E:\AVR程序\12864串口/lcd.h
_ma::
	.blkb 12
	.area idata
	.byte 186,186,215,214,207,212,202,190,'L,'C,'D,0
	.area data(ram, con, rel)
	.dbfile E:\AVR程序\12864串口/lcd.h
	.dbfile E:\AVR程序\12864串口\lcd.c
	.dbsym e ma _ma A[12:12]c
	.area lit(rom, con, rel)
_ma2::
	.byte 215,212,180,248,215,214,191,226,205,188,206,196,187,236,197,197
	.byte 0
	.dbsym e ma2 _ma2 A[17:17]kc
_ma3::
	.byte 191,216,214,198,'I,'C,163,186,'S,'T,55,57,50,48,32,32
	.byte 0
	.dbsym e ma3 _ma3 A[17:17]kc
_ma4::
	.byte 185,166,196,220,199,191,180,243,202,185,211,195,183,189,177,227
	.byte 0
	.dbsym e ma4 _ma4 A[17:17]kc
	.area text(rom, con, rel)
	.dbfile E:\AVR程序\12864串口\lcd.c
	.dbfunc e portini _portini fV
	.even
_portini::
	.dbline -1
	.dbline 27
	.dbline 28
	ldi R24,255
	out 0x11,R24
	.dbline 29
	out 0x12,R24
	.dbline 30
	out 0x17,R24
	.dbline 31
	out 0x18,R24
	.dbline -2
L17:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e delaynms _delaynms fV
;             da -> R20,R21
;             db -> R22,R23
;             di -> R16,R17
	.even
_delaynms::
	xcall push_gset2
	.dbline -1
	.dbline 35
	.dbline 37
	clr R20
	clr R21
	xjmp L22
L19:
	.dbline 38
	clr R22
	clr R23
	xjmp L26
L23:
	.dbline 38
L24:
	.dbline 38
	subi R22,255  ; offset = 1
	sbci R23,255
L26:
	.dbline 38
	cpi R22,232
	ldi R30,3
	cpc R23,R30
	brlo L23
L20:
	.dbline 37
	subi R20,255  ; offset = 1
	sbci R21,255
L22:
	.dbline 37
	cp R20,R16
	cpc R21,R17
	brlo L19
	.dbline -2
L18:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r da 20 i
	.dbsym r db 22 i
	.dbsym r di 16 i
	.dbend
	.dbfunc e lcdinit _lcdinit fV
	.even
_lcdinit::
	.dbline -1
	.dbline 43
; 
; 
; void lcdinit(void)//初始化LCD
; {
	.dbline 44
;     delaynms(10);
	ldi R16,10
	ldi R17,0
	xcall _delaynms
	.dbline 45
;     EN_CS;
	sbi 0x1b,5
	.dbline 46
;     write(0,0x30); //8位界面,基本指令集
	ldi R18,48
	clr R16
	xcall _write
	.dbline 47
; 	delaynms(10);
	ldi R16,10
	ldi R17,0
	xcall _delaynms
	.dbline 48
;     write(0,0x30); //显示打开,光标关,反白关
	ldi R18,48
	clr R16
	xcall _write
	.dbline 49
; 	delaynms(10);
	ldi R16,10
	ldi R17,0
	xcall _delaynms
	.dbline 50
; 	write(0,0x0c); //显示打开,光标关,反白关
	ldi R18,12
	clr R16
	xcall _write
	.dbline 51
; 		delaynms(10);
	ldi R16,10
	ldi R17,0
	xcall _delaynms
	.dbline 52
;     write(0,0x01); //清屏
	ldi R18,1
	clr R16
	xcall _write
	.dbline 53
; 		delaynms(10);
	ldi R16,10
	ldi R17,0
	xcall _delaynms
	.dbline 54
; 	write(0,0x60); 
	ldi R18,96
	clr R16
	xcall _write
	.dbline -2
L27:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e write _write fV
;          Ldata -> R20
;          Hdata -> R22
;     start_data -> R10
;          ddata -> R20
;          start -> R22
	.even
_write::
	xcall push_gset3
	mov R20,R18
	mov R22,R16
	.dbline -1
	.dbline 58
; }
; 
; void write(uchar start,uchar ddata) //写指令或数据
; {
	.dbline 60
;     uchar start_data,Hdata,Ldata;
;     if(start==0)
	tst R22
	brne L29
	.dbline 61
;         start_data = 0xf8; //写指令
	ldi R24,248
	mov R10,R24
	xjmp L30
L29:
	.dbline 63
;     else 
;         start_data = 0xfa; //写数据
	ldi R24,250
	mov R10,R24
L30:
	.dbline 64
;     Hdata = ddata&0xf0;  //取高4位
	mov R22,R20
	andi R22,240
	.dbline 65
; 	Ldata = (ddata<<4)&0xf0; //取低4位
	mov R24,R20
	andi R24,#0x0F
	swap R24
	andi R24,240
	mov R20,R24
	.dbline 66
; 	sendbyte(start_data);   //发送起始信号
	mov R16,R10
	xcall _sendbyte
	.dbline 67
; 	delaynms(100);
	ldi R16,100
	ldi R17,0
	xcall _delaynms
	.dbline 68
; 	sendbyte(Hdata);  //发送高四位
	mov R16,R22
	xcall _sendbyte
	.dbline 69
; 	delaynms(50);
	ldi R16,50
	ldi R17,0
	xcall _delaynms
	.dbline 70
; 	sendbyte(Ldata);  //发送低四位
	mov R16,R20
	xcall _sendbyte
	.dbline 71
; 	delaynms(50);
	ldi R16,50
	ldi R17,0
	xcall _delaynms
	.dbline -2
L28:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r Ldata 20 c
	.dbsym r Hdata 22 c
	.dbsym r start_data 10 c
	.dbsym r ddata 20 c
	.dbsym r start 22 c
	.dbend
	.dbfunc e sendbyte _sendbyte fV
;              i -> R20
;          bbyte -> R22
	.even
_sendbyte::
	xcall push_gset2
	mov R22,R16
	.dbline -1
	.dbline 75
; }
; 
; void sendbyte(uchar bbyte) //发送一个字节
; {
	.dbline 77
;     unsigned char i;
;     for(i=0;i<8;i++)
	clr R20
	xjmp L35
L32:
	.dbline 78
;     {    
	.dbline 80
; 	
;         if((bbyte&0x80)==1) //取出最高位
	mov R24,R22
	andi R24,128
	cpi R24,1
	brne L36
	.dbline 81
;     		{ST_SID;}
	.dbline 81
	sbi 0x1b,6
	.dbline 81
	xjmp L37
L36:
	.dbline 83
; 		else
;     		{CLS_SID;}
	.dbline 83
	cbi 0x1b,6
	.dbline 83
L37:
	.dbline 84
	sbi 0x1b,7
	.dbline 85
	ldi R16,100
	ldi R17,0
	xcall _delay_nus
	.dbline 86
	cbi 0x1b,7
	.dbline 87
	lsl R22
	.dbline 88
	ldi R16,100
	ldi R17,0
	xcall _delay_nus
	.dbline 89
L33:
	.dbline 77
	inc R20
L35:
	.dbline 77
	cpi R20,8
	brlo L32
	.dbline -2
L31:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r bbyte 22 c
	.dbend
	.dbfunc e lcdtest _lcdtest fV
;              i -> R20
;              j -> R22
	.even
_lcdtest::
	xcall push_gset2
	.dbline -1
	.dbline 93
;         ST_SCLK;
; 		delay_nus(100);
;     CLS_SCLK;
;         bbyte<<=1;
; 		delay_nus(100);
;     }
; }
; 
; void lcdtest(void) //图形方式下屏幕全黑
; {
	.dbline 95
;     uchar i,j;
;     for(i=0;i<32;i++)
	clr R20
	xjmp L42
L39:
	.dbline 96
;     {
	.dbline 97
;         write(0,0x80+i);write(0,0x80);
	mov R18,R20
	subi R18,128    ; addi 128
	clr R16
	xcall _write
	.dbline 97
	ldi R18,128
	clr R16
	xcall _write
	.dbline 98
	clr R22
	xjmp L46
L43:
	.dbline 98
	ldi R18,255
	ldi R16,1
	xcall _write
L44:
	.dbline 98
	inc R22
L46:
	.dbline 98
	cpi R22,16
	brlo L43
	.dbline 99
L40:
	.dbline 95
	inc R20
L42:
	.dbline 95
	cpi R20,32
	brlo L39
	.dbline 100
;         for(j=0;j<16;j++)write(1,0xff);
;     }
;     for(i=0;i<32;i++)
	clr R20
	xjmp L50
L47:
	.dbline 101
;     { 
	.dbline 102
;     	write(0,0x80+i);write(0,0x88);
	mov R18,R20
	subi R18,128    ; addi 128
	clr R16
	xcall _write
	.dbline 102
	ldi R18,136
	clr R16
	xcall _write
	.dbline 103
	clr R22
	xjmp L54
L51:
	.dbline 103
	ldi R18,255
	ldi R16,1
	xcall _write
L52:
	.dbline 103
	inc R22
L54:
	.dbline 103
	cpi R22,16
	brlo L51
	.dbline 104
L48:
	.dbline 100
	inc R20
L50:
	.dbline 100
	cpi R20,32
	brlo L47
	.dbline -2
L38:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r j 22 c
	.dbend
	.dbfunc e lcdcls _lcdcls fV
;              i -> R20
;              j -> R22
	.even
_lcdcls::
	xcall push_gset2
	.dbline -1
	.dbline 108
;         for(j=0;j<16;j++) write(1,0xff);
;     }
; }
; 
; void lcdcls(void) //图形方式下清屏
; {
	.dbline 110
;    unsigned char i,j;
;    for(i=0;i<32;i++)
	clr R20
	xjmp L59
L56:
	.dbline 111
;    { 
	.dbline 112
;        {write(0,0x80+i);delaynms(10);write(0,0x80);}
	.dbline 112
	mov R18,R20
	subi R18,128    ; addi 128
	clr R16
	xcall _write
	.dbline 112
	ldi R16,10
	ldi R17,0
	xcall _delaynms
	.dbline 112
	ldi R18,128
	clr R16
	xcall _write
	.dbline 112
	.dbline 113
	clr R22
	xjmp L63
L60:
	.dbline 113
	.dbline 113
	clr R18
	ldi R16,1
	xcall _write
	.dbline 113
	ldi R16,10
	ldi R17,0
	xcall _delaynms
	.dbline 113
L61:
	.dbline 113
	inc R22
L63:
	.dbline 113
	cpi R22,16
	brlo L60
	.dbline 114
L57:
	.dbline 110
	inc R20
L59:
	.dbline 110
	cpi R20,32
	brlo L56
	.dbline 116
;        for(j=0;j<16;j++){ write(1,0x00);delaynms(10);}
;    }
;    
;    for(i=0;i<32;i++)
	clr R20
	xjmp L67
L64:
	.dbline 117
;    { 
	.dbline 118
;        {write(0,0x80+i);delaynms(10);write(0,0x88);}
	.dbline 118
	mov R18,R20
	subi R18,128    ; addi 128
	clr R16
	xcall _write
	.dbline 118
	ldi R16,10
	ldi R17,0
	xcall _delaynms
	.dbline 118
	ldi R18,136
	clr R16
	xcall _write
	.dbline 118
	.dbline 119
	clr R22
	xjmp L71
L68:
	.dbline 119
	.dbline 119
	clr R18
	ldi R16,1
	xcall _write
	.dbline 119
	ldi R16,10
	ldi R17,0
	xcall _delaynms
	.dbline 119
L69:
	.dbline 119
	inc R22
L71:
	.dbline 119
	cpi R22,16
	brlo L68
	.dbline 120
L65:
	.dbline 116
	inc R20
L67:
	.dbline 116
	cpi R20,32
	brlo L64
	.dbline -2
L55:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r j 22 c
	.dbend
	.dbfunc e main _main fV
;              i -> R20
	.even
_main::
	.dbline -1
	.dbline 124
;        for(j=0;j<16;j++) {write(1,0x00);delaynms(10);}
;    }
; }
; 
; void main()
; {
	.dbline 126
;  unsigned char i;
;  delaynms(1000);
	ldi R16,1000
	ldi R17,3
	xcall _delaynms
	.dbline 127
;  portini();
	xcall _portini
	.dbline 128
;  lcdinit();
	xcall _lcdinit
	.dbline 129
;  LCD_ON;
	cbi 0x12,7
	xjmp L74
L73:
	.dbline 131
;  while(1)
;  { 
	.dbline 132
;   lcdtest();
	xcall _lcdtest
	.dbline 133
;   lcdcls();
	xcall _lcdcls
	.dbline 134
	ldi R18,128
	clr R16
	xcall _write
	.dbline 134
	clr R20
	xjmp L79
L76:
	.dbline 134
	ldi R24,<_ma
	ldi R25,>_ma
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R18,z+0
	ldi R16,1
	xcall _write
L77:
	.dbline 134
	inc R20
L79:
	.dbline 134
;   write(0,0x80); for(i=0;i<16;i++)  write(1,ma[i]);
	cpi R20,16
	brlo L76
	.dbline 135
;   delaynms(10);
	ldi R16,10
	ldi R17,0
	xcall _delaynms
	.dbline 136
	ldi R18,144
	clr R16
	xcall _write
	.dbline 136
	clr R20
	xjmp L83
L80:
	.dbline 136
	ldi R24,<_ma2
	ldi R25,>_ma2
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	lpm R18,Z
	ldi R16,1
	xcall _write
L81:
	.dbline 136
	inc R20
L83:
	.dbline 136
;   write(0,0x90); for(i=0;i<16;i++)  write(1,ma2[i]);
	cpi R20,16
	brlo L80
	.dbline 137
;   delaynms(10);
	ldi R16,10
	ldi R17,0
	xcall _delaynms
	.dbline 138
	ldi R18,136
	clr R16
	xcall _write
	.dbline 138
	clr R20
	xjmp L87
L84:
	.dbline 138
	ldi R24,<_ma3
	ldi R25,>_ma3
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	lpm R18,Z
	ldi R16,1
	xcall _write
L85:
	.dbline 138
	inc R20
L87:
	.dbline 138
;   write(0,0x88); for(i=0;i<16;i++)  write(1,ma3[i]);
	cpi R20,16
	brlo L84
	.dbline 139
;   delaynms(10);
	ldi R16,10
	ldi R17,0
	xcall _delaynms
	.dbline 140
	ldi R18,152
	clr R16
	xcall _write
	.dbline 140
	clr R20
	xjmp L91
L88:
	.dbline 140
	ldi R24,<_ma4
	ldi R25,>_ma4
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	lpm R18,Z
	ldi R16,1
	xcall _write
L89:
	.dbline 140
	inc R20
L91:
	.dbline 140
	cpi R20,16
	brlo L88
	.dbline 141
	ldi R16,10
	ldi R17,0
	xcall _delaynms
	.dbline 142
	ldi R18,54
	clr R16
	xcall _write
	.dbline 143
L74:
	.dbline 130
	xjmp L73
X0:
	.dbline -2
L72:
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbend

⌨️ 快捷键说明

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