📄 lcd.lst
字号:
__text_start:
__start:
010E E5CF LDI R28,0x5F
010F E0D4 LDI R29,4
0110 BFCD OUT 0x3D,R28
0111 BFDE OUT 0x3E,R29
0112 51C0 SUBI R28,0x10
0113 40D0 SBCI R29,0
0114 EA0A LDI R16,0xAA
0115 8308 STD Y+0,R16
0116 2400 CLR R0
0117 E6E0 LDI R30,0x60
0118 E0F0 LDI R31,0
0119 E010 LDI R17,0
011A 36E0 CPI R30,0x60
011B 07F1 CPC R31,R17
011C F011 BEQ 0x011F
011D 9201 ST R0,Z+
011E CFFB RJMP 0x011A
011F 8300 STD Z+0,R16
0120 E1EB LDI R30,0x1B
0121 E0F2 LDI R31,2
0122 E6A0 LDI R26,0x60
0123 E0B0 LDI R27,0
0124 E012 LDI R17,2
0125 31EB CPI R30,0x1B
0126 07F1 CPC R31,R17
0127 F021 BEQ 0x012C
0128 95C8 LPM
0129 9631 ADIW R30,1
012A 920D ST R0,X+
012B CFF9 RJMP 0x0125
012C 940E0188 CALL _main
_exit:
012E CFFF RJMP _exit
FILE: E:\avr\5110\lcd2\main.c
(0001) //ICC-AVR application builder : 2007-5-3 4:45:38
(0002) // Target : M16
(0003) // Crystal: 7.3728Mhz
(0004)
(0005) #include <iom16v.h>
(0006) #include <macros.h>
(0007)
(0008) #define LCD_RST_PIN 0x01 // PB0
(0009) #define LCD_CE_PIN 0x02 // PB1
(0010) #define LCD_DC_PIN 0x04 // PB2
(0011) #define SPI_MOSI_PIN 0x20 // PB5
(0012) #define SPI_CLK_PIN 0x80 // PB7
(0013)
(0014) #define X_Length 45
(0015) #define X_Init 0
(0016) #define Y_Init 0
(0017)
(0018)
(0019) static const char FontLookup [][5] =
(0020) {
(0021) { 0x00, 0x00, 0x00, 0x00, 0x00 }, // sp
(0022) { 0x00, 0x00, 0x2f, 0x00, 0x00 }, // !
(0023) { 0x00, 0x07, 0x00, 0x07, 0x00 }, // "
(0024) { 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // #
(0025) { 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // $
(0026) { 0xc4, 0xc8, 0x10, 0x26, 0x46 }, // %
(0027) { 0x36, 0x49, 0x55, 0x22, 0x50 }, // &
(0028) { 0x00, 0x05, 0x03, 0x00, 0x00 }, // '
(0029) { 0x00, 0x1c, 0x22, 0x41, 0x00 }, // (
(0030) { 0x00, 0x41, 0x22, 0x1c, 0x00 }, // )
(0031) { 0x14, 0x08, 0x3E, 0x08, 0x14 }, // *
(0032) { 0x08, 0x08, 0x3E, 0x08, 0x08 }, // +
(0033) { 0x00, 0x00, 0x50, 0x30, 0x00 }, // ,
(0034) { 0x10, 0x10, 0x10, 0x10, 0x10 }, // -
(0035) { 0x00, 0x60, 0x60, 0x00, 0x00 }, // .
(0036) { 0x20, 0x10, 0x08, 0x04, 0x02 }, // /
(0037) { 0x3E, 0x51, 0x49, 0x45, 0x3E }, // 0
(0038) { 0x00, 0x42, 0x7F, 0x40, 0x00 }, // 1
(0039) { 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2
(0040) { 0x21, 0x41, 0x45, 0x4B, 0x31 }, // 3
(0041) { 0x18, 0x14, 0x12, 0x7F, 0x10 }, // 4
(0042) { 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5
(0043) { 0x3C, 0x4A, 0x49, 0x49, 0x30 }, // 6
(0044) { 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7
(0045) { 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8
(0046) { 0x06, 0x49, 0x49, 0x29, 0x1E }, // 9
(0047) { 0x00, 0x36, 0x36, 0x00, 0x00 }, // :
(0048) { 0x00, 0x56, 0x36, 0x00, 0x00 }, // ;
(0049) { 0x08, 0x14, 0x22, 0x41, 0x00 }, // <
(0050) { 0x14, 0x14, 0x14, 0x14, 0x14 }, // =
(0051) { 0x00, 0x41, 0x22, 0x14, 0x08 }, // >
(0052) { 0x02, 0x01, 0x51, 0x09, 0x06 }, // ?
(0053) { 0x32, 0x49, 0x59, 0x51, 0x3E }, // @
(0054) { 0x7E, 0x11, 0x11, 0x11, 0x7E }, // A
(0055) { 0x7F, 0x49, 0x49, 0x49, 0x36 }, // B
(0056) { 0x3E, 0x41, 0x41, 0x41, 0x22 }, // C
(0057) { 0x7F, 0x41, 0x41, 0x22, 0x1C }, // D
(0058) { 0x7F, 0x49, 0x49, 0x49, 0x41 }, // E
(0059) { 0x7F, 0x09, 0x09, 0x09, 0x01 }, // F
(0060) { 0x3E, 0x41, 0x49, 0x49, 0x7A }, // G
(0061) { 0x7F, 0x08, 0x08, 0x08, 0x7F }, // H
(0062) { 0x00, 0x41, 0x7F, 0x41, 0x00 }, // I
(0063) { 0x20, 0x40, 0x41, 0x3F, 0x01 }, // J
(0064) { 0x7F, 0x08, 0x14, 0x22, 0x41 }, // K
(0065) { 0x7F, 0x40, 0x40, 0x40, 0x40 }, // L
(0066) { 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // M
(0067) { 0x7F, 0x04, 0x08, 0x10, 0x7F }, // N
(0068) { 0x3E, 0x41, 0x41, 0x41, 0x3E }, // O
(0069) { 0x7F, 0x09, 0x09, 0x09, 0x06 }, // P
(0070) { 0x3E, 0x41, 0x51, 0x21, 0x5E }, // Q
(0071) { 0x7F, 0x09, 0x19, 0x29, 0x46 }, // R
(0072) { 0x46, 0x49, 0x49, 0x49, 0x31 }, // S
(0073) { 0x01, 0x01, 0x7F, 0x01, 0x01 }, // T
(0074) { 0x3F, 0x40, 0x40, 0x40, 0x3F }, // U
(0075) { 0x1F, 0x20, 0x40, 0x20, 0x1F }, // V
(0076) { 0x3F, 0x40, 0x38, 0x40, 0x3F }, // W
(0077) { 0x63, 0x14, 0x08, 0x14, 0x63 }, // X
(0078) { 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y
(0079) { 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z
(0080) { 0x00, 0x7F, 0x41, 0x41, 0x00 }, // [
(0081) { 0x55, 0x2A, 0x55, 0x2A, 0x55 }, // 55
(0082) { 0x00, 0x41, 0x41, 0x7F, 0x00 }, // ]
(0083) { 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^
(0084) { 0x40, 0x40, 0x40, 0x40, 0x40 }, // _
(0085) { 0x00, 0x01, 0x02, 0x04, 0x00 }, // '
(0086) { 0x20, 0x54, 0x54, 0x54, 0x78 }, // a
(0087) { 0x7F, 0x48, 0x44, 0x44, 0x38 }, // b
(0088) { 0x38, 0x44, 0x44, 0x44, 0x20 }, // c
(0089) { 0x38, 0x44, 0x44, 0x48, 0x7F }, // d
(0090) { 0x38, 0x54, 0x54, 0x54, 0x18 }, // e
(0091) { 0x08, 0x7E, 0x09, 0x01, 0x02 }, // f
(0092) { 0x0C, 0x52, 0x52, 0x52, 0x3E }, // g
(0093) { 0x7F, 0x08, 0x04, 0x04, 0x78 }, // h
(0094) { 0x00, 0x44, 0x7D, 0x40, 0x00 }, // i
(0095) { 0x20, 0x40, 0x44, 0x3D, 0x00 }, // j
(0096) { 0x7F, 0x10, 0x28, 0x44, 0x00 }, // k
(0097) { 0x00, 0x41, 0x7F, 0x40, 0x00 }, // l
(0098) { 0x7C, 0x04, 0x18, 0x04, 0x78 }, // m
(0099) { 0x7C, 0x08, 0x04, 0x04, 0x78 }, // n
(0100) { 0x38, 0x44, 0x44, 0x44, 0x38 }, // o
(0101) { 0x7C, 0x14, 0x14, 0x14, 0x08 }, // p
(0102) { 0x08, 0x14, 0x14, 0x18, 0x7C }, // q
(0103) { 0x7C, 0x08, 0x04, 0x04, 0x08 }, // r
(0104) { 0x48, 0x54, 0x54, 0x54, 0x20 }, // s
(0105) { 0x04, 0x3F, 0x44, 0x40, 0x20 }, // t
(0106) { 0x3C, 0x40, 0x40, 0x20, 0x7C }, // u
(0107) { 0x1C, 0x20, 0x40, 0x20, 0x1C }, // v
(0108) { 0x3C, 0x40, 0x30, 0x40, 0x3C }, // w
(0109) { 0x44, 0x28, 0x10, 0x28, 0x44 }, // x
(0110) { 0x0C, 0x50, 0x50, 0x50, 0x3C }, // y
(0111) { 0x44, 0x64, 0x54, 0x4C, 0x44 } // z
(0112) };
(0113)
(0114)
(0115) /*--------------------------------------------------------------------------------------------------
(0116) Public function prototypes
(0117) --------------------------------------------------------------------------------------------------*/
(0118) void LcdInit ( void );
(0119) void LcdClear ( void );
(0120)
(0121) static void LcdSend ( unsigned char, unsigned char);
(0122) static void Delay ( void );
(0123) void LcdGotoXY ( unsigned char, unsigned char );
(0124)
(0125)
(0126) /*--------------------------------------------------------------------------------------------------
(0127) Name : LcdInit
(0128) Description : Performs MCU SPI & LCD controller initialization.
(0129) Argument(s) : None.
(0130) Return value : None.
(0131) --------------------------------------------------------------------------------------------------*/
(0132) void LcdInit( void )
(0133) {
(0134) //unsigned char Clear;
(0135) // Pull-up on reset pin,上电复位端口,此时为高,不复位;
(0136) PORTB |= LCD_RST_PIN;
_LcdInit:
012F 9AC0 SBI 0x18,0
(0137)
(0138) // Set output bits on port B,设置输出口;
(0139) DDRB |= LCD_RST_PIN | LCD_DC_PIN | LCD_CE_PIN | SPI_MOSI_PIN | SPI_CLK_PIN;
0130 B387 IN R24,0x17
0131 6A87 ORI R24,0xA7
0132 BB87 OUT 0x17,R24
(0140)
(0141) Delay();
0133 D04B RCALL _Delay
(0142)
(0143) // Toggle display reset pin.
(0144) PORTB &= ~LCD_RST_PIN; //上电复位;
0134 98C0 CBI 0x18,0
(0145) Delay();
0135 D049 RCALL _Delay
(0146) PORTB |= LCD_RST_PIN; //复位完;
0136 9AC0 SBI 0x18,0
(0147)
(0148) // SPI初始化;Enable SPI port: No interrupt, MSBit first, Master mode, CPOL->0, CPHA->0, Clk/4
(0149) SPCR = BIT(SPE)|BIT(MSTR); //使能SPI,主机模式;
0137 E580 LDI R24,0x50
0138 B98D OUT 0x0D,R24
(0150) //SPSR = 0x00; //似乎不用这几句也能正常运行;
(0151) //Clear= SPSR;
(0152) //Clear= SPDR;
(0153) // Disable LCD controller
(0154) PORTB |= LCD_CE_PIN;
0139 9AC1 SBI 0x18,1
(0155)
(0156) LcdSend( 0x21, 0 ); // LCD Extended Commands.
013A 2722 CLR R18
013B E201 LDI R16,0x21
013C D037 RCALL _LcdSend
(0157) LcdSend( 0xC8, 0 ); // Set LCD Vop (Contrast).
013D 2722 CLR R18
013E EC08 LDI R16,0xC8
013F D034 RCALL _LcdSend
(0158) LcdSend( 0x06, 0 ); // Set Temp coefficent.
0140 2722 CLR R18
0141 E006 LDI R16,6
0142 D031 RCALL _LcdSend
(0159) LcdSend( 0x13, 0 ); // LCD bias mode 1:48.
0143 2722 CLR R18
0144 E103 LDI R16,0x13
0145 D02E RCALL _LcdSend
(0160) LcdSend( 0x20, 0 ); // LCD Standard Commands, Horizontal addressing mode.
0146 2722 CLR R18
0147 E200 LDI R16,0x20
0148 D02B RCALL _LcdSend
(0161) LcdSend( 0x0C, 0 ); // LCD in normal mode.
0149 2722 CLR R18
014A E00C LDI R16,0xC
014B D028 RCALL _LcdSend
(0162)
(0163) LcdClear();
014C D001 RCALL _LcdClear
014D 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -