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

📄 main.s

📁 AVR单片机C语言程序设计实例精粹
💻 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 + -