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

📄 ylf240128a-3.s

📁 自己编制的北京友力发公司的液晶显示模块驱动程序
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module YLF240128A-3.c
	.area lit(rom, con, rel)
_EXTCG::
	.byte 1,1
	.byte 255,1
	.byte 63,33
	.byte 63,33
	.byte 0,0
	.byte 255,0
	.byte 252,4
	.byte 252,4
	.byte 33,63
	.byte 5,13
	.byte 25,49
	.byte 225,1
	.byte 4,252
	.byte 64,96
	.byte 48,28
	.byte 7,0
	.byte 8,8
	.byte 255,8
	.byte 9,1
	.byte 1,127
	.byte 16,16
	.byte 255,16
	.byte 16,0
	.byte 0,252
	.byte 0,0
	.byte 0,1
	.byte 7,60
	.byte 231,0
	.byte 24,48
	.byte 96,192
	.byte 0,0
	.byte 224,63
	.dbfile D:\单片机编程\iccavr\YLF240128A\YLF240128A-3.c
	.dbsym e EXTCG _EXTCG A[64:64]kc
_TXPRT::
	.byte 52,0
	.byte 47,0
	.byte 51,0
	.byte 40,0
	.byte 41,0
	.byte 34,0
	.byte 33
	.dbsym e TXPRT _TXPRT A[13:13]kc
_EXPRT1::
	.byte 128,129
	.byte 0,0
	.byte 132,133
	.dbsym e EXPRT1 _EXPRT1 A[6:6]kc
_EXPRT2::
	.byte 130,131
	.byte 0,0
	.byte 134,135
	.dbsym e EXPRT2 _EXPRT2 A[6:6]kc
	.area text(rom, con, rel)
	.dbfile D:\单片机编程\iccavr\YLF240128A\YLF240128A-3.c
	.dbfunc e readstate _readstate fc
;      lcd_state -> R16
	.even
_readstate::
	.dbline -1
	.dbline 61
; /*ATMega16 */
; /* T6963C LCD Controller */
; /*
; D0-D7     --  PORTB
; C/D       --  PORTA.1
; RD        --  PORTA.2
; WR        --  PORTA.3
; */
; /***********************************************************
; 内置T6963C液晶控制器驱动程序(间接方式)
; ***********************************************************/
; #include <iom16v.h>
; #include <macros.h>
; #define uchar unsigned char
; #define uint unsigned int 
; 
; //文字地址
; #define TXHOME 0x40
; 
; //文字区域
; #define TXAREA 0x41
; 
; //图形地址
; #define GRHOME 0x42
; 
; //图形区域
; #define GRAREA 0x43
; 
; //偏移****特别注意
; #define OFFSET 0x22
; 
; //设置指针
; #define ADPSET 0x24
; 
; //自动写打开
; #define AWRON  0xB0
; 
; //自动写关闭
; #define AWROFF 0xB2
; 
; //偏移地址量
; #define OFFSET 0x22
; 
; const uchar EXTCG[64]={0x01,0x01,0xff,0x01,0x3f,0x21,0x3f,0x21,//upper left dong 80H
;                          0x00,0x00,0xff,0x00,0xfc,0x04,0xfc,0x04,//upper right dong 81H
;                          0x21,0x3f,0x05,0x0d,0x19,0x31,0xe1,0x01,//lower left dong 82H
;                          0x04,0xfc,0x40,0x60,0x30,0x1c,0x07,0x00,//lower right dong 83
;                          0x08,0x08,0xff,0x08,0x09,0x01,0x01,0x7f,//upper left zhi 84H
;                          0x10,0x10,0xff,0x10,0x10,0x00,0x00,0xfc,//upper right zhi 85H
;                          0x00,0x00,0x00,0x01,0x07,0x3c,0xe7,0x00,//lower left zhi 86H
;                          0x18,0x30,0x60,0xc0,0x00,0x00,0xe0,0x3f};//lower right zhi 87H
;                          
; const uchar TXPRT[13]={0x34,0x00,0x2f,0x00,0x33,0x00,
;                        0x28,0x00,0x29,0x00,0x22,0x00,0x21};//TOSHIBA
;                        
; const uchar EXPRT1[6]={0x80,0x81,0x00,0x00,0x84,0x85};//东芝上半部分
; const uchar EXPRT2[6]={0x82,0x83,0x00,0x00,0x86,0x87};//东芝下半部分
; 
; //读取LCD状态字
; uchar readstate(void)
; {
	.dbline 63
;     uchar lcd_state;
;     DDRB=0x00;
	clr R2
	out 0x17,R2
	.dbline 64
;     DDRA|=(1<<1);
	sbi 0x1a,1
	.dbline 65
;     DDRA|=(1<<2);   // /RD
	sbi 0x1a,2
	.dbline 66
;     PORTA|=(1<<1); // C/D=1
	sbi 0x1b,1
	.dbline 67
;     PORTA&=~(1<<2); // /RD=0
	cbi 0x1b,2
	.dbline 68
;     lcd_state=PINB&0xff; // 读取引脚B物理电平
	in R16,0x16
	andi R16,255
	.dbline 69
;     NOP();
	nop
	.dbline 70
;     NOP();
	nop
	.dbline 71
;     PORTA|=(1<<2); // /RD=1
	sbi 0x1b,2
	.dbline 72
;     return lcd_state;
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbsym r lcd_state 16 c
	.dbend
	.dbfunc e st01 _st01 fV
	.even
_st01::
	.dbline -1
	.dbline 77
; }
; 
; //判断指令(数据)读写状态
; void st01(void)
; {
L3:
	.dbline 79
L4:
	.dbline 78
;     while((readstate()&0x03)!=3)
	xcall _readstate
	mov R24,R16
	andi R24,3
	cpi R24,3
	brne L3
	.dbline -2
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e st2 _st2 fV
	.even
_st2::
	.dbline -1
	.dbline 84
;         ;
; }
; 
; //判断数据自动读状态
; void st2(void)
; {
L7:
	.dbline 86
L8:
	.dbline 85
;     while((readstate()&0x04)!=4)
	xcall _readstate
	mov R24,R16
	andi R24,4
	cpi R24,4
	brne L7
	.dbline -2
L6:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e st3 _st3 fV
	.even
_st3::
	.dbline -1
	.dbline 91
;         ;
; }
; 
; //判断数据自动写状态
; void st3(void)
; {
L11:
	.dbline 93
L12:
	.dbline 92
;     while((readstate()&0x08)!=8)
	xcall _readstate
	mov R24,R16
	andi R24,8
	cpi R24,8
	brne L11
	.dbline -2
L10:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e writecode _writecode fV
;          comd0 -> R20
	.even
_writecode::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 98
;         ;
; }
; 
; //指令写入函数
; void writecode(uchar comd0)
; {
	.dbline 99
;     st01();
	xcall _st01
	.dbline 100
;     DDRA|=(1<<1);
	sbi 0x1a,1
	.dbline 101
;     PORTA|=(1<<1); // C/D=0,数据通道
	sbi 0x1b,1
	.dbline 102
;     DDRB=0xff; //B口方向为输出
	ldi R24,255
	out 0x17,R24
	.dbline 103
;     PORTB=comd0; //送数据到B口寄存器
	out 0x18,R20
	.dbline 104
;     DDRA|=(1<<3);
	sbi 0x1a,3
	.dbline 105
;     PORTA&=~(1<<3); // /WR=0
	cbi 0x1b,3
	.dbline 106
;     NOP();
	nop
	.dbline 107
;     PORTA|=(1<<3); // /WR=1
	sbi 0x1b,3
	.dbline -2
L14:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r comd0 20 c
	.dbend
	.dbfunc e writedata _writedata fV
;        onedata -> R20
	.even
_writedata::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 112
; }
; 
; //数据写入函数
; void writedata(uchar onedata)
; {
	.dbline 113
;     st01();
	xcall _st01
	.dbline 114
;     DDRA|=(1<<1);
	sbi 0x1a,1
	.dbline 115
;     PORTA&=~(1<<1); // C/D=0,数据通道
	cbi 0x1b,1
	.dbline 116
;     DDRB=0xff; //B口方向为输出
	ldi R24,255
	out 0x17,R24
	.dbline 117
;     PORTB=onedata; //送数据到B口寄存器
	out 0x18,R20
	.dbline 118
;     DDRA|=(1<<3);
	sbi 0x1a,3
	.dbline 119
;     PORTA&=~(1<<3); // /WR=0
	cbi 0x1b,3
	.dbline 120
;     NOP();
	nop
	.dbline 121
;     PORTA|=(1<<3); // /WR=1
	sbi 0x1b,3
	.dbline -2
L15:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r onedata 20 c
	.dbend
	.dbfunc e writeauto _writeauto fV
;        onedata -> R20
	.even
_writeauto::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 126
; }
; 
; //数据自动写入函数
; void writeauto(const uchar onedata)
; {
	.dbline 127
;     st3();
	xcall _st3
	.dbline 128
;     DDRA|=(1<<1);
	sbi 0x1a,1
	.dbline 129
;     PORTA&=~(1<<1); // C/D=0,数据通道
	cbi 0x1b,1
	.dbline 130
;     DDRB=0xff; //B口方向为输出
	ldi R24,255
	out 0x17,R24
	.dbline 131
;     PORTB=onedata; //送数据到B口寄存器
	out 0x18,R20
	.dbline 132
;     DDRA|=(1<<3);
	sbi 0x1a,3
	.dbline 133
;     PORTA&=~(1<<3); // /WR=0
	cbi 0x1b,3
	.dbline 134
;     NOP();
	nop
	.dbline 135
;     PORTA|=(1<<3); // /WR=1
	sbi 0x1b,3
	.dbline -2
L16:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r onedata 20 kc
	.dbend
	.dbfunc e oneparameter _oneparameter fV
;          comd1 -> R20
;          onep1 -> R22
	.even
_oneparameter::
	xcall push_gset2
	mov R20,R18
	mov R22,R16
	.dbline -1
	.dbline 140
; }
; 
; //一字节参数指令写入函数
; void oneparameter(uchar onep1,uchar comd1)
; {
	.dbline 141
;     writedata(onep1);
	mov R16,R22
	xcall _writedata
	.dbline 142
;     writecode(comd1);
	mov R16,R20
	xcall _writecode
	.dbline -2
L17:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r comd1 20 c
	.dbsym r onep1 22 c
	.dbend
	.dbfunc e twoparameter _twoparameter fV
;          comd2 -> y+4

⌨️ 快捷键说明

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