📄 project.lst
字号:
__text_start:
__start:
060C E5CF LDI R28,0x5F
060D E0D4 LDI R29,4
060E BFCD OUT 0x3D,R28
060F BFDE OUT 0x3E,R29
0610 51C0 SUBI R28,0x10
0611 40D0 SBCI R29,0
0612 EA0A LDI R16,0xAA
0613 8308 STD Y+0,R16
0614 2400 CLR R0
0615 E6E4 LDI R30,0x64
0616 E0F0 LDI R31,0
0617 E010 LDI R17,0
0618 36E4 CPI R30,0x64
0619 07F1 CPC R31,R17
061A F011 BEQ 0x061D
061B 9201 ST R0,Z+
061C CFFB RJMP 0x0618
061D 8300 STD Z+0,R16
061E E1E4 LDI R30,0x14
061F E0FC LDI R31,0xC
0620 E6A0 LDI R26,0x60
0621 E0B0 LDI R27,0
0622 E01C LDI R17,0xC
0623 31E8 CPI R30,0x18
0624 07F1 CPC R31,R17
0625 F021 BEQ 0x062A
0626 95C8 LPM
0627 9631 ADIW R30,1
0628 920D ST R0,X+
0629 CFF9 RJMP 0x0623
062A 940E07EF CALL _main
_exit:
062C CFFF RJMP _exit
FILE: E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\点阵型LCD显示应用设计\app.c
(0001) //***************************************************************
(0002) // File Name : Gpio.c
(0003) // Author : Steaven
(0004) // Created : 2008-06-09
(0005) // Modified :
(0006) // Revision : V0.0
(0007) //***************************************************************
(0008)
(0009) #include "iom16v.h"
(0010) #include "DataType.h"
(0011) #include "app.h"
(0012)
(0013) //local function declaration
(0014) void Gpio_Init(void);
(0015) void Timer0_Init(void);
(0016) void Interrupt_Init(void);
(0017)
(0018) //***************************************************************
(0019) // Function : Hardware_Init
(0020) // Input : none
(0021) // Output : none
(0022) // Description : ATmega16 Hardware Initialization
(0023) //***************************************************************
(0024) void Hardware_Init(void)
(0025) {
(0026) Gpio_Init();
_Hardware_Init:
062D D002 RCALL _Gpio_Init
(0027) Timer0_Init();
062E D00F RCALL _Timer0_Init
(0028) Interrupt_Init();
(0029) }
062F C01B RJMP _Interrupt_Init
(0030)
(0031) //***************************************************************
(0032) // Function : Gpio_Init
(0033) // Input : none
(0034) // Output : none
(0035) // Description : ATmega16 GPIO Initialization
(0036) //***************************************************************
(0037) void Gpio_Init(void)
(0038) {
(0039) DDRA = 0xFF; //PortA - Output
_Gpio_Init:
0630 EF8F LDI R24,0xFF
0631 BB8A OUT 0x1A,R24
(0040) PORTA = 0x00; //Output all 0
0632 2422 CLR R2
0633 BA2B OUT 0x1B,R2
(0041) DDRB = 0x0F; //PortB - PB[7:4]/Input,PB[3:0]/Output
0634 E08F LDI R24,0xF
0635 BB87 OUT 0x17,R24
(0042) PORTB = 0xF0; //PB[7:4]/Input with pull-up,PB[3:0]/Output all 0
0636 EF80 LDI R24,0xF0
0637 BB88 OUT 0x18,R24
(0043) DDRC = 0xFF; //PortC - Output
0638 EF8F LDI R24,0xFF
0639 BB84 OUT 0x14,R24
(0044) PORTC = 0x00; //Output all 0
063A BA25 OUT 0x15,R2
(0045) DDRD = 0xFF; //PortD - Output
063B BB81 OUT 0x11,R24
(0046) PORTD = 0x00; //Output all 0
063C BA22 OUT 0x12,R2
(0047) }
063D 9508 RET
(0048)
(0049) //***************************************************************
(0050) // Function : Timer0_Init
(0051) // Input : none
(0052) // Output : none
(0053) // Description : ATmega16 Timer0 Initialization,10ms Interval
(0054) //***************************************************************
(0055) void Timer0_Init(void)
(0056) {
(0057) TCCR0 = 0x0D; //1024 division,8M/1024,CTC Mode
_Timer0_Init:
063E E08D LDI R24,0xD
063F BF83 OUT 0x33,R24
(0058) TCNT0 = 0x00; //Clear Counter
0640 2422 CLR R2
0641 BE22 OUT 0x32,R2
(0059) OCR0 = 78; //78 * 1024/8M = 10ms
0642 E48E LDI R24,0x4E
0643 BF8C OUT 0x3C,R24
(0060) TIMSK |= 0x02; //Enable OCIE0
0644 B789 IN R24,0x39
0645 6082 ORI R24,2
0646 BF89 OUT 0x39,R24
(0061) TIFR |= 0x02; //Clear OCIF0
0647 B788 IN R24,0x38
0648 6082 ORI R24,2
0649 BF88 OUT 0x38,R24
(0062) }
064A 9508 RET
(0063)
(0064) //***************************************************************
(0065) // Function : Interrupt_Init
(0066) // Input : none
(0067) // Output : none
(0068) // Description : ATmega16 Interrupt Initialization
(0069) //***************************************************************
(0070) void Interrupt_Init(void)
(0071) {
(0072) SREG |= 0x80; //Enable Global Interrupt
_Interrupt_Init:
064B 9478 BSET 7
(0073) }
064C 9508 RET
(0074)
(0075) //***************************************************************
(0076) // Function : Buzzer_ON/OFF
(0077) // Input : none
(0078) // Output : none
(0079) // Description : Buzzer ON/OFF Control
(0080) //***************************************************************
(0081) void Buzzer_ON(void)
(0082) {
(0083) PORTB |= 0x08;
_Buzzer_ON:
064D 9AC3 SBI 0x18,3
(0084) }
064E 9508 RET
(0085)
(0086) void Buzzer_OFF(void)
(0087) {
(0088) PORTB &= ~0x08;
_Buzzer_OFF:
064F 98C3 CBI 0x18,3
(0089) }
0650 9508 RET
FILE: E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\点阵型LCD显示应用设计\LCD.c
(0001) //******************************************************************************
(0002) // File Name : LCD.c
(0003) // Author : Steaven
(0004) // Created : 2008-07-27
(0005) // Modified :
(0006) // Revision : V0.0
(0007) //******************************************************************************
(0008)
(0009) //PIN DESCRIPTION
(0010) //01 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
(0011) //GND VCC V0 RS RW EN D0 D1 D2 D3 D4 D5 D6 D7 CS1 CS2 RST VEE BLA BLK
(0012) //GND +5V V0 PB0 PB1 PB2 PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 PC6 PC5 PC7 VEE +5V GND
(0013)
(0014) #include "iom16v.h"
(0015) #include "DataType.h"
(0016) #include "LCD.h"
(0017) #include "macros.h"
(0018)
(0019) #define cLCD_X_MAX 64
(0020) #define cLCD_Y_MAX 128
(0021)
(0022) //local functions declaration
(0023) void Set_DI(INT8U RS);
(0024) void Set_RW(INT8U RW);
(0025) void Set_EN(INT8U EN);
(0026) void Set_CS1(INT8U CS1);
(0027) void Set_CS2(INT8U CS2);
(0028) void Set_RST(INT8U RST);
(0029) void Set_Data(INT8U data);
(0030) void LCD_Command_DispOnOff(INT8U onoff);
(0031) void LCD_Command_SetStartLine(INT8U startline);
(0032) void LCD_Command_Set_X(INT8U x);
(0033) void LCD_Command_Set_Y(INT8U y);
(0034) void LCD_Command_WriteByte(INT8U data);
(0035) void LCD_Reset(void);
(0036) void LCD_Clear_Line(INT8U wStartLine,INT8U wEndLine);
(0037) void LCD_Init(void);
(0038) void WriteWord(INT8U const *disp,INT8U x,INT8U y);
(0039) void WriteCharacter(const INT8U *disp,INT8U x,INT8U y,INT8U cs);
(0040) void WritePIC(const INT8U *disp);
(0041) void LCD_Write_Char(INT8U y,INT8U x,const INT8U *pdata);
(0042) void LCD_Write_Dot(INT8U x,INT8U y);
(0043) void LCD_Write_Data(INT8U x,INT8U y,INT8U data);
(0044) void LCD_Write_Picture(INT8U x1,INT8U y1,INT8U x2,INT8U y2,const INT8U *pdata);
(0045)
(0046) //******************************************************************************
(0047) // Function : Set_RS
(0048) // Input : RS - RS Control Line Level
(0049) // Output : none
(0050) // Description : LCD(1602) Low Level Interface Function
(0051) //******************************************************************************
(0052) void Set_DI(INT8U RS)
(0053) {
(0054) if(RS == 0)
_Set_DI:
RS --> R16
0651 2300 TST R16
0652 F411 BNE 0x0655
(0055) {
(0056) PORTB &= ~0x01;
0653 98C0 CBI 0x18,0
(0057) }
0654 C001 RJMP 0x0656
(0058) else
(0059) {
(0060) PORTB |= 0x01;
0655 9AC0 SBI 0x18,0
(0061) }
(0062) }
0656 9508 RET
(0063)
(0064) //******************************************************************************
(0065) // Function : Set_RW
(0066) // Input : RW - RW Control Line Level
(0067) // Output : none
(0068) // Description : Low Level Interface Function
(0069) //******************************************************************************
(0070) void Set_RW(INT8U RW)
(0071) {
(0072) if(RW == 0)
_Set_RW:
RW --> R16
0657 2300 TST R16
0658 F411 BNE 0x065B
(0073) {
(0074) PORTB &= ~0x02;
0659 98C1 CBI 0x18,1
(0075) }
065A C001 RJMP 0x065C
(0076) else
(0077) {
(0078) PORTB |= 0x02;
065B 9AC1 SBI 0x18,1
(0079) }
(0080) }
065C 9508 RET
(0081)
(0082) //******************************************************************************
(0083) // Function : Set_EN
(0084) // Input : RW - RW Control Line Level
(0085) // Output : none
(0086) // Description : Low Level Interface Function
(0087) //******************************************************************************
(0088) void Set_EN(INT8U EN)
(0089) {
(0090) if(EN == 0)
_Set_EN:
EN --> R16
065D 2300 TST R16
065E F411 BNE 0x0661
(0091) {
(0092) PORTB &= ~0x04;
065F 98C2 CBI 0x18,2
(0093) }
0660 C001 RJMP 0x0662
(0094) else
(0095) {
(0096) PORTB |= 0x04;
0661 9AC2 SBI 0x18,2
(0097) }
(0098) }
0662 9508 RET
(0099)
(0100) //******************************************************************************
(0101) // Function : Set_CS2
(0102) // Input : CS2 - CS2 Control Line Level
(0103) // Output : none
(0104) // Description : Low Level Interface Function
(0105) //******************************************************************************
(0106) void Set_CS2(INT8U CS2)
(0107) {
(0108) if(CS2 == 0)
_Set_CS2:
CS2 --> R16
0663 2300 TST R16
0664 F411 BNE 0x0667
(0109) {
(0110) PORTC &= ~0x20;
0665 98AD CBI 0x15,5
(0111) }
0666 C001 RJMP 0x0668
(0112) else
(0113) {
(0114) PORTC |= 0x20;
0667 9AAD SBI 0x15,5
(0115) }
(0116) }
0668 9508 RET
(0117)
(0118) //******************************************************************************
(0119) // Function : Set_CS1
(0120) // Input : CS1 - CS1 Control Line Level
(0121) // Output : none
(0122) // Description : Low Level Interface Function
(0123) //******************************************************************************
(0124) void Set_CS1(INT8U CS1)
(0125) {
(0126) if(CS1 == 0)
_Set_CS1:
CS1 --> R16
0669 2300 TST R16
066A F411 BNE 0x066D
(0127) {
(0128) PORTC &= ~0x40;
066B 98AE CBI 0x15,6
(0129) }
066C C001 RJMP 0x066E
(0130) else
(0131) {
(0132) PORTC |= 0x40;
066D 9AAE SBI 0x15,6
(0133) }
(0134) }
066E 9508 RET
(0135)
(0136)
(0137) //******************************************************************************
(0138) // Function : Set_CS1
(0139) // Input : CS1 - CS1 Control Line Level
(0140) // Output : none
(0141) // Description : Low Level Interface Function
(0142) //******************************************************************************
(0143) void Set_RST(INT8U RST)
(0144) {
(0145) if(RST == 0)
_Set_RST:
RST --> R16
066F 2300 TST R16
0670 F411 BNE 0x0673
(0146) {
(0147) PORTC &= ~0x80;
0671 98AF CBI 0x15,7
(0148) }
0672 C001 RJMP 0x0674
(0149) else
(0150) {
(0151) PORTC |= 0x80;
0673 9AAF SBI 0x15,7
(0152) }
(0153) }
0674 9508 RET
(0154)
(0155) //******************************************************************************
(0156) // Function : Set_Data
(0157) // Input : data - Data Line Level
(0158) // Output : none
(0159) // Description : Low Level Interface Function
(0160) //******************************************************************************
(0161) void Set_Data(INT8U data)
(0162) {
(0163) PORTA = data;
_Set_Data:
data --> R16
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -