📄 nokia5110.lst
字号:
Interrupt Vectors
00000 940C 0255 JMP __start|__text_start
Program Code (text area)
__start|__text_start:
00255 EFCF LDI R28,0xFF
00256 E2D1 LDI R29,0x21
00257 BFCD OUT 0x3D,R28
00258 BFDE OUT 0x3E,R29
00259 51CE SUBI R28,0x1E
0025A 40D0 SBCI R29,0
0025B EA0A LDI R16,0xAA
0025C 8308 ST Y,R16
0025D 2400 CLR R0
0025E ECE6 LDI R30,0xC6
0025F E0F5 LDI R31,5
00260 E015 LDI R17,5
00261 3CE6 CPI R30,0xC6
00262 07F1 CPC R31,R17
00263 F011 BEQ 0x0266
00264 9201 ST Z+,R0
00265 CFFB RJMP 0x0261
00266 8300 ST Z,R16
00267 EEE4 LDI R30,0xE4
00268 E0F0 LDI R31,0
00269 E0A0 LDI R26,0
0026A E0B2 LDI R27,2
0026B E014 LDI R17,4
0026C E000 LDI R16,0
0026D BF0B OUT 0x3B,R16
0026E 3AEA CPI R30,0xAA
0026F 07F1 CPC R31,R17
00270 F021 BEQ 0x0275
00271 95C8 LPM
00272 9631 ADIW R30,1
00273 920D ST X+,R0
00274 CFF9 RJMP 0x026E
00275 940E 039C CALL _main
_exit:
00277 CFFF RJMP _exit
FILE: D:\蔺贻立\模块化编程\avr程序\7.nokia5110\nokia5110.h
(0001)
(0002)
(0003) #include <iom16v.h>
(0004) #include <MACROS.h>
(0005)
(0006) // Define I/O pins
(0007) #define BIT7 0x80
(0008) #define BIT6 0x40
(0009) #define BIT5 0x20
(0010) #define BIT4 0x10
(0011) #define BIT3 0x08
(0012) #define BIT2 0x04
(0013) #define BIT1 0x02
(0014) #define BIT0 0x01
(0015)
(0016) #define LCD_PORT PORTC
(0017) #define LCD_DIR DDRC
(0018) #define LCD_IN PINC
(0019)
(0020) #define SCLK BIT1
(0021) #define SDIN BIT2
(0022) #define LCD_DC BIT3
(0023) #define LCD_CE BIT5
(0024) #define LCD_RST BIT4
(0025)
(0026) //enable global interrupts
(0027) #define GIE (SREG |= BIT(7))
(0028) //disable global interrupts
(0029) #define GID (SREG &= ~BIT(7))
(0030) #define SLEEP() asm("sleep")
(0031)
(0032) /* enables an unsigned char to be used as a series of booleans */
(0033) #define BIT(x) (1 << (x))
(0034) #define SETBIT(x, y) (x |= y)
(0035) #define CLEARBIT(x, y) (x &= ~y)
(0036) #define CHECKBIT(x, y) (x & y)
(0037)
(0038) #define true 1
(0039) #define True 1
(0040) #define false 0
(0041) #define False 0
(0042)
(0043) unsigned char AVR_bmp[]=
(0044) {
(0045) /*60x47*/
(0046) 0x00,0x00,0x00,0x00,0x80,0xE0,0xFC,0xFF,0xFF,0xFF,0x7F,0xFF,0xFE,0xFC,0xF0,0xC1,
(0047) 0x0F,0x7F,0xFF,0xFF,0xFE,0xF0,0xC0,0x00,0x00,0x00,0xC0,0xF8,0xFE,0xFF,0xFF,0x3F,
(0048) 0x07,0xC1,0xF0,0xFE,0xFF,0xFF,0xFF,0x1F,0x07,0x8F,0xCF,0xFF,0xFF,0xFF,0xFE,0xFC,
(0049) 0x00,0x80,0xF0,0xFC,0xFF,0xFF,0xFF,0x7F,0x7F,0x78,0x78,0x79,0x7F,0x7F,0xFF,0xFF,
(0050) 0xFC,0xF0,0xC1,0x07,0x1F,0xFF,0xFF,0xFE,0xFC,0xFF,0xFF,0xFF,0x1F,0x07,0xC1,0xF0,
(0051) 0xFE,0xFF,0xFF,0x3F,0x0F,0x0F,0x7F,0xFF,0xFF,0xFF,0xFF,0xE7,0x07,0x03,0x01,0x00,
(0052) 0x02,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,
(0053) 0x03,0x03,0x03,0x03,0x00,0x00,0x03,0x1F,0x3F,0x1F,0x07,0x00,0x00,0x02,0x03,0x03,
(0054) 0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00
(0055) };
(0056)
(0057) const unsigned char HZK[][24]={
(0058) //我
(0059) {0x8A,0x8A,0x4A,0xFE,0x49,0x28,0x7F,0x88,0x49,0x2A,0x08,0x00,0x00,0x04,0x04,0x07,0x02,0x02,0x01,0x01,0x02,0x04,0x07,0x00},
(0060) //爱
(0061) {0x18,0x2A,0x2A,0x2E,0xFA,0xAE,0xA9,0xAD,0xAB,0x29,0x18,0x00,0x04,0x04,0x02,0x05,0x05,0x02,0x02,0x05,0x04,0x04,0x04,0x00},
(0062) //测
(0063) {0x89,0xF2,0x00,0xFF,0x01,0xF9,0xFF,0x00,0xFC,0x00,0xFF,0x00,0x00,0x07,0x04,0x04,0x02,0x01,0x02,0x04,0x01,0x04,0x07,0x00},
(0064) //试
(0065) {0x11,0xF6,0x00,0x04,0x24,0xE4,0x24,0x24,0xFF,0x05,0x06,0x00,0x00,0x07,0x02,0x01,0x02,0x03,0x01,0x01,0x01,0x02,0x07,0x00},
(0066) //程
(0067) {0x8A,0x6A,0xFF,0x49,0x20,0xAF,0xA9,0xE9,0xA9,0xAF,0x20,0x00,0x01,0x00,0x07,0x00,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0x00},
(0068) //序
(0069) {0x00,0xFE,0x42,0x4A,0x4A,0x5B,0xEA,0x5A,0x4A,0xC2,0x42,0x00,0x06,0x01,0x00,0x00,0x04,0x04,0x07,0x00,0x00,0x00,0x00,0x00},
(0070) //电
(0071) {0x00,0xFC,0x94,0x94,0x94,0xFF,0x94,0x94,0x94,0xFE,0x04,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x04,0x04,0x04,0x04,0x06,0x00},
(0072) //子
(0073) {0x20,0x21,0x21,0x21,0x21,0xF9,0x29,0x25,0x23,0x31,0x20,0x00,0x00,0x00,0x00,0x04,0x04,0x07,0x00,0x00,0x00,0x00,0x00,0x00},
(0074) //制
(0075) {0x18,0xD6,0x54,0xFF,0x54,0x56,0xD4,0x00,0xFC,0x00,0xFF,0x00,0x00,0x03,0x00,0x07,0x00,0x02,0x03,0x00,0x04,0x04,0x07,0x00},
(0076) //作
(0077) {0x10,0x08,0xFC,0x13,0x08,0x04,0xFF,0x24,0x24,0x24,0x04,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x01,0x01,0x01,0x01,0x00},
(0078) };
(0079)
(0080) /**********************************
(0081) 6 x 8 font
(0082) 1 pixel space at left and bottom
(0083) index = ASCII - 32
(0084) ***********************************/
(0085) const unsigned char font6x8[][6] =
(0086) {
(0087) { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // sp
(0088) { 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 }, // !
(0089) { 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 }, // "
(0090) { 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // #
(0091) { 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // $
(0092) { 0x00, 0x62, 0x64, 0x08, 0x13, 0x23 }, // %
(0093) { 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 }, // &
(0094) { 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 }, // '
(0095) { 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 }, // (
(0096) { 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 }, // )
(0097) { 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 }, // *
(0098) { 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 }, // +
(0099) { 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 }, // ,
(0100) { 0x00, 0x08, 0x08, 0x08, 0x08, 0x08 }, // -
(0101) { 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 }, // .
(0102) { 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 }, // /
(0103) { 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E }, // 0
(0104) { 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 }, // 1
(0105) { 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2
(0106) { 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 }, // 3
(0107) { 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 }, // 4
(0108) { 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5
(0109) { 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 }, // 6
(0110) { 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7
(0111) { 0x00, 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8
(0112) { 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E }, // 9
(0113) { 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 }, // :
(0114) { 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 }, // ;
(0115) { 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 }, // <
(0116) { 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 }, // =
(0117) { 0x00, 0x00, 0x41, 0x22, 0x14, 0x08 }, // >
(0118) { 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 }, // ?
(0119) { 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E }, // @
(0120) { 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C }, // A
(0121) { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 }, // B
(0122) { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 }, // C
(0123) { 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C }, // D
(0124) { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 }, // E
(0125) { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 }, // F
(0126) { 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A }, // G
(0127) { 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F }, // H
(0128) { 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 }, // I
(0129) { 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 }, // J
(0130) { 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 }, // K
(0131) { 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 }, // L
(0132) { 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // M
(0133) { 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F }, // N
(0134) { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E }, // O
(0135) { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 }, // P
(0136) { 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E }, // Q
(0137) { 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 }, // R
(0138) { 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 }, // S
(0139) { 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 }, // T
(0140) { 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F }, // U
(0141) { 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F }, // V
(0142) { 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F }, // W
(0143) { 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 }, // X
(0144) { 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y
(0145) { 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z
(0146) { 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 }, // [
(0147) { 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55 }, // 55
(0148) { 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 }, // ]
(0149) { 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^
(0150) { 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 }, // _
(0151) { 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 }, // '
(0152) { 0x00, 0x20, 0x54, 0x54, 0x54, 0x78 }, // a
(0153) { 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 }, // b
(0154) { 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 }, // c
(0155) { 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F }, // d
(0156) { 0x00, 0x38, 0x54, 0x54, 0x54, 0x18 }, // e
(0157) { 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 }, // f
(0158) { 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C }, // g
(0159) { 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 }, // h
(0160) { 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 }, // i
(0161) { 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 }, // j
(0162) { 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 }, // k
(0163) { 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 }, // l
(0164) { 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 }, // m
(0165) { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 }, // n
(0166) { 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 }, // o
(0167) { 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 }, // p
(0168) { 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC }, // q
(0169) { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 }, // r
(0170) { 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 }, // s
(0171) { 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 }, // t
(0172) { 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C }, // u
(0173) { 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C }, // v
(0174) { 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C }, // w
(0175) { 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 }, // x
(0176) { 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C }, // y
(0177) { 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 }, // z
(0178) { 0x14, 0x14, 0x14, 0x14, 0x14, 0x14 } // horiz lines
(0179) };
(0180)
(0181) void LCD_init(void);
(0182) void LCD_clear(void);
(0183) void delay_1us(void);
(0184) void LCD_set_XY(unsigned char x,unsigned char y);
(0185) void LCD_write_char(unsigned char c);
(0186) void LCD_write_english_string(unsigned char X,unsigned char Y,char *s);
(0187) void LCD_write_chinese_string(unsigned char X, unsigned char Y,unsigned char ch_with,unsigned char num,unsigned char line,unsigned char row);
(0188) void LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char *map,unsigned char Pix_x,unsigned char Pix_y);
(0189) void LCD_write_byte(unsigned char dat, unsigned char command);
(0190)
(0191) /******************************************/
(0192) void LCD_init(void)
(0193) {
(0194) //先设置为输出
(0195) SETBIT(LCD_DIR,SCLK);
_LCD_init:
00278 9AA1 SBI 0x14,1
(0196) SETBIT(LCD_DIR,SDIN);
00279 9AA2 SBI 0x14,2
(0197) SETBIT(LCD_DIR,LCD_DC);
0027A 9AA3 SBI 0x14,3
(0198) SETBIT(LCD_DIR,LCD_CE);
0027B 9AA5 SBI 0x14,5
(0199) SETBIT(LCD_DIR,LCD_RST);
0027C 9AA4 SBI 0x14,4
(0200)
(0201) // 产生一个让LCD复位的低电平脉冲
(0202) CLEARBIT(LCD_PORT,LCD_RST);//LCD_RST = 0;
0027D 98AC CBI 0x15,4
(0203) delay_1us();
0027E D031 RCALL _delay_1us
(0204) SETBIT(LCD_PORT,LCD_RST);//LCD_RST = 1;
0027F 9AAC SBI 0x15,4
(0205)
(0206) // 关闭LCD
(0207) CLEARBIT(LCD_PORT,LCD_CE);//LCD_CE = 0;
00280 98AD CBI 0x15,5
(0208) delay_1us();
00281 D02E RCALL _delay_1us
(0209)
(0210) // 使能LCD
(0211) SETBIT(LCD_PORT,LCD_CE);//LCD_CE = 1;
00282 9AAD SBI 0x15,5
(0212) delay_1us();
00283 D02C RCALL _delay_1us
(0213)
(0214) LCD_write_byte(0x21, 0); // 使用扩展命令设置LCD模式
00284 2722 CLR R18
00285 E201 LDI R16,0x21
00286 D0FE RCALL _LCD_write_byte
(0215) LCD_write_byte(0xc8, 0); // 设置偏置电压
00287 2722 CLR R18
00288 EC08 LDI R16,0xC8
00289 D0FB RCALL _LCD_write_byte
(0216) LCD_write_byte(0x06, 0); // 温度校正
0028A 2722 CLR R18
0028B E006 LDI R16,6
0028C D0F8 RCALL _LCD_write_byte
(0217) LCD_write_byte(0x13, 0); // 1:48
0028D 2722 CLR R18
0028E E103 LDI R16,0x13
0028F D0F5 RCALL _LCD_write_byte
(0218) LCD_write_byte(0x20, 0); // 使用基本命令
00290 2722 CLR R18
00291 E200 LDI R16,0x20
00292 D0F2 RCALL _LCD_write_byte
(0219) LCD_clear(); // 清屏
00293 D005 RCALL _LCD_clear
(0220) LCD_write_byte(0x0c, 0); // 设定显示模式,正常显示
00294 2722 CLR R18
00295 E00C LDI R16,0xC
00296 D0EE RCALL _LCD_write_byte
(0221)
(0222) // 关闭LCD
(0223) CLEARBIT(LCD_PORT,LCD_CE); //LCD_CE = 0;
00297 98AD CBI 0x15,5
00298 9508 RET
_LCD_clear:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -