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

📄 nokia5110.lst

📁 avr基础程序大全
💻 LST
📖 第 1 页 / 共 3 页
字号:
  i                    --> R20
    00299 934A      ST	-Y,R20
    0029A 935A      ST	-Y,R21
(0224) }
(0225) 
(0226) /********************************/
(0227) void LCD_clear(void)
(0228) {
(0229)     unsigned int i;
(0230)     LCD_write_byte(0x0c, 0);	
    0029B 2722      CLR	R18
    0029C E00C      LDI	R16,0xC
    0029D D0E7      RCALL	_LCD_write_byte
(0231)     LCD_write_byte(0x80, 0);
    0029E 2722      CLR	R18
    0029F E800      LDI	R16,0x80
    002A0 D0E4      RCALL	_LCD_write_byte
(0232)     for (i=0; i<504; i++)
    002A1 2744      CLR	R20
    002A2 2755      CLR	R21
    002A3 C005      RJMP	0x02A9
(0233) 	{
(0234)         LCD_write_byte(0, 1);
    002A4 E021      LDI	R18,1
    002A5 2700      CLR	R16
    002A6 D0DE      RCALL	_LCD_write_byte
    002A7 5F4F      SUBI	R20,0xFF
    002A8 4F5F      SBCI	R21,0xFF
    002A9 3F48      CPI	R20,0xF8
    002AA E0E1      LDI	R30,1
    002AB 075E      CPC	R21,R30
    002AC F3B8      BCS	0x02A4
    002AD 9159      LD	R21,Y+
    002AE 9149      LD	R20,Y+
    002AF 9508      RET
(0235) 	}			
(0236) }
(0237) 
(0238) /************************************/
(0239) void delay_1us(void)    //1us延时函数
(0240) {
(0241)    unsigned int i;
(0242)    for(i=0;i<12000;i++);
_delay_1us:
  i                    --> R16
    002B0 2700      CLR	R16
    002B1 2711      CLR	R17
    002B2 C002      RJMP	0x02B5
    002B3 5F0F      SUBI	R16,0xFF
    002B4 4F1F      SBCI	R17,0xFF
    002B5 3E00      CPI	R16,0xE0
    002B6 E2EE      LDI	R30,0x2E
    002B7 071E      CPC	R17,R30
    002B8 F3D0      BCS	0x02B3
    002B9 9508      RET
_LCD_set_XY:
  Y                    --> R22
  X                    --> R20
    002BA 934A      ST	-Y,R20
    002BB 936A      ST	-Y,R22
    002BC 2F62      MOV	R22,R18
    002BD 2F40      MOV	R20,R16
(0243) }
(0244) 
(0245) /************************************/
(0246) void LCD_set_XY(unsigned char X, unsigned char Y)
(0247) {
(0248)     LCD_write_byte(0x40 | Y, 0);// column
    002BE 2722      CLR	R18
    002BF 2F06      MOV	R16,R22
    002C0 6400      ORI	R16,0x40
    002C1 D0C3      RCALL	_LCD_write_byte
(0249)     LCD_write_byte(0x80 | X, 0);// row
    002C2 2722      CLR	R18
    002C3 2F04      MOV	R16,R20
    002C4 6800      ORI	R16,0x80
    002C5 D0BF      RCALL	_LCD_write_byte
    002C6 9169      LD	R22,Y+
    002C7 9149      LD	R20,Y+
    002C8 9508      RET
_LCD_write_char:
  line                 --> R20
  c                    --> R22
    002C9 934A      ST	-Y,R20
    002CA 936A      ST	-Y,R22
    002CB 2F60      MOV	R22,R16
(0250) }
(0251) 
(0252) /*******************************************/
(0253) void LCD_write_char(unsigned char c)
(0254) {
(0255)     unsigned char line;
(0256)     c -= 32;
    002CC 5260      SUBI	R22,0x20
(0257)     for (line=0; line<6; line++)
    002CD 2744      CLR	R20
    002CE C010      RJMP	0x02DF
(0258) 	{
(0259)         LCD_write_byte(font6x8[c][line], 1);
    002CF E021      LDI	R18,1
    002D0 E006      LDI	R16,6
    002D1 2F16      MOV	R17,R22
    002D2 0301      MULSU	R16,R17
    002D3 0110      MOVW	R2,R0
    002D4 E880      LDI	R24,0x80
    002D5 E093      LDI	R25,3
    002D6 0E28      ADD	R2,R24
    002D7 1E39      ADC	R3,R25
    002D8 2FE4      MOV	R30,R20
    002D9 27FF      CLR	R31
    002DA 0DE2      ADD	R30,R2
    002DB 1DF3      ADC	R31,R3
    002DC 8100      LD	R16,Z
    002DD D0A7      RCALL	_LCD_write_byte
    002DE 9543      INC	R20
    002DF 3046      CPI	R20,6
    002E0 F370      BCS	0x02CF
    002E1 9169      LD	R22,Y+
    002E2 9149      LD	R20,Y+
    002E3 9508      RET
_LCD_write_english_string:
  s                    --> R20
  Y                    --> R12
  X                    --> R10
    002E4 940E 040B CALL	push_xgset303C
    002E6 2EC2      MOV	R12,R18
    002E7 2EA0      MOV	R10,R16
    002E8 814E      LDD	R20,Y+6
    002E9 815F      LDD	R21,Y+7
(0260) 	}
(0261) }
(0262) /********************************************/
(0263) /*-------------------------------------------------
(0264) LCD_write_english_String  : 英文字符串显示函数
(0265) 
(0266) 输入参数:*s      :英文字符串指针;
(0267)           X、Y    : 显示字符串的位置,x 0-83 ,y 0-5
(0268) --------------------------------------------------*/
(0269) void LCD_write_english_string(unsigned char X,unsigned char Y,char *s)
(0270) {
(0271)     LCD_set_XY(X,Y);
    002EA 2D2C      MOV	R18,R12
    002EB 2D0A      MOV	R16,R10
    002EC DFCD      RCALL	_LCD_set_XY
    002ED C005      RJMP	0x02F3
(0272)     while (*s) 
(0273)     {
(0274) 	    LCD_write_char(*s);
    002EE 01FA      MOVW	R30,R20
    002EF 8100      LD	R16,Z
    002F0 DFD8      RCALL	_LCD_write_char
(0275) 	    s++;
    002F1 5F4F      SUBI	R20,0xFF
    002F2 4F5F      SBCI	R21,0xFF
    002F3 01FA      MOVW	R30,R20
    002F4 8020      LD	R2,Z
    002F5 2022      TST	R2
    002F6 F7B9      BNE	0x02EE
    002F7 940C 0412 JMP	pop_xgset303C
_LCD_write_chinese_string:
  i                    --> R10
  n                    --> R14
  row                  --> R22
  line                 --> R12
  num                  --> R20
  ch_with              --> Y,+14
  Y                    --> Y,+12
  X                    --> Y,+10
    002F9 940E 03C8 CALL	push_arg4
    002FB 940E 0400 CALL	push_xgsetF0FC
    002FD 8948      LDD	R20,Y+16
    002FE 88CA      LDD	R12,Y+18
    002FF 896C      LDD	R22,Y+20
(0276)     }
(0277) }
(0278) /**************************************************************/
(0279) /*-------------------------------------------------
(0280) LCD_write_chinese_string: 在LCD上显示汉字
(0281) 
(0282) 输入参数:X、Y    :显示汉字的起始X、Y坐标;
(0283)           ch_with :汉字点阵的宽度
(0284)           num     :显示汉字的个数;  
(0285)           line    :汉字点阵数组中的起始行数
(0286)           row     :汉字显示的行间距
(0287) --------------------------------------------------*/                        
(0288) void LCD_write_chinese_string(unsigned char X, unsigned char Y,
(0289)                               unsigned char ch_with,unsigned char num,
(0290) 							  unsigned char line,unsigned char row)
(0291) {
(0292)     unsigned char i,n;
(0293)     LCD_set_XY(X,Y);                             //设置初始位置
    00300 852C      LDD	R18,Y+12
    00301 850A      LDD	R16,Y+10
    00302 DFB7      RCALL	_LCD_set_XY
(0294)     for (i=0;i<num;)
    00303 24AA      CLR	R10
    00304 C031      RJMP	0x0336
(0295)     {
(0296)       	for (n=0; n<ch_with*2; n++)              //写一个汉字
    00305 24EE      CLR	R14
    00306 C023      RJMP	0x032A
(0297)       	{ 
(0298)       	    if (n==ch_with)                      //写汉字的下半部分
    00307 840E      LDD	R0,Y+14
    00308 14E0      CP	R14,R0
    00309 F479      BNE	0x0319
(0299)       	    {
(0300)       	        if (i==0) LCD_set_XY(X,Y+1);
    0030A 20AA      TST	R10
    0030B F429      BNE	0x0311
    0030C 852C      LDD	R18,Y+12
    0030D 5F2F      SUBI	R18,0xFF
    0030E 850A      LDD	R16,Y+10
    0030F DFAA      RCALL	_LCD_set_XY
    00310 C008      RJMP	0x0319
(0301)       	        else
(0302) 				{
(0303)       	           LCD_set_XY((X+(ch_with+row)*i),Y+1);
    00311 852C      LDD	R18,Y+12
    00312 5F2F      SUBI	R18,0xFF
    00313 842E      LDD	R2,Y+14
    00314 0E26      ADD	R2,R22
    00315 9C2A      MUL	R2,R10
    00316 850A      LDD	R16,Y+10
    00317 0D00      ADD	R16,R0
    00318 DFA1      RCALL	_LCD_set_XY
(0304) 				}
(0305)             }
(0306)       	    LCD_write_byte(HZK[line+i][n],1);
    00319 E021      LDI	R18,1
    0031A 2D1C      MOV	R17,R12
    0031B 0D1A      ADD	R17,R10
    0031C E108      LDI	R16,0x18
    0031D 0301      MULSU	R16,R17
    0031E 0110      MOVW	R2,R0
    0031F E980      LDI	R24,0x90
    00320 E092      LDI	R25,2
    00321 0E28      ADD	R2,R24
    00322 1E39      ADC	R3,R25
    00323 2DEE      MOV	R30,R14
    00324 27FF      CLR	R31
    00325 0DE2      ADD	R30,R2
    00326 1DF3      ADC	R31,R3
    00327 8100      LD	R16,Z
    00328 D05C      RCALL	_LCD_write_byte
    00329 94E3      INC	R14
    0032A 842E      LDD	R2,Y+14
    0032B 0C22      LSL	R2
    0032C 14E2      CP	R14,R2
    0032D F2C8      BCS	0x0307
(0307)       	}
(0308)       	i++;
    0032E 94A3      INC	R10
(0309)       	LCD_set_XY((X+(ch_with+row)*i),Y);
    0032F 852C      LDD	R18,Y+12
    00330 842E      LDD	R2,Y+14
    00331 0E26      ADD	R2,R22
    00332 9C2A      MUL	R2,R10
    00333 850A      LDD	R16,Y+10
    00334 0D00      ADD	R16,R0
    00335 DF84      RCALL	_LCD_set_XY
    00336 16A4      CP	R10,R20
    00337 F268      BCS	0x0305
    00338 940E 03F5 CALL	pop_xgsetF0FC
    0033A 9624      ADIW	R28,4
    0033B 9508      RET
_LCD_draw_bmp_pixel:
  row                  --> R22
  n                    --> R20
  i                    --> R12
  Pix_y                --> R12
  Pix_x                --> R10
  map                  --> R14
  Y                    --> Y,+12
  X                    --> Y,+10
    0033C 940E 03C8 CALL	push_arg4
    0033E 940E 0400 CALL	push_xgsetF0FC
    00340 84EE      LDD	R14,Y+14
    00341 84FF      LDD	R15,Y+15
    00342 88A8      LDD	R10,Y+16
    00343 88CA      LDD	R12,Y+18
(0310)     }
(0311) }
(0312) /***********************************************/
(0313) /*----------------------------------------------
(0314) LCD_draw_map      : 位图绘制函数
(0315) 
(0316) 输入参数:X、Y    :位图绘制的起始X、Y坐标;
(0317)           *map    :位图点阵数据;
(0318)           Pix_x   :位图像素(长)
(0319)           Pix_y   :位图像素(宽)
(0320) -----------------------------------------------*/
(0321) void LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char *map,
(0322)                         unsigned char Pix_x,unsigned char Pix_y)
(0323) {
(0324)     unsigned int i,n;
(0325)     unsigned char row;
(0326)     if (Pix_y%8==0)
    00344 E018      LDI	R17,0x8

⌨️ 快捷键说明

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