📄 nokia5110.lst
字号:
__start:
__text_start:
02B6 E5CF LDI R28,0x5F
02B7 E0D4 LDI R29,4
02B8 BFCD OUT 0x3D,R28
02B9 BFDE OUT 0x3E,R29
02BA 51C0 SUBI R28,0x10
02BB 40D0 SBCI R29,0
02BC EA0A LDI R16,0xAA
02BD 8308 STD Y+0,R16
02BE 2400 CLR R0
02BF E7EE LDI R30,0x7E
02C0 E0F0 LDI R31,0
02C1 E010 LDI R17,0
02C2 37EE CPI R30,0x7E
02C3 07F1 CPC R31,R17
02C4 F011 BEQ 0x02C7
02C5 9201 ST R0,Z+
02C6 CFFB RJMP 0x02C2
02C7 8300 STD Z+0,R16
02C8 E4EE LDI R30,0x4E
02C9 E0F5 LDI R31,5
02CA E6A0 LDI R26,0x60
02CB E0B0 LDI R27,0
02CC E015 LDI R17,5
02CD 36EC CPI R30,0x6C
02CE 07F1 CPC R31,R17
02CF F021 BEQ 0x02D4
02D0 95C8 LPM
02D1 9631 ADIW R30,1
02D2 920D ST R0,X+
02D3 CFF9 RJMP 0x02CD
02D4 D001 RCALL _main
_exit:
02D5 CFFF RJMP _exit
_main:
02D6 9727 SBIW R28,7
FILE: E:\Study\AVR\nokia5110\main.c
(0001) /*
(0002) Nokia5110 在msp430单片机上的应用
(0003)
(0004) 赵亮 zhaoliang_0801@dl.cn
(0005) 07-05-10
(0006) */
(0007) #include <iom8v.h>
(0008) #include <macros.h>
(0009)
(0010) #include "nokia_5110.h"
(0011) #include "bmp_pixel.h"
(0012)
(0013) /******************************************************************************/
(0014) void main(void)
(0015) {
(0016)
(0017)
(0018) LCD_init(); //初始化液晶
02D7 D048 RCALL _LCD_init
(0019) LCD_clear();
02D8 D066 RCALL _LCD_clear
02D9 C022 RJMP 0x02FC
(0020) //P6DIR = 0xff;
(0021) while(1)
(0022) {
(0023) LCD_write_english_string(0,2,"NOKIA 5110 LCD");
02DA E68F LDI R24,0x6F
02DB E090 LDI R25,0
02DC 8399 STD Y+1,R25
02DD 8388 STD Y+0,R24
02DE E022 LDI R18,2
02DF 2700 CLR R16
02E0 D098 RCALL _LCD_write_english_string
(0024) LCD_write_english_string(0,3," on 51 by zl !");
02E1 E680 LDI R24,0x60
02E2 E090 LDI R25,0
02E3 8399 STD Y+1,R25
02E4 8388 STD Y+0,R24
02E5 E023 LDI R18,3
02E6 2700 CLR R16
02E7 D091 RCALL _LCD_write_english_string
(0025) LCD_write_chinese_string(0,0,12,7,0,0);
02E8 2422 CLR R2
02E9 822E STD Y+6,R2
02EA 822C STD Y+4,R2
02EB E087 LDI R24,7
02EC 838A STD Y+2,R24
02ED E08C LDI R24,0xC
02EE 8388 STD Y+0,R24
02EF 2722 CLR R18
02F0 2700 CLR R16
02F1 D09B RCALL _LCD_write_chinese_string
(0026) LCD_write_chinese_string(0,4,12,7,0,0);
02F2 2422 CLR R2
02F3 822E STD Y+6,R2
02F4 822C STD Y+4,R2
02F5 E087 LDI R24,7
02F6 838A STD Y+2,R24
02F7 E08C LDI R24,0xC
02F8 8388 STD Y+0,R24
02F9 E024 LDI R18,4
02FA 2700 CLR R16
02FB D091 RCALL _LCD_write_chinese_string
02FC CFDD RJMP 0x02DA
(0027) }
(0028)
(0029)
(0030) }
02FD 9627 ADIW R28,7
02FE 9508 RET
FILE: E:\Study\AVR\nokia5110\nokia_5110.c
(0001)
(0002)
(0003) #include "nokia_5110.h"
(0004) #include "english_6x8_pixel.h"
(0005) #include "write_chinese_string_pixel.h"
(0006) #include "move_chinese_string_pixel.h"
(0007)
(0008)
(0009) /*-----------------------------------------------------------------------
(0010) LCD_init : 3310LCD初始化
(0011)
(0012) 编写日期 :2004-8-10
(0013) 最后修改日期 :2004-8-10
(0014) -----------------------------------------------------------------------*/
(0015)
(0016) void delay_1us(void) //1us延时函数
(0017) {
(0018) unsigned int i;
(0019) for(i=0;i<100;i++);
_delay_1us:
i --> R16
02FF 2700 CLR R16
0300 2711 CLR R17
0301 C002 RJMP 0x0304
0302 5F0F SUBI R16,0xFF
0303 4F1F SBCI R17,0xFF
0304 3604 CPI R16,0x64
0305 E0E0 LDI R30,0
0306 071E CPC R17,R30
0307 F3D0 BCS 0x0302
(0020)
(0021) }
0308 9508 RET
(0022)
(0023) void delay_1ms(void) //1ms延时函数
(0024) {
(0025) unsigned int i;
(0026) for (i=0;i<1140;i++);
_delay_1ms:
i --> R16
0309 2700 CLR R16
030A 2711 CLR R17
030B C002 RJMP 0x030E
030C 5F0F SUBI R16,0xFF
030D 4F1F SBCI R17,0xFF
030E 3704 CPI R16,0x74
030F E0E4 LDI R30,4
0310 071E CPC R17,R30
0311 F3D0 BCS 0x030C
(0027) }
0312 9508 RET
_delay_nms:
i --> R20
n --> R22
0313 D208 RCALL push_gset2
0314 01B8 MOVW R22,R16
(0028)
(0029) void delay_nms(unsigned int n) //N ms延时函数
(0030) {
(0031) unsigned int i=0;
0315 2744 CLR R20
0316 2755 CLR R21
(0032) for (i=0;i<n;i++)
0317 C003 RJMP 0x031B
(0033) delay_1ms();
0318 DFF0 RCALL _delay_1ms
0319 5F4F SUBI R20,0xFF
031A 4F5F SBCI R21,0xFF
031B 1746 CP R20,R22
031C 0757 CPC R21,R23
031D F3D0 BCS 0x0318
(0034) }
031E D1E0 RCALL pop_gset2
031F 9508 RET
(0035)
(0036)
(0037) void LCD_init(void)
(0038) {
(0039) // 产生一个让LCD复位的低电平脉冲
(0040) // LCD_RST = 0;
(0041)
(0042) LCD_5110_DIR |= (0x01 << LCD_RST) + (0x01 << LCD_CE) + (0x01 << LCD_DC)
_LCD_init:
0320 B381 IN R24,0x11
0321 618F ORI R24,0x1F
0322 BB81 OUT 0x11,R24
(0043) + (0x01 << LCD_DIN) + (0x01<< LCD_CLK);
(0044)
(0045) LCD_5110_PORT &= ~(0x01 << LCD_RST);
0323 9894 CBI 0x12,4
(0046) delay_1us();
0324 DFDA RCALL _delay_1us
(0047)
(0048) // LCD_RST = 1;
(0049) LCD_5110_PORT |= (0x01 << LCD_RST);
0325 9A94 SBI 0x12,4
(0050)
(0051) // 关闭LCD
(0052) //LCD_CE = 0;
(0053) LCD_5110_PORT &= ~(0x01 << LCD_CE);
0326 9893 CBI 0x12,3
(0054) delay_1us();
0327 DFD7 RCALL _delay_1us
(0055) // 使能LCD
(0056) //LCD_CE = 1;
(0057) LCD_5110_PORT |= (0x01 << LCD_CE);
0328 9A93 SBI 0x12,3
(0058) delay_1us();
0329 DFD5 RCALL _delay_1us
(0059)
(0060) LCD_write_byte(0x21, 0); // 使用扩展命令设置LCD模式
032A 2722 CLR R18
032B E201 LDI R16,0x21
032C D18E RCALL _LCD_write_byte
(0061) LCD_write_byte(0xc8, 0); // 设置偏置电压
032D 2722 CLR R18
032E EC08 LDI R16,0xC8
032F D18B RCALL _LCD_write_byte
(0062) LCD_write_byte(0x06, 0); // 温度校正
0330 2722 CLR R18
0331 E006 LDI R16,6
0332 D188 RCALL _LCD_write_byte
(0063) LCD_write_byte(0x13, 0); // 1:48
0333 2722 CLR R18
0334 E103 LDI R16,0x13
0335 D185 RCALL _LCD_write_byte
(0064) LCD_write_byte(0x20, 0); // 使用基本命令
0336 2722 CLR R18
0337 E200 LDI R16,0x20
0338 D182 RCALL _LCD_write_byte
(0065) LCD_clear(); // 清屏
0339 D005 RCALL _LCD_clear
(0066) LCD_write_byte(0x0c, 0); // 设定显示模式,正常显示
033A 2722 CLR R18
033B E00C LDI R16,0xC
033C D17E RCALL _LCD_write_byte
(0067)
(0068) // 关闭LCD
(0069) // LCD_CE = 0;
(0070) LCD_5110_PORT &= ~(0x01 << LCD_CE);
033D 9893 CBI 0x12,3
(0071) }
033E 9508 RET
_LCD_clear:
i --> R20
033F D1C5 RCALL push_gset1
(0072)
(0073) /*-----------------------------------------------------------------------
(0074) LCD_clear : LCD清屏函数
(0075)
(0076) 编写日期 :2004-8-10
(0077) 最后修改日期 :2004-8-10
(0078) -----------------------------------------------------------------------*/
(0079) void LCD_clear(void)
(0080) {
(0081) unsigned int i;
(0082)
(0083) LCD_write_byte(0x0c, 0);
0340 2722 CLR R18
0341 E00C LDI R16,0xC
0342 D178 RCALL _LCD_write_byte
(0084) LCD_write_byte(0x80, 0);
0343 2722 CLR R18
0344 E800 LDI R16,0x80
0345 D175 RCALL _LCD_write_byte
(0085)
(0086) for (i=0; i<504; i++)
0346 2744 CLR R20
0347 2755 CLR R21
0348 C005 RJMP 0x034E
(0087) LCD_write_byte(0, 1);
0349 E021 LDI R18,1
034A 2700 CLR R16
034B D16F RCALL _LCD_write_byte
034C 5F4F SUBI R20,0xFF
034D 4F5F SBCI R21,0xFF
034E 3F48 CPI R20,0xF8
034F E0E1 LDI R30,1
0350 075E CPC R21,R30
0351 F3B8 BCS 0x0349
(0088) }
0352 D1B5 RCALL pop_gset1
0353 9508 RET
_LCD_set_XY:
Y --> R22
X --> R20
0354 D1C7 RCALL push_gset2
0355 2F62 MOV R22,R18
0356 2F40 MOV R20,R16
(0089)
(0090) /*-----------------------------------------------------------------------
(0091) LCD_set_XY : 设置LCD坐标函数
(0092)
(0093) 输入参数:X :0-83
(0094) Y :0-5
(0095)
(0096) 编写日期 :2004-8-10
(0097) 最后修改日期 :2004-8-10
(0098) -----------------------------------------------------------------------*/
(0099) void LCD_set_XY(unsigned char X, unsigned char Y)
(0100) {
(0101) LCD_write_byte(0x40 | Y, 0); // column
0357 2722 CLR R18
0358 2F06 MOV R16,R22
0359 6400 ORI R16,0x40
035A D160 RCALL _LCD_write_byte
(0102) LCD_write_byte(0x80 | X, 0); // row
035B 2722 CLR R18
035C 2F04 MOV R16,R20
035D 6800 ORI R16,0x80
035E D15C RCALL _LCD_write_byte
(0103) }
035F D19F RCALL pop_gset2
0360 9508 RET
_LCD_write_char:
line --> R20
c --> R22
0361 D1BA RCALL push_gset2
0362 2F60 MOV R22,R16
(0104)
(0105) /*-----------------------------------------------------------------------
(0106) LCD_write_char : 显示英文字符
(0107)
(0108) 输入参数:c :显示的字符;
(0109)
(0110) 编写日期 :2004-8-10
(0111) 最后修改日期 :2004-8-10
(0112) -----------------------------------------------------------------------*/
(0113) void LCD_write_char(unsigned char c)
(0114) {
(0115) unsigned char line;
(0116)
(0117) c -= 32;
0363 5260 SUBI R22,0x20
(0118)
(0119) for (line=0; line<6; line++)
0364 2744 CLR R20
0365 C00F RJMP 0x0375
(0120) LCD_write_byte(font6x8[c][line], 1);
0366 E021 LDI R18,1
0367 E086 LDI R24,6
0368 9F86 MUL R24,R22
0369 0110 MOVW R2,R0
036A EB86 LDI R24,0xB6
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -