📄 project.lst
字号:
__text_start:
__start:
006F E5CF LDI R28,0x5F
0070 E0D4 LDI R29,4
0071 BFCD OUT 0x3D,R28
0072 BFDE OUT 0x3E,R29
0073 51C0 SUBI R28,0x10
0074 40D0 SBCI R29,0
0075 EA0A LDI R16,0xAA
0076 8308 STD Y+0,R16
0077 2400 CLR R0
0078 EEE9 LDI R30,0xE9
0079 E0F0 LDI R31,0
007A E010 LDI R17,0
007B 3EE9 CPI R30,0xE9
007C 07F1 CPC R31,R17
007D F011 BEQ 0x0080
007E 9201 ST R0,Z+
007F CFFB RJMP 0x007B
0080 8300 STD Z+0,R16
0081 E5E4 LDI R30,0x54
0082 E0F0 LDI R31,0
0083 E6A0 LDI R26,0x60
0084 E0B0 LDI R27,0
0085 E010 LDI R17,0
0086 3DED CPI R30,0xDD
0087 07F1 CPC R31,R17
0088 F021 BEQ 0x008D
0089 95C8 LPM
008A 9631 ADIW R30,1
008B 920D ST R0,X+
008C CFF9 RJMP 0x0086
008D 940E0090 CALL _main
_exit:
008F CFFF RJMP _exit
_main:
0090 9722 SBIW R28,2
FILE: E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\字符型LCD显示应用设计\main.c
(0001) //***************************************************************
(0002) // File Name : LED.c
(0003) // Author : Steaven
(0004) // Created : 2008-07-26
(0005) // Modified :
(0006) // Revision : V0.0
(0007) //***************************************************************
(0008)
(0009) #include "iom16v.h"
(0010) #include "DataType.h"
(0011) #include "app.h"
(0012) #include "lcd.h"
(0013)
(0014) //global variables
(0015) INT8U Key0_Flag = 0; //Flag of Key0 Pressed
(0016) INT8U Key1_Flag = 0; //Flag of Key0 Pressed
(0017) INT8U Key2_Flag = 0; //Flag of Key0 Pressed
(0018) INT8U Key3_Flag = 0; //Flag of Key0 Pressed
(0019) INT8U NoKey_Flag = 0; //Flag of No Key Pressed
(0020)
(0021) void main(void)
(0022) {
(0023) Hardware_Init();
0091 940E0169 CALL _Hardware_Init
(0024) LCD_Reset();
0093 940E026D CALL _LCD_Reset
(0025) LCD_Show_String(0,0,"=*= KEY DEMO =*=");
0095 ED84 LDI R24,0xD4
0096 E090 LDI R25,0
0097 8399 STD Y+1,R25
0098 8388 STD Y+0,R24
0099 2722 CLR R18
009A 2700 CLR R16
009B 940E02A2 CALL _LCD_Show_String
(0026) LCD_Show_String(1,0,"No Key Pressed! ");
009D EC83 LDI R24,0xC3
009E E090 LDI R25,0
009F 8399 STD Y+1,R25
00A0 8388 STD Y+0,R24
00A1 2722 CLR R18
00A2 E001 LDI R16,1
00A3 940E02A2 CALL _LCD_Show_String
00A5 C04B RJMP 0x00F1
(0027)
(0028) while(1)
(0029) {
(0030) if(Key0_Flag == 1)
00A6 91800060 LDS R24,0x60
00A8 3081 CPI R24,1
00A9 F459 BNE 0x00B5
(0031) {
(0032) Key0_Flag = 0;
00AA 2422 CLR R2
00AB 92200060 STS 0x60,R2
(0033) LCD_Show_String(1,0,"Key0 is Pressed! ");
00AD EB81 LDI R24,0xB1
00AE E090 LDI R25,0
00AF 8399 STD Y+1,R25
00B0 8388 STD Y+0,R24
00B1 2722 CLR R18
00B2 E001 LDI R16,1
00B3 940E02A2 CALL _LCD_Show_String
(0034) }
(0035) if(Key1_Flag == 1)
00B5 91800061 LDS R24,0x61
00B7 3081 CPI R24,1
00B8 F459 BNE 0x00C4
(0036) {
(0037) Key1_Flag = 0;
00B9 2422 CLR R2
00BA 92200061 STS 0x61,R2
(0038) LCD_Show_String(1,0,"Key1 is Pressed! ");
00BC E98F LDI R24,0x9F
00BD E090 LDI R25,0
00BE 8399 STD Y+1,R25
00BF 8388 STD Y+0,R24
00C0 2722 CLR R18
00C1 E001 LDI R16,1
00C2 940E02A2 CALL _LCD_Show_String
(0039) }
(0040) if(Key2_Flag == 1)
00C4 91800062 LDS R24,0x62
00C6 3081 CPI R24,1
00C7 F459 BNE 0x00D3
(0041) {
(0042) Key2_Flag = 0;
00C8 2422 CLR R2
00C9 92200062 STS 0x62,R2
(0043) LCD_Show_String(1,0,"Key2 is Pressed! ");
00CB E88D LDI R24,0x8D
00CC E090 LDI R25,0
00CD 8399 STD Y+1,R25
00CE 8388 STD Y+0,R24
00CF 2722 CLR R18
00D0 E001 LDI R16,1
00D1 940E02A2 CALL _LCD_Show_String
(0044) }
(0045) if(Key3_Flag == 1)
00D3 91800063 LDS R24,0x63
00D5 3081 CPI R24,1
00D6 F459 BNE 0x00E2
(0046) {
(0047) Key3_Flag = 0;
00D7 2422 CLR R2
00D8 92200063 STS 0x63,R2
(0048) LCD_Show_String(1,0,"Key3 is Pressed! ");
00DA E78B LDI R24,0x7B
00DB E090 LDI R25,0
00DC 8399 STD Y+1,R25
00DD 8388 STD Y+0,R24
00DE 2722 CLR R18
00DF E001 LDI R16,1
00E0 940E02A2 CALL _LCD_Show_String
(0049) }
(0050) if(NoKey_Flag == 1)
00E2 91800064 LDS R24,0x64
00E4 3081 CPI R24,1
00E5 F459 BNE 0x00F1
(0051) {
(0052) NoKey_Flag = 0;
00E6 2422 CLR R2
00E7 92200064 STS 0x64,R2
(0053) LCD_Show_String(1,0,"No Key Pressed! ");
00E9 E689 LDI R24,0x69
00EA E090 LDI R25,0
00EB 8399 STD Y+1,R25
00EC 8388 STD Y+0,R24
00ED 2722 CLR R18
00EE E001 LDI R16,1
00EF 940E02A2 CALL _LCD_Show_String
00F1 CFB4 RJMP 0x00A6
(0054) }
(0055) }
(0056) }
00F2 9622 ADIW R28,2
00F3 9508 RET
_Timer0_Interrupt:
00F4 940E0308 CALL push_lset
(0057)
(0058) //***************************************************************
(0059) // Function : Timer0_Interrupt
(0060) // Input : none
(0061) // Output : none
(0062) // Description : ATmega16 T/C0 ISR
(0063) //***************************************************************
(0064) #pragma interrupt_handler Timer0_Interrupt:20
(0065) void Timer0_Interrupt(void)
(0066) {
(0067) static INT16U key_count = 0;
(0068) static INT8U buzzer_count = 0;
(0069) static INT8U buzzer_status = 0;
(0070)
(0071) //Clear Timer0 OCIF Flag
(0072) TIFR |= 0x02;
00F6 B788 IN R24,0x38
00F7 6082 ORI R24,2
00F8 BF88 OUT 0x38,R24
(0073) TCNT0 = 0x00;
00F9 2422 CLR R2
00FA BE22 OUT 0x32,R2
(0074) //Key Detection
(0075) if(Get_Key0() == true)
00FB 940E0189 CALL _Get_Key0
00FD 3001 CPI R16,1
00FE F459 BNE 0x010A
(0076) {
(0077) Key0_Flag = 1;
00FF E081 LDI R24,1
0100 93800060 STS 0x60,R24
(0078) key_count = 0;
0102 2422 CLR R2
0103 2433 CLR R3
0104 92300066 STS 0x66,R3
0106 92200065 STS 0x65,R2
(0079) buzzer_status = 1;
0108 93800068 STS 0x68,R24
(0080) }
(0081) if(Get_Key1() == true)
010A 940E01A2 CALL _Get_Key1
010C 3001 CPI R16,1
010D F459 BNE 0x0119
(0082) {
(0083) Key1_Flag = 1;
010E E081 LDI R24,1
010F 93800061 STS 0x61,R24
(0084) key_count = 0;
0111 2422 CLR R2
0112 2433 CLR R3
0113 92300066 STS 0x66,R3
0115 92200065 STS 0x65,R2
(0085) buzzer_status = 1;
0117 93800068 STS 0x68,R24
(0086) }
(0087) if(Get_Key2() == true)
0119 940E01BB CALL _Get_Key2
011B 3001 CPI R16,1
011C F459 BNE 0x0128
(0088) {
(0089) Key2_Flag = 1;
011D E081 LDI R24,1
011E 93800062 STS 0x62,R24
(0090) key_count = 0;
0120 2422 CLR R2
0121 2433 CLR R3
0122 92300066 STS 0x66,R3
0124 92200065 STS 0x65,R2
(0091) buzzer_status = 1;
0126 93800068 STS 0x68,R24
(0092) }
(0093) if(Get_Key3() == true)
0128 940E01D4 CALL _Get_Key3
012A 3001 CPI R16,1
012B F459 BNE 0x0137
(0094) {
(0095) Key3_Flag = 1;
012C E081 LDI R24,1
012D 93800063 STS 0x63,R24
(0096) key_count = 0;
012F 2422 CLR R2
0130 2433 CLR R3
0131 92300066 STS 0x66,R3
0133 92200065 STS 0x65,R2
(0097) buzzer_status = 1;
0135 93800068 STS 0x68,R24
(0098) }
(0099) //No Key Count
(0100) if(key_count++ >= 500)
0137 90200065 LDS R2,0x65
0139 90300066 LDS R3,0x66
013B 01C1 MOVW R24,R2
013C 9601 ADIW R24,1
013D 93900066 STS 0x66,R25
013F 93800065 STS 0x65,R24
0141 01C1 MOVW R24,R2
0142 3F84 CPI R24,0xF4
0143 E0E1 LDI R30,1
0144 079E CPC R25,R30
0145 F048 BCS 0x014F
(0101) {
(0102) key_count = 0;
0146 2422 CLR R2
0147 2433 CLR R3
0148 92300066 STS 0x66,R3
014A 92200065 STS 0x65,R2
(0103) NoKey_Flag = 1;
014C E081 LDI R24,1
014D 93800064 STS 0x64,R24
(0104) }
(0105) //Buzzer Control
(0106) if(buzzer_status == 1)
014F 91800068 LDS R24,0x68
0151 3081 CPI R24,1
0152 F499 BNE 0x0166
(0107) {
(0108) Buzzer_ON();
0153 940E01ED CALL _Buzzer_ON
(0109) if(buzzer_count++ >= 50)
0155 90200067 LDS R2,0x67
0157 2433 CLR R3
0158 2D82 MOV R24,R2
0159 5F8F SUBI R24,0xFF
015A 93800067 STS 0x67,R24
015C 2D82 MOV R24,R2
015D 3382 CPI R24,0x32
015E F038 BCS 0x0166
(0110) {
(0111) Buzzer_OFF();
015F 940E01EF CALL _Buzzer_OFF
(0112) buzzer_status = 0;
0161 2422 CLR R2
0162 92200068 STS 0x68,R2
(0113) buzzer_count = 0;
0164 92200067 STS 0x67,R2
(0114) }
(0115) }
(0116) }
0166 940E031F CALL pop_lset
0168 9518 RETI
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:
0169 D002 RCALL _Gpio_Init
(0027) Timer0_Init();
016A D00F RCALL _Timer0_Init
(0028) Interrupt_Init();
(0029) }
016B 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; //端口A设置为输出
_Gpio_Init:
016C EF8F LDI R24,0xFF
016D BB8A OUT 0x1A,R24
(0040) PORTA = 0x00; //初始化输出0
016E 2422 CLR R2
016F BA2B OUT 0x1B,R2
(0041) DDRB = 0x0F; //端口B设置为输出
0170 E08F LDI R24,0xF
0171 BB87 OUT 0x17,R24
(0042) PORTB = 0xF0; //初始化输出0
0172 EF80 LDI R24,0xF0
0173 BB88 OUT 0x18,R24
(0043) DDRC = 0xFF; //端口C设置为输出
0174 EF8F LDI R24,0xFF
0175 BB84 OUT 0x14,R24
(0044) PORTC = 0x00; //初始化输出0
0176 BA25 OUT 0x15,R2
(0045) DDRD = 0xFF; //端口D设置为输出
0177 BB81 OUT 0x11,R24
(0046) PORTD = 0x00; //初始化输出0
0178 BA22 OUT 0x12,R2
(0047) }
0179 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:
017A E08D LDI R24,0xD
017B BF83 OUT 0x33,R24
(0058) TCNT0 = 0x00; //Clear Counter
017C 2422 CLR R2
017D BE22 OUT 0x32,R2
(0059) OCR0 = 78; //78 * 1024/8M = 10ms
017E E48E LDI R24,0x4E
017F BF8C OUT 0x3C,R24
(0060) TIMSK |= 0x02; //Enable OCIE0
0180 B789 IN R24,0x39
0181 6082 ORI R24,2
0182 BF89 OUT 0x39,R24
(0061) TIFR |= 0x02; //Clear OCIF0
0183 B788 IN R24,0x38
0184 6082 ORI R24,2
0185 BF88 OUT 0x38,R24
(0062) }
0186 9508 RET
(0063)
(0064) //***************************************************************
(0065) // Function : Interrupt_Init
(0066) // Input : none
(0067) // Output : none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -