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

📄 can

📁 can通信源码
💻
字号:
__start:
__text_start:
    01AC EFCF      LDI	R28,0xFF
    01AD E1D0      LDI	R29,0x10
    01AE BFCD      OUT	0x3D,R28
    01AF BFDE      OUT	0x3E,R29
    01B0 51C0      SUBI	R28,0x10
    01B1 40D0      SBCI	R29,0
    01B2 EA0A      LDI	R16,0xAA
    01B3 8308      STD	Y+0,R16
    01B4 2400      CLR	R0
    01B5 E3E0      LDI	R30,0x30
    01B6 E0F3      LDI	R31,3
    01B7 E013      LDI	R17,3
    01B8 33E0      CPI	R30,0x30
    01B9 07F1      CPC	R31,R17
    01BA F011      BEQ	0x01BD
    01BB 9201      ST	R0,Z+
    01BC CFFB      RJMP	0x01B8
    01BD 8300      STD	Z+0,R16
    01BE E2E8      LDI	R30,0x28
    01BF E0F1      LDI	R31,1
    01C0 E0A0      LDI	R26,0
    01C1 E0B1      LDI	R27,1
    01C2 E013      LDI	R17,3
    01C3 35E8      CPI	R30,0x58
    01C4 07F1      CPC	R31,R17
    01C5 F021      BEQ	0x01CA
    01C6 95C8      LPM
    01C7 9631      ADIW	R30,1
    01C8 920D      ST	R0,X+
    01C9 CFF9      RJMP	0x01C3
    01CA 940E0315  CALL	_main
_exit:
    01CC CFFF      RJMP	_exit
_delay_us:
  i                    --> R20
  j                    --> R22
  t                    --> R16
    01CD 940E033D  CALL	push_gset2
FILE: C:\DOCUME~1\Administrator\桌面\nokia5110lcd\nokia.c
(0001) /***********************************************************************
(0002) 程序名称: nokia.c
(0003) 程序功能: nokia5110驱动程序
(0004) 程序说明:           
(0005) /**********************************************************************/
(0006) #include <iom128v.h>
(0007) #include <macros.h>
(0008) #include <BIT.h>
(0009) #include"code_table.c"
(0010) 
(0011) #define uchar unsigned char
(0012) #define uint unsigned int
(0013) 
(0014) //位操作定义
(0015) #define SCLK _PA5
(0016) #define SDIN _PA4
(0017) #define LCD_DC _PA3 
(0018) #define LCD_CE _PA2
(0019) #define LCD_RST _PA1
(0020) 
(0021) //函数声明
(0022) void delay_us(uint t);
(0023) void delay_ms(uint t);
(0024) void LCD_init(void);
(0025) void LCD_clear(void);
(0026) void LCD_write_english_string(uchar X,uchar Y,char *s); 
(0027) void LCD_write_char(uchar c);
(0028) void LCD_write_byte(uchar dat, uchar dc);
(0029) void LCD_set_XY(uchar X, uchar Y);      
(0030) 
(0031) /***********************************************************************
(0032) * 函数名称:delay_us()
(0033) * 函数功能:16M晶振,延时t微秒
(0034) * 入口参数:t    延时t微秒
(0035) * 出口参数:无
(0036) ***********************************************************************/
(0037) void delay_us(uint t)
(0038) { 
(0039)  	 uint i,j;
(0040) 	 for(i=t;i>0;i--)	
    01CF 01A8      MOVW	R20,R16
    01D0 C00A      RJMP	0x01DB
(0041) 	     for(j=1;j>0;j--);
    01D1 E061      LDI	R22,1
    01D2 E070      LDI	R23,0
    01D3 C002      RJMP	0x01D6
    01D4 5061      SUBI	R22,1
    01D5 4070      SBCI	R23,0
    01D6 3060      CPI	R22,0
    01D7 0767      CPC	R22,R23
    01D8 F7D9      BNE	0x01D4
    01D9 5041      SUBI	R20,1
    01DA 4050      SBCI	R21,0
    01DB 3040      CPI	R20,0
    01DC 0745      CPC	R20,R21
    01DD F799      BNE	0x01D1
    01DE 940E032B  CALL	pop_gset2
    01E0 9508      RET
_delay_ms:
  i                    --> R20
  j                    --> R22
  t                    --> R16
    01E1 940E033D  CALL	push_gset2
(0042) } 
(0043) 
(0044) /**********************************************************************
(0045) * 函数名称:delay_ms()
(0046) * 函数功能:16M晶振,延时t毫秒
(0047) * 入口参数:t   延时t毫秒
(0048) * 出口参数:无
(0049) ***********************************************************************/
(0050) void delay_ms(uint t)
(0051) {
(0052)  	 uint i,j;
(0053) 	 for(i=t;i>0;i--)
    01E3 01A8      MOVW	R20,R16
    01E4 C00A      RJMP	0x01EF
(0054) 	 	for(j=2670;j>0;j--);
    01E5 E66E      LDI	R22,0x6E
    01E6 E07A      LDI	R23,0xA
    01E7 C002      RJMP	0x01EA
    01E8 5061      SUBI	R22,1
    01E9 4070      SBCI	R23,0
    01EA 3060      CPI	R22,0
    01EB 0767      CPC	R22,R23
    01EC F7D9      BNE	0x01E8
    01ED 5041      SUBI	R20,1
    01EE 4050      SBCI	R21,0
    01EF 3040      CPI	R20,0
    01F0 0745      CPC	R20,R21
    01F1 F799      BNE	0x01E5
    01F2 940E032B  CALL	pop_gset2
    01F4 9508      RET
(0055) }
(0056) 
(0057) /**********************************************************************
(0058) * 函数名称:LCD_init()		
(0059) * 函数功能:初始化nokia5110
(0060) * 入口参数:无
(0061) * 出口参数:无
(0062) **********************************************************************/
(0063) void LCD_init(void)
(0064)   {           
(0065)     LCD_RST = 0; // 产生一个让LCD复位的低电平脉冲
_LCD_init:
    01F5 B38B      IN	R24,0x1B
    01F6 7F8D      ANDI	R24,0xFD
    01F7 BB8B      OUT	0x1B,R24
(0066)     delay_us(1);
    01F8 E001      LDI	R16,1
    01F9 E010      LDI	R17,0
    01FA DFD2      RCALL	_delay_us
(0067)     LCD_RST = 1;
    01FB B38B      IN	R24,0x1B
    01FC 6082      ORI	R24,2
    01FD BB8B      OUT	0x1B,R24
(0068)     LCD_CE = 0;// 关闭LCD  
    01FE B38B      IN	R24,0x1B
    01FF 7F8B      ANDI	R24,0xFB
    0200 BB8B      OUT	0x1B,R24
(0069)     delay_us(1);		
    0201 E001      LDI	R16,1
    0202 E010      LDI	R17,0
    0203 DFC9      RCALL	_delay_us
(0070)     LCD_CE = 1;// 使能LCD
    0204 B38B      IN	R24,0x1B
    0205 6084      ORI	R24,4
    0206 BB8B      OUT	0x1B,R24
(0071)     delay_us(1);
    0207 E001      LDI	R16,1
    0208 E010      LDI	R17,0
    0209 DFC3      RCALL	_delay_us
(0072)     LCD_write_byte(0x21, 0);	// 使用扩展命令设置LCD模式
    020A 2722      CLR	R18
    020B E201      LDI	R16,0x21
    020C D06A      RCALL	_LCD_write_byte
(0073)     LCD_write_byte(0xc8, 0);	// 设置偏置电压
    020D 2722      CLR	R18
    020E EC08      LDI	R16,0xC8
    020F D067      RCALL	_LCD_write_byte
(0074)     LCD_write_byte(0x06, 0);	// 温度校正
    0210 2722      CLR	R18
    0211 E006      LDI	R16,6
    0212 D064      RCALL	_LCD_write_byte
(0075)     LCD_write_byte(0x13, 0);	// 1:48
    0213 2722      CLR	R18
    0214 E103      LDI	R16,0x13
    0215 D061      RCALL	_LCD_write_byte
(0076)     LCD_write_byte(0x20, 0);	// 使用基本命令
    0216 2722      CLR	R18
    0217 E200      LDI	R16,0x20
    0218 D05E      RCALL	_LCD_write_byte
(0077)     LCD_clear();	                   // 清屏
    0219 D007      RCALL	_LCD_clear
(0078)     LCD_write_byte(0x0c, 0);	// 设定显示模式,正常显示        
    021A 2722      CLR	R18
    021B E00C      LDI	R16,0xC
    021C D05A      RCALL	_LCD_write_byte
(0079)     LCD_CE = 0;                      // 关闭LCD  
    021D B38B      IN	R24,0x1B
    021E 7F8B      ANDI	R24,0xFB
    021F BB8B      OUT	0x1B,R24
    0220 9508      RET
_LCD_clear:
  i                    --> R20
    0221 940E033F  CALL	push_gset1
(0080)   }
(0081)   
(0082)  /**********************************************************************
(0083) * 函数名称:LCD_clear()		
(0084) * 函数功能:液晶清屏
(0085) * 入口参数:无
(0086) * 出口参数:无
(0087) **********************************************************************/
(0088) void LCD_clear(void)
(0089)   {
(0090)     uint i;
(0091)     LCD_write_byte(0x0c, 0);			
    0223 2722      CLR	R18
    0224 E00C      LDI	R16,0xC
    0225 D051      RCALL	_LCD_write_byte
(0092)     LCD_write_byte(0x80, 0);	
    0226 2722      CLR	R18
    0227 E800      LDI	R16,0x80
    0228 D04E      RCALL	_LCD_write_byte
(0093)     for (i=0; i<504; i++)
    0229 2744      CLR	R20
    022A 2755      CLR	R21
    022B C005      RJMP	0x0231
(0094)       LCD_write_byte(0, 1);			
    022C E021      LDI	R18,1
    022D 2700      CLR	R16
    022E D048      RCALL	_LCD_write_byte
    022F 5F4F      SUBI	R20,0xFF
    0230 4F5F      SBCI	R21,0xFF
    0231 3F48      CPI	R20,0xF8
    0232 E0E1      LDI	R30,1
    0233 075E      CPC	R21,R30
    0234 F3B8      BCS	0x022C
    0235 940E0342  CALL	pop_gset1
    0237 9508      RET
_LCD_set_XY:
  Y                    --> R22
  X                    --> R20
    0238 940E033D  CALL	push_gset2
    023A 2F62      MOV	R22,R18
    023B 2F40      MOV	R20,R16
(0095)   }
(0096) 
(0097) /**********************************************************************
(0098) * 函数名称:LCD_set_XY()
(0099) * 函数功能:光标定位x行y列
(0100) * 入口参数:X,Y   x行y列
(0101) * 出口参数:无
(0102) **********************************************************************/
(0103) void LCD_set_XY(uchar X, uchar Y)
(0104)   {
(0105)     LCD_write_byte(0x40 | Y, 0);		// column
    023C 2722      CLR	R18
    023D 2F06      MOV	R16,R22
    023E 6400      ORI	R16,0x40
    023F D037      RCALL	_LCD_write_byte
(0106)     LCD_write_byte(0x80 | X, 0);        // row
    0240 2722      CLR	R18
    0241 2F04      MOV	R16,R20
    0242 6800      ORI	R16,0x80
    0243 D033      RCALL	_LCD_write_byte
    0244 940E032B  CALL	pop_gset2
    0246 9508      RET
_LCD_write_char:
  line                 --> R20
  c                    --> R22
    0247 940E033D  CALL	push_gset2
    0249 2F60      MOV	R22,R16
(0107)   }
(0108)   
(0109)  /***********************************************************************
(0110) * 函数名称:LCD_write_char()
(0111) * 函数功能:写入1个字符
(0112) * 入口参数:c   要写入的数据
(0113) * 出口参数:无
(0114) **********************************************************************/
(0115) void LCD_write_char(uchar c)
(0116)   {
(0117)     uchar line;
(0118)     c -= 32;
    024A 5260      SUBI	R22,0x20
(0119)     for (line=0; line<6; line++)
    024B 2744      CLR	R20
    024C C00F      RJMP	0x025C
(0120)       LCD_write_byte(font6x8[c][line], 1);//从ACSII码表中读取字节,然后写入液晶
    024D E021      LDI	R18,1
    024E E086      LDI	R24,6
    024F 9F86      MUL	R24,R22
    0250 0110      MOVW	R2,R0
    0251 E080      LDI	R24,0
    0252 E091      LDI	R25,1
    0253 0E28      ADD	R2,R24
    0254 1E39      ADC	R3,R25
    0255 2FE4      MOV	R30,R20
    0256 27FF      CLR	R31
    0257 0DE2      ADD	R30,R2
    0258 1DF3      ADC	R31,R3
    0259 8100      LDD	R16,Z+0
    025A D01C      RCALL	_LCD_write_byte
    025B 9543      INC	R20
    025C 3046      CPI	R20,6
    025D F378      BCS	0x024D
    025E 940E032B  CALL	pop_gset2
    0260 9508      RET
_LCD_write_english_string:
  s                    --> R20
  Y                    --> R10
  X                    --> R22
    0261 940E033B  CALL	push_gset3
    0263 2EA2      MOV	R10,R18
    0264 2F60      MOV	R22,R16
    0265 814E      LDD	R20,Y+6
    0266 815F      LDD	R21,Y+7
(0121)   }
(0122) 
(0123) /***********************************************************************
(0124) * 函数名称

⌨️ 快捷键说明

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