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

📄 no2.s

📁 12864LCD液晶仿真
💻 S
📖 第 1 页 / 共 3 页
字号:
; #define RIGHT 1
; #define CMD 0
; #define DATA 1
; #define LCD_STATUS_BUSY 0x80
; #define  START_LINE0   0xc0
; #define  DISPLAY_ON    0x3f
; #define  DISPLAY_OFF   0x3e
; #define  PARA1         0x40
; /*-----------------------------------------------------------------------
; 延时函数
; 系统时钟:8M
; -----------------------------------------------------------------------*/
; 
; uchar  time_logo[5][32] = {
; /*--  文字:  时  --*/
; /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
; 0x00,0xFC,0x44,0x44,0x44,0xFC,0x10,0x90,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x00,
; 0x00,0x07,0x04,0x04,0x04,0x07,0x00,0x00,0x03,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,
; 
; /*--  文字:  爱 --*/
; /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
; 0x40,0xB0,0x92,0x96,0x9A,0x92,0xF2,0x9E,0x92,0x91,0x99,0x95,0x91,0x50,0x30,0x00,
; 0x00,0x00,0x40,0x30,0x8C,0x83,0x46,0x2A,0x12,0x2A,0x26,0x42,0xC0,0x40,0x00,0x00,
; 
; /*--  文字:  你 --*/
; /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
; 0x40,0x20,0xF8,0x07,0x40,0x20,0x18,0x0F,0x08,0xC8,0x08,0x08,0x28,0x18,0x00,0x00,
; 0x00,0x00,0xFF,0x00,0x00,0x08,0x04,0x43,0x80,0x7F,0x00,0x01,0x06,0x0C,0x00,0x00,
; /*--  文字:  我  --*/
; /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
; 0x20,0x24,0x24,0x24,0xfe,0x23,0x22,0x20,0xFF,0x20,0x22,0xac,0x20,0x30,0x20,0x00,
; 0x00,0x08,0x48,0x84,0x7F,0x02,0x21,0x10,0x09,0x06,0x1A,0x61,0x80,0xE0,0x00,0x00,
; 
; };
; 
; uchar  menu[5][32] = {
; /*--  文字: 一 --*/
; /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
; 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xc0,0x80,0x00,
; 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
; /*--  文字: 二 --*/
; /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
; 0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x008,0x0c,0x08,0x00,0x00,0x00,
; 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,
; /*--  文字: 三 --*/
; /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
; 0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x084,0xc4,0x86,0x04,0x00,0x00,
; 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x30,0x20,0x00,
; /*--  文字: 四 --*/
; /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
; 0x00,0xfc,0x04,0x04,0x04,0xfc,0x04,0x04,0x04,0xfc,0x004,0x04,0x04,0xfe,0x04,0x00,
; 0x00,0x7f,0x20,0x28,0x24,0x23,0x20,0x20,0x20,0x21,0x20,0x22,0x22,0x7f,0x00,0x00,
; 
; };
; 
;  
;  void delay_1us(void);                 //1us延时函数
;  void delay_nus(unsigned int n);       //N us延时函数
;  void delay_1ms(void) ;                //1ms延时函数
;  void delay_nms(unsigned int n) ;      //N ms延时函数
;  
;  /***********************************************************************/
;  /**********************************************************************/
; void delay_1us(void)                 //1us延时函数
;   {
	.dbline 72
;    asm("nop");
	nop
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e delay_nus _delay_nus fV
;              i -> R10,R11
;              n -> R12,R13
	.even
_delay_nus::
	xcall push_xgset003C
	movw R12,R16
	.dbline -1
	.dbline 76
;   }
; 
; void delay_nus(unsigned int n)       //N us延时函数
;   {
	.dbline 77
;    unsigned int i=0;
	clr R10
	clr R11
	.dbline 78
;    for (i=0;i<n;i++)
	xjmp L6
L3:
	.dbline 79
;    delay_1us();
	xcall _delay_1us
L4:
	.dbline 78
	movw R24,R10
	adiw R24,1
	movw R10,R24
L6:
	.dbline 78
	cp R10,R12
	cpc R11,R13
	brlo L3
X0:
	.dbline -2
L2:
	.dbline 0 ; func end
	xjmp pop_xgset003C
	.dbsym r i 10 i
	.dbsym r n 12 i
	.dbend
	.dbfunc e delay_1ms _delay_1ms fV
;              i -> R16,R17
	.even
_delay_1ms::
	.dbline -1
	.dbline 83
;   }
;   
; void delay_1ms(void)                 //1ms延时函数
;   {
	.dbline 85
;    unsigned int i;
;    for (i=0;i<1140;i++);
	clr R16
	clr R17
	xjmp L11
L8:
	.dbline 85
L9:
	.dbline 85
	subi R16,255  ; offset = 1
	sbci R17,255
L11:
	.dbline 85
	cpi R16,116
	ldi R30,4
	cpc R17,R30
	brlo L8
X1:
	.dbline -2
L7:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 i
	.dbend
	.dbfunc e delay_nms _delay_nms fV
;              i -> R10,R11
;              n -> R12,R13
	.even
_delay_nms::
	xcall push_xgset003C
	movw R12,R16
	.dbline -1
	.dbline 89
;   }
;   
; void delay_nms(unsigned int n)       //N ms延时函数
;   {
	.dbline 90
;    unsigned int i=0;
	clr R10
	clr R11
	.dbline 91
;    for (i=0;i<n;i++)
	xjmp L16
L13:
	.dbline 92
;    {
	.dbline 93
;       delay_1ms();
	xcall _delay_1ms
	.dbline 94
;    }   
L14:
	.dbline 91
	movw R24,R10
	adiw R24,1
	movw R10,R24
L16:
	.dbline 91
	cp R10,R12
	cpc R11,R13
	brlo L13
X2:
	.dbline -2
L12:
	.dbline 0 ; func end
	xjmp pop_xgset003C
	.dbsym r i 10 i
	.dbsym r n 12 i
	.dbend
	.dbfunc e delay _delay fV
;              i -> R10,R11
;              j -> R12,R13
;             ms -> R16,R17
	.even
_delay::
	xcall push_xgset003C
	.dbline -1
	.dbline 98
;   }
;   
;   void delay(uint ms)
; {
	.dbline 100
;         uint i,j;
; 	for(i=0;i<ms;i++)
	clr R10
	clr R11
	xjmp L21
L18:
	.dbline 101
; 	   {
	.dbline 102
; 	   for(j=0;j<1141;j++);
	clr R12
	clr R13
	xjmp L25
L22:
	.dbline 102
L23:
	.dbline 102
	movw R24,R12
	adiw R24,1
	movw R12,R24
L25:
	.dbline 102
	movw R24,R12
	cpi R24,117
	ldi R30,4
	cpc R25,R30
	brlo L22
X3:
	.dbline 103
;        }
L19:
	.dbline 100
	movw R24,R10
	adiw R24,1
	movw R10,R24
L21:
	.dbline 100
	cp R10,R16
	cpc R11,R17
	brlo L18
X4:
	.dbline -2
L17:
	.dbline 0 ; func end
	xjmp pop_xgset003C
	.dbsym r i 10 i
	.dbsym r j 12 i
	.dbsym r ms 16 i
	.dbend
	.dbfunc e Lcd_Write_Byte _Lcd_Write_Byte fV
;           temp -> R16
	.even
_Lcd_Write_Byte::
	.dbline -1
	.dbline 106
; }
; void Lcd_Write_Byte(uchar temp)
; {   
	.dbline 107
;     PORTB|=BIT(0);
	sbi 0x18,0
	.dbline 108
;     PORTB&=~BIT(1);    //W
	cbi 0x18,1
	.dbline 109
;     PORTB|=BIT(4); //E使能
	sbi 0x18,4
	.dbline 110
;     DDRA=0xff; //a输出
	ldi R24,255
	out 0x1a,R24
	.dbline 111
;     PORTA=temp;
	out 0x1b,R16
	.dbline 112
;     asm("nop");
	nop
	.dbline 113
;     asm("nop");
	nop
	.dbline 114
;     asm("nop");
	nop
	.dbline 115
;     asm("nop");
	nop
	.dbline 116
;     PORTB&=~BIT(4);	 
	cbi 0x18,4
	.dbline 117
;     PORTA=0xff;
	out 0x1b,R24
	.dbline -2
L26:
	.dbline 0 ; func end
	ret
	.dbsym r temp 16 c
	.dbend
	.dbfunc e Lcd_Write_COM _Lcd_Write_COM fV
;            COL -> R16
	.even
_Lcd_Write_COM::
	.dbline -1
	.dbline 120
; }
; void Lcd_Write_COM(uchar COL)
; {   
	.dbline 121
;     PORTB&=~BIT(0);
	cbi 0x18,0
	.dbline 122
;     PORTB&=~BIT(1);    //W
	cbi 0x18,1
	.dbline 123
;     PORTB|=BIT(4); //E使能
	sbi 0x18,4
	.dbline 124
;     DDRA=0xff; //a输出
	ldi R24,255
	out 0x1a,R24
	.dbline 125
;     PORTA=COL;
	out 0x1b,R16
	.dbline 126
;     asm("nop");
	nop
	.dbline 127
;     asm("nop");
	nop
	.dbline 128
;     asm("nop");
	nop
	.dbline 129
;     asm("nop");
	nop
	.dbline 130
;     PORTB&=~BIT(4);	 
	cbi 0x18,4
	.dbline -2
L27:
	.dbline 0 ; func end
	ret
	.dbsym r COL 16 c
	.dbend
	.dbfunc e set_page_L _set_page_L fV
;           page -> R10
	.even
_set_page_L::
	st -y,R10
	mov R10,R16
	.dbline -1
	.dbline 136
;  
; }
; 
; 
; void set_page_L(unsigned char page)	/*设置X地址 设置页*/  //0-7
; {
	.dbline 137
;    Lcd_Write_COM(0xb8|page);                     
	mov R16,R10
	ori R16,184
	xcall _Lcd_Write_COM
	.dbline -2
L28:
	.dbline 0 ; func end
	ld R10,y+
	ret
	.dbsym r page 10 c
	.dbend
	.dbfunc e set_page_R _set_page_R fV
;           page -> R10
	.even
_set_page_R::
	st -y,R10
	mov R10,R16
	.dbline -1
	.dbline 140
; }
; void set_page_R(unsigned char page)	/*设置X地址 设置页*/ //0-7
; {
	.dbline 141
;     Lcd_Write_COM(0xb8|page);                     
	mov R16,R10
	ori R16,184
	xcall _Lcd_Write_COM
	.dbline -2
L29:
	.dbline 0 ; func end
	ld R10,y+
	ret
	.dbsym r page 10 c
	.dbend
	.dbfunc e set_col_addr_L _set_col_addr_L fV
;            col -> R10
	.even
_set_col_addr_L::
	st -y,R10
	mov R10,R16
	.dbline -1
	.dbline 145
; }
; 
; void set_col_addr_L(unsigned char col) /*设置Y地址*/ //0-63
; {
	.dbline 147
;      
;    Lcd_Write_COM(0x40|col);                     
	mov R16,R10
	ori R16,64
	xcall _Lcd_Write_COM
	.dbline -2
L30:
	.dbline 0 ; func end
	ld R10,y+
	ret
	.dbsym r col 10 c
	.dbend
	.dbfunc e set_col_addr_R _set_col_addr_R fV
;            col -> R10
	.even
_set_col_addr_R::
	st -y,R10
	mov R10,R16
	.dbline -1
	.dbline 151
; }
; 
; void set_col_addr_R(unsigned char col) /*设置Y地址*/ //0-63
; {
	.dbline 152
;     Lcd_Write_COM(0x40|col);                        
	mov R16,R10
	ori R16,64
	xcall _Lcd_Write_COM
	.dbline -2
L31:
	.dbline 0 ; func end
	ld R10,y+
	ret
	.dbsym r col 10 c
	.dbend
	.dbfunc e Lcd_Set_X_Y _Lcd_Set_X_Y fV
;              y -> R12
;              x -> R10
	.even
_Lcd_Set_X_Y::
	st -y,R10
	st -y,R12
	mov R12,R18
	mov R10,R16
	.dbline -1
	.dbline 163
; }
; 
; 
; /********************************************************************************************
; * 函数名称:Lcd_Set_X_Y(uchar x, uchar y )
; * 功    能:LCD设置x y坐标
; * 入口参数:x y
; * 出口参数:无
; *********************************************************************************************/
; void Lcd_Set_X_Y(uchar x, uchar y)
; {   
	.dbline 164
;    if(y<64)
	mov R24,R12
	cpi R24,64
	brsh L33
X5:
	.dbline 165
;       {   PORTB&=~BIT(3);
	.dbline 165
	cbi 0x18,3
	.dbline 166
; 	      PORTB|=BIT(2);
	sbi 0x18,2
	.dbline 168
; 	   
; 		set_col_addr_L(y);
	mov R16,R24
	xcall _set_col_addr_L
	.dbline 169
; 	  }
	xjmp L34
L33:
	.dbline 171
;    else
;       {   
	.dbline 172
; 		   PORTB|=BIT(3);
	sbi 0x18,3
	.dbline 173
; 	    PORTB&=~BIT(2);
	cbi 0x18,2
	.dbline 174
; 		set_col_addr_R(y);
	mov R16,R12
	xcall _set_col_addr_R
	.dbline 175
; 	  }
L34:
	.dbline 176
;    set_page_L( x);
	mov R16,R10
	xcall _set_page_L
	.dbline 177
;    set_page_R( x);
	mov R16,R10
	xcall _set_page_R
	.dbline -2
L32:
	.dbline 0 ; func end
	ld R12,y+
	ld R10,y+
	ret
	.dbsym r y 12 c
	.dbsym r x 10 c
	.dbend
	.dbfunc e Lcd_Character_16X16 _Lcd_Character_16X16 fV
;           temp -> y+0
;              i -> R10
;              j -> R12
;          point -> y+11
;              y -> R14
;              x -> y+7
;       bit_flag -> R10
	.even
_Lcd_Character_16X16::
	st -y,r19
	st -y,r18
	xcall push_xgset00FC
	mov R10,R16
	sbiw R28,1
	ldd R14,y+9
	.dbline -1
	.dbline 188
; }
; 
; /****************************************************************************
; * 名称:Lcd_Character_16X16( bit bit_flag, uchar x, uchar y, uchar code *point )
; * 功能:显示16*16字符(汉字)       
; * 入口参数:x y data
; * 出口参数:无
; *说明:bit_flag = 1 正常显示 bit_flag = 0 黑白反相显示
; ****************************************************************************/
; void Lcd_Character_16X16( uchar bit_flag, uchar x, uchar y, uchar  *point )
; {
	.dbline 190
;    uchar i,j,temp ;
;    temp=y;
	std y+0,R14
	.dbline 191
;    if( bit_flag )
	tst R10
	breq L36
X6:
	.dbline 192
;    {
	.dbline 193
;       for( i=0; i<2; i++ )
	clr R10
	xjmp L41
L38:
	.dbline 194
;       {
	.dbline 195
;          x+=i;
	ldd R0,y+7
	add R0,R10
	std y+7,R0
	.dbline 196
; 	     y=temp;
	ldd R14,y+0
	.dbline 197
;          for( j=0;j<16;j++ )
	clr R12
	xjmp L45
L42:
	.dbline 198
;          {
	.dbline 199
;             Lcd_Set_X_Y( x, y ); y++;
	mov R18,R14
	ldd R16,y+7
	xcall _Lcd_Set_X_Y
	.dbline 199
	inc R14
	.dbline 200
;             Lcd_Write_Byte( point[ i*16 + j] );  
	ldi R24,16
	mul R24,R10
	movw R30,R0
	mov R2,R12
	clr R3
	add R30,R2
	adc R31,R3
	ldd R0,y+11
	ldd R1,y+12
	add R30,R0
	adc R31,R1
	ldd R16,z+0
	xcall _Lcd_Write_Byte
	.dbline 201
;          } 
L43:
	.dbline 197
	inc R12
L45:
	.dbline 197
	mov R24,R12
	cpi R24,16
	brlo L42
X7:
	.dbline 202
;       }
L39:
	.dbline 193
	inc R10
L41:
	.dbline 193
	mov R24,R10
	cpi R24,2
	brlo L38
X8:
	.dbline 203
;    }
	xjmp L37
L36:
	.dbline 205
;    else
;    {
	.dbline 206
;       for( i =0; i<2; i++ )
	clr R10
	xjmp L49
L46:
	.dbline 207
;       {
	.dbline 208
;          x+=i;
	ldd R0,y+7
	add R0,R10
	std y+7,R0
	.dbline 209
;          y=temp;
	ldd R14,y+0
	.dbline 210
;          for( j = 0; j < 16; j++ )
	clr R12
	xjmp L53
L50:
	.dbline 211
;          {
	.dbline 212
;             Lcd_Set_X_Y( x, y );
	mov R18,R14
	ldd R16,y+7
	xcall _Lcd_Set_X_Y
	.dbline 213
; 			y++;
	inc R14
	.dbline 214
;             Lcd_Write_Byte( ~ point[ i * 16 + j ] );
	ldi R24,16
	mul R24,R10
	movw R30,R0
	mov R2,R12

⌨️ 快捷键说明

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