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

📄 st7920.lst

📁 一个有关st7920控制器的测试程序和驱动程序的12864LCD的例程
💻 LST
📖 第 1 页 / 共 3 页
字号:
(0079)  k=0x80; //后面传送信息的时候用来取得特定的位
    013B E860      LDI	R22,0x80
(0080)  
(0081)  for(j=0;j<2;j++)//每一个八位的指令将被分为两个字节接收到:
    013C 2744      CLR	R20
    013D C019      RJMP	0x0157
(0082)                  //较高4位的指令资料将会被放在第一个字节的MSB部分
(0083) 				 //而较低4位(DB3~DB0)的指令资料则会被放在第二个字节的MSB部分
(0084) 				 //至于相关的另四位则都为0。
(0085)  {
(0086)    for(i=0;i<4;i++)
    013E 24AA      CLR	R10
    013F C00A      RJMP	0x014A
(0087)    {   	
(0088) 	if(data&k) //如果相应的位为高
    0140 2E20      MOV	R2,R16
    0141 2226      AND	R2,R22
    0142 F011      BEQ	0x0145
(0089) 	{
(0090) 	  SET_LCD_STD; //传送一位1
    0143 9AA9      SBI	0x15,1
(0091) 	}
    0144 C001      RJMP	0x0146
(0092) 	else       //如果相应的位为低
(0093) 	{
(0094) 	  CLR_LCD_STD; //传送一位0
    0145 98A9      CBI	0x15,1
(0095) 	}
(0096) 	k>>=1;
    0146 9566      LSR	R22
(0097)     SET_LCD_SCLK;
    0147 9AAA      SBI	0x15,2
(0098)     CLR_LCD_SCLK;
    0148 98AA      CBI	0x15,2
    0149 94A3      INC	R10
    014A 2D8A      MOV	R24,R10
    014B 3084      CPI	R24,4
    014C F398      BCS	0x0140
(0099)    }
(0100)    
(0101)    CLR_LCD_STD; //传送4位0
    014D 98A9      CBI	0x15,1
(0102)    
(0103)    for(i=0;i<4;i++)
    014E 24AA      CLR	R10
    014F C003      RJMP	0x0153
(0104)    {
(0105)    	SET_LCD_SCLK;
    0150 9AAA      SBI	0x15,2
(0106)     CLR_LCD_SCLK;
    0151 98AA      CBI	0x15,2
    0152 94A3      INC	R10
    0153 2D8A      MOV	R24,R10
    0154 3084      CPI	R24,4
    0155 F3D0      BCS	0x0150
    0156 9543      INC	R20
    0157 3042      CPI	R20,2
    0158 F328      BCS	0x013E
(0107)    }
(0108)  }
(0109)  //CLR_LCD_SCLK;
(0110)  CLR_LCD_STD;
    0159 98A9      CBI	0x15,1
    015A 940E02C6  CALL	pop_gset3
    015C 9508      RET
(0111) }
(0112) 
(0113) 
(0114) /******************************************************************
(0115) ** 函数名称: void initial_lcd(void)
(0116) ** 功能描述: lcd初始化
(0117) ** 输 入: 无
(0118) ** 全局变量: 无
(0119) ** 调用模块: wr_lcd();
(0120) ** 说明:
(0121) ** 注意:
(0122) *******************************************************************/
(0123) void initial_lcd(void)
(0124) {
(0125)   LCD_DDR |= (1<<LCD_STD)|(1<<LCD_SCLK);
_initial_lcd:
    015D B384      IN	R24,0x14
    015E 6086      ORI	R24,6
    015F BB84      OUT	0x14,R24
(0126)   wr_lcd(Lcd_Set_Function_Basic,1);     	//指令集设定
    0160 E021      LDI	R18,1
    0161 E300      LDI	R16,0x30
    0162 DFB7      RCALL	_wr_lcd
(0127)   wr_lcd(Lcd_Set_Entrance_Point+2,1);    	//光标右移
    0163 E021      LDI	R18,1
    0164 E006      LDI	R16,6
    0165 DFB4      RCALL	_wr_lcd
(0128)   wr_lcd(Lcd_Display_Status+4,1);	   		//整屏显示
    0166 E021      LDI	R18,1
    0167 E00C      LDI	R16,0xC
    0168 DFB1      RCALL	_wr_lcd
(0129)   wr_lcd(Lcd_Clear,1);     		    		//clear the screen
    0169 E021      LDI	R18,1
    016A E001      LDI	R16,1
    016B DFAE      RCALL	_wr_lcd
(0130)   
(0131)   delay_lcd();
    016C DFA1      RCALL	_delay_lcd
    016D 9508      RET
_Lcd_drawbmp:
  i                    --> R20
  j                    --> R22
  bmp                  --> R10
    016E 940E02CD  CALL	push_gset3
    0170 0158      MOVW	R10,R16
(0132) }
(0133) 
(0134) 
(0135) /*********************************************************************************************************
(0136) ** 函数名称: Lcd_drawbmp(unsigned char col,unsigned char row,unsigned char col1,unsigned char row1,const unsigned char *bmp)
(0137) ** 功能描述: 绘制bmp图片
(0138) ** 输 入: col 起始行  col1 图片行数
(0139) ** 		   row 起始列  row1 图片列数
(0140) **         *bmp:图片字型码指针
(0141) ** 输 出: 
(0142) **         
(0143) ** 全局变量: 无
(0144) ** 调用模块: wr_lcd();
(0145) ** 说明:
(0146) ** 注意:
(0147) ********************************************************************************************************/
(0148) 
(0149) void Lcd_drawbmp(const unsigned char *bmp)
(0150) {
(0151)  	 unsigned char i,j;
(0152) 	 Lcd_clrbmp();
    0171 D067      RCALL	_Lcd_clrbmp
(0153) 	 wr_lcd(Lcd_Set_Function_Basic+2,1);
    0172 E021      LDI	R18,1
    0173 E302      LDI	R16,0x32
    0174 DFA5      RCALL	_wr_lcd
(0154) 	 wr_lcd(Lcd_Set_Function_Extend,1);
    0175 E021      LDI	R18,1
    0176 E304      LDI	R16,0x34
    0177 DFA2      RCALL	_wr_lcd
(0155) 	 for(i=0;i<32;i++)
    0178 2744      CLR	R20
    0179 C027      RJMP	0x01A1
(0156) 	 {
(0157)         for(j=0;j<8;j++)
    017A 2766      CLR	R22
    017B C022      RJMP	0x019E
(0158) 		{
(0159) 		   wr_lcd(Lcd_Set_Function_Basic+2,1);
    017C E021      LDI	R18,1
    017D E302      LDI	R16,0x32
    017E DF9B      RCALL	_wr_lcd
(0160) 	       wr_lcd(Lcd_Set_Function_Extend+2,1);
    017F E021      LDI	R18,1
    0180 E306      LDI	R16,0x36
    0181 DF98      RCALL	_wr_lcd
(0161) 		   
(0162) 		   wr_lcd(0x80+i,1);
    0182 E021      LDI	R18,1
    0183 2F04      MOV	R16,R20
    0184 5800      SUBI	R16,0x80
    0185 DF94      RCALL	_wr_lcd
(0163) 		   wr_lcd(0x80+j,1);
    0186 E021      LDI	R18,1
    0187 2F06      MOV	R16,R22
    0188 5800      SUBI	R16,0x80
    0189 DF90      RCALL	_wr_lcd
(0164) 		   
(0165) 		   wr_lcd(Lcd_Set_Function_Basic+2,1);
    018A E021      LDI	R18,1
    018B E302      LDI	R16,0x32
    018C DF8D      RCALL	_wr_lcd
(0166) 		   wr_lcd(*bmp++,0);
    018D 2722      CLR	R18
    018E 0115      MOVW	R2,R10
    018F 01C1      MOVW	R24,R2
    0190 9601      ADIW	R24,1
    0191 015C      MOVW	R10,R24
    0192 01F1      MOVW	R30,R2
    0193 9104      LPM	R16,0(Z)
    0194 DF85      RCALL	_wr_lcd
(0167) 		   wr_lcd(*bmp++,0);
    0195 2722      CLR	R18
    0196 0115      MOVW	R2,R10
    0197 01C1      MOVW	R24,R2
    0198 9601      ADIW	R24,1
    0199 015C      MOVW	R10,R24
    019A 01F1      MOVW	R30,R2
    019B 9104      LPM	R16,0(Z)
    019C DF7D      RCALL	_wr_lcd
    019D 9563      INC	R22
    019E 3068      CPI	R22,0x8
    019F F2E0      BCS	0x017C
    01A0 9543      INC	R20
    01A1 3240      CPI	R20,0x20
    01A2 F408      BCC	0x01A4
    01A3 CFD6      RJMP	0x017A
(0168) 		}
(0169) 	 }
(0170) 	 for(i=0;i<32;i++)
    01A4 2744      CLR	R20
    01A5 C027      RJMP	0x01CD
(0171) 	 {
(0172)         for(j=8;j<16;j++)
    01A6 E068      LDI	R22,0x8
    01A7 C022      RJMP	0x01CA
(0173) 		{
(0174) 		   wr_lcd(Lcd_Set_Function_Basic+2,1);
    01A8 E021      LDI	R18,1
    01A9 E302      LDI	R16,0x32
    01AA DF6F      RCALL	_wr_lcd
(0175) 	       wr_lcd(Lcd_Set_Function_Extend+2,1);
    01AB E021      LDI	R18,1
    01AC E306      LDI	R16,0x36
    01AD DF6C      RCALL	_wr_lcd
(0176) 		   
(0177) 		   wr_lcd(0x80+i,1);
    01AE E021      LDI	R18,1
    01AF 2F04      MOV	R16,R20
    01B0 5800      SUBI	R16,0x80
    01B1 DF68      RCALL	_wr_lcd
(0178) 		   wr_lcd(0x80+j,1);
    01B2 E021      LDI	R18,1
    01B3 2F06      MOV	R16,R22
    01B4 5800      SUBI	R16,0x80
    01B5 DF64      RCALL	_wr_lcd
(0179) 		   
(0180) 		   wr_lcd(Lcd_Set_Function_Basic+2,1);
    01B6 E021      LDI	R18,1
    01B7 E302      LDI	R16,0x32
    01B8 DF61      RCALL	_wr_lcd
(0181) 		   wr_lcd(*bmp++,0);
    01B9 2722      CLR	R18
    01BA 0115      MOVW	R2,R10
    01BB 01C1      MOVW	R24,R2
    01BC 9601      ADIW	R24,1
    01BD 015C      MOVW	R10,R24
    01BE 01F1      MOVW	R30,R2
    01BF 9104      LPM	R16,0(Z)
    01C0 DF59      RCALL	_wr_lcd
(0182) 		   wr_lcd(*bmp++,0);
    01C1 2722      CLR	R18
    01C2 0115      MOVW	R2,R10
    01C3 01C1      MOVW	R24,R2
    01C4 9601      ADIW	R24,1
    01C5 015C      MOVW	R10,R24
    01C6 01F1      MOVW	R30,R2
    01C7 9104      LPM	R16,0(Z)
    01C8 DF51      RCALL	_wr_lcd
    01C9 9563      INC	R22
    01CA 3160      CPI	R22,0x10
    01CB F2E0      BCS	0x01A8
    01CC 9543      INC	R20
    01CD 3240      CPI	R20,0x20
    01CE F408      BCC	0x01D0
    01CF CFD6      RJMP	0x01A6
(0183) 		}
(0184) 	 }
(0185) 	 wr_lcd(0x36,1);
    01D0 E021      LDI	R18,1
    01D1 E306      LDI	R16,0x36
    01D2 DF47      RCALL	_wr_lcd
(0186) 	 wr_lcd(Lcd_Set_Function_Basic,1); //30H--基本指令操作
    01D3 E021      LDI	R18,1
    01D4 E300      LDI	R16,0x30
    01D5 DF44      RCALL	_wr_lcd
    01D6 940E02C6  CALL	pop_gset3
    01D8 9508      RET
_Lcd_clrbmp:
  i                    --> R20
  j                    --> R22
    01D9 940E02CF  CALL	push_gset2
(0187) }
(0188) 
(0189) 
(0190) 
(0191) /*********************************************************************************************************
(0192) ** 函数名称: void Lcd_clrbmp(void)
(0193) ** 功能描述: 清除bmp图片
(0194) ** 输 入:     
(0195) ** 输 出:        
(0196) ** 全局变量: 无
(0197) ** 调用模块: Lcd_scomm() Lcd_sdata()
(0198) ** 说明:
(0199) ** 注意:
(0200) ********************************************************************************************************/
(0201) void Lcd_clrbmp(void)
(0202) {
(0203)  	 unsigned char i,j;
(0204) 	// wr_lcd(Lcd_Clear,1);
(0205) 	 wr_lcd(Lcd_Set_Function_Basic+2,1);
    01DB E021      LDI	R18,1
    01DC E302      LDI	R16,0x32
    01DD DF3C      RCALL	_wr_lcd
(0206) 	 wr_lcd(Lcd_Set_Function_Extend,1);
    01DE E021      LDI	R18,1
    01DF E304      LDI	R16,0x34
    01E0 DF39      RCALL	_wr_lcd
(0207) 	 for(i=0;i<32;i++)
    01E1 2744      CLR	R20
    01E2 C01D      RJMP	0x0200
(0208) 	 {
(0209)         for(j=0;j<16;j++)
    01E3 2766      CLR	R22
    01E4 C018      RJMP	0x01FD
(0210) 		{
(0211) 		   wr_lcd(Lcd_Set_Function_Basic+2,1);
    01E5 E021      LDI	R18,1
    01E6 E302      LDI	R16,0x32
    01E7 DF32      RCALL	_wr_lcd
(0212) 	       wr_lcd(Lcd_Set_Function_Extend+2,1);
    01E8 E021      LDI	R18,1
    01E9 E306      LDI	R16,0x36
    01EA DF2F      RCALL	_wr_lcd
(0213) 		   
(0214) 		   wr_lcd(0x80+i,1);
    01EB E021      LDI	R18,1
    01EC 2F04      MOV	R16,R20
    01ED 5800      SUBI	R16,0x80
    01EE DF2B      RCALL	_wr_lcd
(0215) 		   wr_lcd(0x80+j,1);
    01EF E021      LDI	R18,1
    01F0 2F06      MOV	R16,R22
    01F1 5800      SUBI	R16,0x80
    01F2 DF27      RCALL	_wr_lcd
(0216) 		   
(0217) 		   wr_lcd(Lcd_Set_Function_Basic+2,1);
    01F3 E021      LDI	R18,1
    01F4 E302      LDI	R16,0x32
    01F5 DF24      RCALL	_wr_lcd
(0218) 		   wr_lcd(0x00,0);
    01F6 2722      CLR	R18
    01F7 2700      CLR	R16
    01F8 DF21      RCALL	_wr_lcd
(0219) 		   wr_lcd(0x00,0);
    01F9 2722      CLR	R18
    01FA 2700      CLR	R16
    01FB DF1E      RCALL	_wr_lcd
    01FC 9563      INC	R22
    01FD 3160      CPI	R22,0x10
    01FE F330      BCS	0x01E5
    01FF 9543      INC	R20
    0200 3240      CPI	R20,0x20
    0201 F308      BCS	0x01E3
(0220) 		}
(0221) 	 }
(0222) 	 wr_lcd(0x36,1);
    0202 E021      LDI	R18,1
    0203 E306      LDI	R16,0x36
    0204 DF15      RCALL	_wr_lcd
(0223) 	 wr_lcd(Lcd_Set_Function_Basic,1); //30H--基本指令操作
    0205 E021      LDI	R18,1
    0206 E300      LDI	R16,0x30
    0207 DF12      RCALL	_wr_lcd
    0208 940E02C3  CALL	pop_gset2
    020A 9508      RET
_Lcd_lineclr:
  i                    --> R20
  row                  --> R20
    020B 940E02D1  CALL	push_gset1
    020D 2F40      MOV	R20,R16
(0224) }
(0225) 
(0226) 

⌨️ 快捷键说明

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