📄 main.s
字号:
.module main.c
.area data(ram, con, rel)
_Key0_Flag::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\字符型LCD显示应用设计\main.c
.dbsym e Key0_Flag _Key0_Flag c
_Key1_Flag::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\字符型LCD显示应用设计\main.c
.dbsym e Key1_Flag _Key1_Flag c
_Key2_Flag::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\字符型LCD显示应用设计\main.c
.dbsym e Key2_Flag _Key2_Flag c
_Key3_Flag::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\字符型LCD显示应用设计\main.c
.dbsym e Key3_Flag _Key3_Flag c
_NoKey_Flag::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\字符型LCD显示应用设计\main.c
.dbsym e NoKey_Flag _NoKey_Flag c
.area text(rom, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\字符型LCD显示应用设计\main.c
.dbfunc e main _main fV
.even
_main::
sbiw R28,2
.dbline -1
.dbline 22
; //***************************************************************
; // File Name : LED.c
; // Author : Steaven
; // Created : 2008-07-26
; // Modified :
; // Revision : V0.0
; //***************************************************************
;
; #include "iom16v.h"
; #include "DataType.h"
; #include "app.h"
; #include "lcd.h"
;
; //global variables
; INT8U Key0_Flag = 0; //Flag of Key0 Pressed
; INT8U Key1_Flag = 0; //Flag of Key0 Pressed
; INT8U Key2_Flag = 0; //Flag of Key0 Pressed
; INT8U Key3_Flag = 0; //Flag of Key0 Pressed
; INT8U NoKey_Flag = 0; //Flag of No Key Pressed
;
; void main(void)
; {
.dbline 23
; Hardware_Init();
xcall _Hardware_Init
.dbline 24
; LCD_Reset();
xcall _LCD_Reset
.dbline 25
; LCD_Show_String(0,0,"=*= KEY DEMO =*=");
ldi R24,<L2
ldi R25,>L2
std y+1,R25
std y+0,R24
clr R18
clr R16
xcall _LCD_Show_String
.dbline 26
; LCD_Show_String(1,0,"No Key Pressed! ");
ldi R24,<L3
ldi R25,>L3
std y+1,R25
std y+0,R24
clr R18
ldi R16,1
xcall _LCD_Show_String
xjmp L5
L4:
.dbline 29
;
; while(1)
; {
.dbline 30
; if(Key0_Flag == 1)
lds R24,_Key0_Flag
cpi R24,1
brne L7
.dbline 31
; {
.dbline 32
; Key0_Flag = 0;
clr R2
sts _Key0_Flag,R2
.dbline 33
; LCD_Show_String(1,0,"Key0 is Pressed! ");
ldi R24,<L9
ldi R25,>L9
std y+1,R25
std y+0,R24
clr R18
ldi R16,1
xcall _LCD_Show_String
.dbline 34
; }
L7:
.dbline 35
; if(Key1_Flag == 1)
lds R24,_Key1_Flag
cpi R24,1
brne L10
.dbline 36
; {
.dbline 37
; Key1_Flag = 0;
clr R2
sts _Key1_Flag,R2
.dbline 38
; LCD_Show_String(1,0,"Key1 is Pressed! ");
ldi R24,<L12
ldi R25,>L12
std y+1,R25
std y+0,R24
clr R18
ldi R16,1
xcall _LCD_Show_String
.dbline 39
; }
L10:
.dbline 40
; if(Key2_Flag == 1)
lds R24,_Key2_Flag
cpi R24,1
brne L13
.dbline 41
; {
.dbline 42
; Key2_Flag = 0;
clr R2
sts _Key2_Flag,R2
.dbline 43
; LCD_Show_String(1,0,"Key2 is Pressed! ");
ldi R24,<L15
ldi R25,>L15
std y+1,R25
std y+0,R24
clr R18
ldi R16,1
xcall _LCD_Show_String
.dbline 44
; }
L13:
.dbline 45
; if(Key3_Flag == 1)
lds R24,_Key3_Flag
cpi R24,1
brne L16
.dbline 46
; {
.dbline 47
; Key3_Flag = 0;
clr R2
sts _Key3_Flag,R2
.dbline 48
; LCD_Show_String(1,0,"Key3 is Pressed! ");
ldi R24,<L18
ldi R25,>L18
std y+1,R25
std y+0,R24
clr R18
ldi R16,1
xcall _LCD_Show_String
.dbline 49
; }
L16:
.dbline 50
; if(NoKey_Flag == 1)
lds R24,_NoKey_Flag
cpi R24,1
brne L19
.dbline 51
; {
.dbline 52
; NoKey_Flag = 0;
clr R2
sts _NoKey_Flag,R2
.dbline 53
; LCD_Show_String(1,0,"No Key Pressed! ");
ldi R24,<L21
ldi R25,>L21
std y+1,R25
std y+0,R24
clr R18
ldi R16,1
xcall _LCD_Show_String
.dbline 54
; }
L19:
.dbline 55
L5:
.dbline 28
xjmp L4
X0:
.dbline -2
.dbline 56
; }
; }
L1:
adiw R28,2
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 76
jmp _Timer0_Interrupt
.area text(rom, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\字符型LCD显示应用设计\main.c
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\字符型LCD显示应用设计\main.c
L23:
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\字符型LCD显示应用设计\main.c
L24:
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\字符型LCD显示应用设计\main.c
L25:
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\字符型LCD显示应用设计\main.c
.area text(rom, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\字符型LCD显示应用设计\main.c
.dbfunc e Timer0_Interrupt _Timer0_Interrupt fV
.dbsym s buzzer_status L25 c
.dbsym s buzzer_count L24 c
.dbsym s key_count L23 i
.even
_Timer0_Interrupt::
xcall push_lset
.dbline -1
.dbline 66
;
; //***************************************************************
; // Function : Timer0_Interrupt
; // Input : none
; // Output : none
; // Description : ATmega16 T/C0 ISR
; //***************************************************************
; #pragma interrupt_handler Timer0_Interrupt:20
; void Timer0_Interrupt(void)
; {
.dbline 72
; static INT16U key_count = 0;
; static INT8U buzzer_count = 0;
; static INT8U buzzer_status = 0;
;
; //Clear Timer0 OCIF Flag
; TIFR |= 0x02;
in R24,0x38
ori R24,2
out 0x38,R24
.dbline 73
; TCNT0 = 0x00;
clr R2
out 0x32,R2
.dbline 75
; //Key Detection
; if(Get_Key0() == true)
xcall _Get_Key0
cpi R16,1
brne L26
.dbline 76
; {
.dbline 77
; Key0_Flag = 1;
ldi R24,1
sts _Key0_Flag,R24
.dbline 78
; key_count = 0;
clr R2
clr R3
sts L23+1,R3
sts L23,R2
.dbline 79
; buzzer_status = 1;
sts L25,R24
.dbline 80
; }
L26:
.dbline 81
; if(Get_Key1() == true)
xcall _Get_Key1
cpi R16,1
brne L28
.dbline 82
; {
.dbline 83
; Key1_Flag = 1;
ldi R24,1
sts _Key1_Flag,R24
.dbline 84
; key_count = 0;
clr R2
clr R3
sts L23+1,R3
sts L23,R2
.dbline 85
; buzzer_status = 1;
sts L25,R24
.dbline 86
; }
L28:
.dbline 87
; if(Get_Key2() == true)
xcall _Get_Key2
cpi R16,1
brne L30
.dbline 88
; {
.dbline 89
; Key2_Flag = 1;
ldi R24,1
sts _Key2_Flag,R24
.dbline 90
; key_count = 0;
clr R2
clr R3
sts L23+1,R3
sts L23,R2
.dbline 91
; buzzer_status = 1;
sts L25,R24
.dbline 92
; }
L30:
.dbline 93
; if(Get_Key3() == true)
xcall _Get_Key3
cpi R16,1
brne L32
.dbline 94
; {
.dbline 95
; Key3_Flag = 1;
ldi R24,1
sts _Key3_Flag,R24
.dbline 96
; key_count = 0;
clr R2
clr R3
sts L23+1,R3
sts L23,R2
.dbline 97
; buzzer_status = 1;
sts L25,R24
.dbline 98
; }
L32:
.dbline 100
; //No Key Count
; if(key_count++ >= 500)
lds R2,L23
lds R3,L23+1
movw R24,R2
adiw R24,1
sts L23+1,R25
sts L23,R24
movw R24,R2
cpi R24,244
ldi R30,1
cpc R25,R30
brlo L34
.dbline 101
; {
.dbline 102
; key_count = 0;
clr R2
clr R3
sts L23+1,R3
sts L23,R2
.dbline 103
; NoKey_Flag = 1;
ldi R24,1
sts _NoKey_Flag,R24
.dbline 104
; }
L34:
.dbline 106
; //Buzzer Control
; if(buzzer_status == 1)
lds R24,L25
cpi R24,1
brne L36
.dbline 107
; {
.dbline 108
; Buzzer_ON();
xcall _Buzzer_ON
.dbline 109
; if(buzzer_count++ >= 50)
lds R2,L24
clr R3
mov R24,R2
subi R24,255 ; addi 1
sts L24,R24
mov R24,R2
cpi R24,50
brlo L38
.dbline 110
; {
.dbline 111
; Buzzer_OFF();
xcall _Buzzer_OFF
.dbline 112
; buzzer_status = 0;
clr R2
sts L25,R2
.dbline 113
; buzzer_count = 0;
sts L24,R2
.dbline 114
; }
L38:
.dbline 115
L36:
.dbline -2
.dbline 116
; }
; }
L22:
xcall pop_lset
.dbline 0 ; func end
reti
.dbend
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\字符型LCD显示应用设计\main.c
L21:
.blkb 18
.area idata
.byte 'N,'o,32,'K,'e,'y,32,'P,'r,'e,'s,'s,'e,'d,33,32
.byte 32,0
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\字符型LCD显示应用设计\main.c
L18:
.blkb 18
.area idata
.byte 'K,'e,'y,51,32,'i,'s,32,'P,'r,'e,'s,'s,'e,'d,33
.byte 32,0
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\字符型LCD显示应用设计\main.c
L15:
.blkb 18
.area idata
.byte 'K,'e,'y,50,32,'i,'s,32,'P,'r,'e,'s,'s,'e,'d,33
.byte 32,0
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\字符型LCD显示应用设计\main.c
L12:
.blkb 18
.area idata
.byte 'K,'e,'y,49,32,'i,'s,32,'P,'r,'e,'s,'s,'e,'d,33
.byte 32,0
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\字符型LCD显示应用设计\main.c
L9:
.blkb 18
.area idata
.byte 'K,'e,'y,48,32,'i,'s,32,'P,'r,'e,'s,'s,'e,'d,33
.byte 32,0
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\字符型LCD显示应用设计\main.c
L3:
.blkb 17
.area idata
.byte 'N,'o,32,'K,'e,'y,32,'P,'r,'e,'s,'s,'e,'d,33,32
.byte 0
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\字符型LCD显示应用设计\main.c
L2:
.blkb 17
.area idata
.byte 61,42,61,32,'K,'E,'Y,32,'D,'E,'M,'O,32,61,42,61
.byte 0
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\字符型LCD显示应用设计\main.c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -