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

📄 serial_lcd.s

📁 一个有关st7920控制器的测试程序和驱动程序的12864LCD的例程
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module serial_lcd.c
	.area text(rom, con, rel)
	.dbfile D:\avrvi\AVRVi_m128_Starter_Kit\ST7920\source\lib\serial_lcd.c
	.dbfunc e delay_lcd _delay_lcd fV
;              j -> R16
;              i -> R18
	.even
_delay_lcd::
	.dbline -1
	.dbline 21
; /************************************************
; 文件:serial_lcd.c
; 用途:ST7920驱动程序
; 注意:
; 创建:2008.1.26
; 修改:2008.1.26
; Copy Right  (c)  www.avrvi.com  AVR与虚拟仪器
; ************************************************/
; #include "..\config.h"
; 
; /******************************************************************
; ** 函数名称: void delay_lcd(void)
; ** 功能描述: lcd初始化后的延时
; ** 输 入: 无
; ** 全局变量: 无
; ** 调用模块: 无
; ** 说明:
; ** 注意:
; *******************************************************************/
; void delay_lcd(void)
; {
	.dbline 22
;  unsigned char i=200;
	ldi R18,200
	.dbline 23
;  unsigned char j=0;
	clr R16
	.dbline 24
;  for(j=0;j<6;j++)
	xjmp L5
X0:
	.dbline 25
;  {
L6:
	.dbline 26
L7:
	.dbline 26
	mov R2,R18
	clr R3
	subi R18,1
	tst R2
	brne L6
	.dbline 27
L3:
	.dbline 24
	inc R16
L5:
	.dbline 24
	cpi R16,6
	brlo L7
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbsym r j 16 c
	.dbsym r i 18 c
	.dbend
	.dbfunc e wr_lcd _wr_lcd fV
;              j -> R20
;              k -> R22
;              i -> R10
;           flag -> R18
;           data -> R16
	.even
_wr_lcd::
	xcall push_gset3
	.dbline -1
	.dbline 42
;    while(i--);
;  }
; }
; 
; 
; /******************************************************************
; ** 函数名称: void wr_lcd(unsigned char data,unsigned char flag)
; ** 功能描述: 向lcd写入1B的数据或者命令
; ** 输 入: unsigned char data,unsigned char flag   data为要写入的数据或者命令,flag=1为命令传送,flag=0为数据传送
; ** 全局变量: 无
; ** 调用模块: 无
; ** 说明:首先要传送5个bit的1,起始位,flag=1为命令传送,5个bit的1起始位后面接着为000
;                                       flag=0为数据传送,5个bit的1起始位后面接着为010
; ** 注意:
; *******************************************************************/
; void wr_lcd(unsigned char data,unsigned char flag)
; {
	.dbline 45
;  unsigned char i,j,k;
;  
;  CLR_LCD_SCLK;  //clock清零
	cbi 0x15,2
	.dbline 46
;  SET_LCD_STD;   //data置1
	sbi 0x15,1
	.dbline 48
;  
;  for(i=0;i<5;i++) //首先要传送5个bit的1,起始位
	clr R10
	xjmp L13
L10:
	.dbline 49
	.dbline 50
	sbi 0x15,2
	.dbline 51
	cbi 0x15,2
	.dbline 52
L11:
	.dbline 48
	inc R10
L13:
	.dbline 48
	mov R24,R10
	cpi R24,5
	brlo L10
	.dbline 54
;  {
;   SET_LCD_SCLK;
;   CLR_LCD_SCLK;
;  }
;  
;  if(flag)  //flag=1为命令传送,5个bit的1起始位后面接着为000
	tst R18
	breq L14
	.dbline 55
;  {
	.dbline 56
;   CLR_LCD_STD; //清零数据线,传送3个bit的0
	cbi 0x15,1
	.dbline 57
;   for(i=0;i<3;i++)
	clr R10
	xjmp L19
L16:
	.dbline 58
	.dbline 59
	sbi 0x15,2
	.dbline 60
	cbi 0x15,2
	.dbline 61
L17:
	.dbline 57
	inc R10
L19:
	.dbline 57
	mov R24,R10
	cpi R24,3
	brlo L16
	.dbline 62
;   {
;    SET_LCD_SCLK;
;    CLR_LCD_SCLK;
;   }
;  }
	xjmp L15
L14:
	.dbline 65
;  
;  else  //flag=0为数据传送,5个bit的1起始位后面接着为010
;  {
	.dbline 66
;   CLR_LCD_STD; //传送一位0
	cbi 0x15,1
	.dbline 67
;   SET_LCD_SCLK;
	sbi 0x15,2
	.dbline 68
;   CLR_LCD_SCLK;
	cbi 0x15,2
	.dbline 70
;   
;   SET_LCD_STD; //传送一位1
	sbi 0x15,1
	.dbline 71
;   SET_LCD_SCLK;
	sbi 0x15,2
	.dbline 72
;   CLR_LCD_SCLK;
	cbi 0x15,2
	.dbline 74
;   
;   CLR_LCD_STD; //传送一位0
	cbi 0x15,1
	.dbline 75
;   SET_LCD_SCLK;
	sbi 0x15,2
	.dbline 76
;   CLR_LCD_SCLK;
	cbi 0x15,2
	.dbline 77
;  }
L15:
	.dbline 79
;  
;  k=0x80; //后面传送信息的时候用来取得特定的位
	ldi R22,128
	.dbline 81
;  
;  for(j=0;j<2;j++)//每一个八位的指令将被分为两个字节接收到:
	clr R20
	xjmp L23
L20:
	.dbline 85
;                  //较高4位的指令资料将会被放在第一个字节的MSB部分
; 				 //而较低4位(DB3~DB0)的指令资料则会被放在第二个字节的MSB部分
; 				 //至于相关的另四位则都为0。
;  {
	.dbline 86
;    for(i=0;i<4;i++)
	clr R10
	xjmp L27
L24:
	.dbline 87
;    {   	
	.dbline 88
; 	if(data&k) //如果相应的位为高
	mov R2,R16
	and R2,R22
	breq L28
	.dbline 89
; 	{
	.dbline 90
; 	  SET_LCD_STD; //传送一位1
	sbi 0x15,1
	.dbline 91
; 	}
	xjmp L29
L28:
	.dbline 93
; 	else       //如果相应的位为低
; 	{
	.dbline 94
; 	  CLR_LCD_STD; //传送一位0
	cbi 0x15,1
	.dbline 95
; 	}
L29:
	.dbline 96
	lsr R22
	.dbline 97
	sbi 0x15,2
	.dbline 98
	cbi 0x15,2
	.dbline 99
L25:
	.dbline 86
	inc R10
L27:
	.dbline 86
	mov R24,R10
	cpi R24,4
	brlo L24
	.dbline 101
; 	k>>=1;
;     SET_LCD_SCLK;
;     CLR_LCD_SCLK;
;    }
;    
;    CLR_LCD_STD; //传送4位0
	cbi 0x15,1
	.dbline 103
;    
;    for(i=0;i<4;i++)
	clr R10
	xjmp L33
L30:
	.dbline 104
	.dbline 105
	sbi 0x15,2
	.dbline 106
	cbi 0x15,2
	.dbline 107
L31:
	.dbline 103
	inc R10
L33:
	.dbline 103
	mov R24,R10
	cpi R24,4
	brlo L30
	.dbline 108
L21:
	.dbline 81
	inc R20
L23:
	.dbline 81
	cpi R20,2
	brlo L20
	.dbline 110
;    {
;    	SET_LCD_SCLK;
;     CLR_LCD_SCLK;
;    }
;  }
;  //CLR_LCD_SCLK;
;  CLR_LCD_STD;
	cbi 0x15,1
	.dbline -2
L9:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r j 20 c
	.dbsym r k 22 c
	.dbsym r i 10 c
	.dbsym r flag 18 c
	.dbsym r data 16 c
	.dbend
	.dbfunc e initial_lcd _initial_lcd fV
	.even
_initial_lcd::
	.dbline -1
	.dbline 124
; }
; 
; 
; /******************************************************************
; ** 函数名称: void initial_lcd(void)
; ** 功能描述: lcd初始化
; ** 输 入: 无
; ** 全局变量: 无
; ** 调用模块: wr_lcd();
; ** 说明:
; ** 注意:
; *******************************************************************/
; void initial_lcd(void)
; {
	.dbline 125
;   LCD_DDR |= (1<<LCD_STD)|(1<<LCD_SCLK);
	in R24,0x14
	ori R24,6
	out 0x14,R24
	.dbline 126
;   wr_lcd(Lcd_Set_Function_Basic,1);     	//指令集设定
	ldi R18,1
	ldi R16,48
	xcall _wr_lcd
	.dbline 127
;   wr_lcd(Lcd_Set_Entrance_Point+2,1);    	//光标右移
	ldi R18,1
	ldi R16,6
	xcall _wr_lcd
	.dbline 128
;   wr_lcd(Lcd_Display_Status+4,1);	   		//整屏显示
	ldi R18,1
	ldi R16,12
	xcall _wr_lcd
	.dbline 129
;   wr_lcd(Lcd_Clear,1);     		    		//clear the screen
	ldi R18,1
	ldi R16,1
	xcall _wr_lcd
	.dbline 131
;   
;   delay_lcd();
	xcall _delay_lcd
	.dbline -2
L34:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e Lcd_drawbmp _Lcd_drawbmp fV
;              i -> R20
;              j -> R22
;            bmp -> R10,R11
	.even
_Lcd_drawbmp::
	xcall push_gset3
	movw R10,R16
	.dbline -1
	.dbline 150
; }
; 
; 
; /*********************************************************************************************************
; ** 函数名称: Lcd_drawbmp(unsigned char col,unsigned char row,unsigned char col1,unsigned char row1,const unsigned char *bmp)
; ** 功能描述: 绘制bmp图片
; ** 输 入: col 起始行  col1 图片行数
; ** 		   row 起始列  row1 图片列数
; **         *bmp:图片字型码指针
; ** 输 出: 
; **         
; ** 全局变量: 无
; ** 调用模块: wr_lcd();
; ** 说明:
; ** 注意:
; ********************************************************************************************************/
; 
; void Lcd_drawbmp(const unsigned char *bmp)
; {
	.dbline 152
;  	 unsigned char i,j;
; 	 Lcd_clrbmp();
	xcall _Lcd_clrbmp
	.dbline 153
; 	 wr_lcd(Lcd_Set_Function_Basic+2,1);
	ldi R18,1
	ldi R16,50
	xcall _wr_lcd
	.dbline 154
; 	 wr_lcd(Lcd_Set_Function_Extend,1);
	ldi R18,1
	ldi R16,52
	xcall _wr_lcd
	.dbline 155
; 	 for(i=0;i<32;i++)
	clr R20
	xjmp L39
L36:
	.dbline 156
; 	 {
	.dbline 157
;         for(j=0;j<8;j++)
	clr R22
	xjmp L43
L40:
	.dbline 158
	.dbline 159
	ldi R18,1
	ldi R16,50
	xcall _wr_lcd
	.dbline 160
	ldi R18,1
	ldi R16,54
	xcall _wr_lcd
	.dbline 162
	ldi R18,1
	mov R16,R20
	subi R16,128    ; addi 128
	xcall _wr_lcd
	.dbline 163
	ldi R18,1
	mov R16,R22
	subi R16,128    ; addi 128
	xcall _wr_lcd
	.dbline 165
	ldi R18,1
	ldi R16,50
	xcall _wr_lcd
	.dbline 166
	clr R18
	movw R2,R10
	movw R24,R2
	adiw R24,1
	movw R10,R24
	movw R30,R2
	lpm R16,Z
	xcall _wr_lcd
	.dbline 167
	clr R18
	movw R2,R10
	movw R24,R2
	adiw R24,1
	movw R10,R24
	movw R30,R2
	lpm R16,Z
	xcall _wr_lcd
	.dbline 168
L41:
	.dbline 157
	inc R22
L43:
	.dbline 157
	cpi R22,8
	brlo L40
	.dbline 169
L37:
	.dbline 155
	inc R20
L39:
	.dbline 155
	cpi R20,32
	brsh X1
	xjmp L36
X1:
	.dbline 170
; 		{
; 		   wr_lcd(Lcd_Set_Function_Basic+2,1);
; 	       wr_lcd(Lcd_Set_Function_Extend+2,1);
; 		   
; 		   wr_lcd(0x80+i,1);
; 		   wr_lcd(0x80+j,1);
; 		   
; 		   wr_lcd(Lcd_Set_Function_Basic+2,1);
; 		   wr_lcd(*bmp++,0);
; 		   wr_lcd(*bmp++,0);
; 		}
; 	 }
; 	 for(i=0;i<32;i++)
	clr R20
	xjmp L47
L44:
	.dbline 171
; 	 {
	.dbline 172
;         for(j=8;j<16;j++)
	ldi R22,8
	xjmp L51
L48:
	.dbline 173
	.dbline 174
	ldi R18,1
	ldi R16,50
	xcall _wr_lcd
	.dbline 175
	ldi R18,1
	ldi R16,54
	xcall _wr_lcd
	.dbline 177
	ldi R18,1
	mov R16,R20
	subi R16,128    ; addi 128
	xcall _wr_lcd
	.dbline 178
	ldi R18,1
	mov R16,R22
	subi R16,128    ; addi 128
	xcall _wr_lcd
	.dbline 180
	ldi R18,1
	ldi R16,50
	xcall _wr_lcd
	.dbline 181
	clr R18
	movw R2,R10
	movw R24,R2
	adiw R24,1
	movw R10,R24
	movw R30,R2
	lpm R16,Z
	xcall _wr_lcd
	.dbline 182
	clr R18
	movw R2,R10
	movw R24,R2
	adiw R24,1
	movw R10,R24
	movw R30,R2
	lpm R16,Z
	xcall _wr_lcd
	.dbline 183
L49:
	.dbline 172
	inc R22
L51:
	.dbline 172
	cpi R22,16
	brlo L48
	.dbline 184
L45:
	.dbline 170
	inc R20
L47:
	.dbline 170
	cpi R20,32
	brsh X2
	xjmp L44
X2:
	.dbline 185
; 		{
; 		   wr_lcd(Lcd_Set_Function_Basic+2,1);
; 	       wr_lcd(Lcd_Set_Function_Extend+2,1);
; 		   
; 		   wr_lcd(0x80+i,1);
; 		   wr_lcd(0x80+j,1);
; 		   
; 		   wr_lcd(Lcd_Set_Function_Basic+2,1);
; 		   wr_lcd(*bmp++,0);
; 		   wr_lcd(*bmp++,0);
; 		}
; 	 }

⌨️ 快捷键说明

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