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

📄 lcd.lst

📁 一个关于AVR单片机的例程
💻 LST
📖 第 1 页 / 共 2 页
字号:
__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 + -