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

📄 buzzer.s

📁 AVR程序
💻 S
字号:
	.module buzzer.c
	.area text(rom, con, rel)
	.dbfile F:\job\M16学习板\BUZZER(实验三)\buzzer.c
	.dbfile F:\job\M16学习板\BUZZER(实验三)\..\ICC_H\SOFTWARE.h
	.dbfunc e ChangeIntToHex _ChangeIntToHex fV
;            dec -> R20,R21
	.even
_ChangeIntToHex::
	xcall push_gset1
	movw R20,R16
	.dbline -1
	.dbline 136
; /*******************************************************************
;                       实验三
; 实验名称: 蜂鸣器驱动程序实验,电子琴程序
; 实验目的: 对单片机输入输出端口的一个小综合
; 实验现象: 有点声音
; 环	  境: ICCAVR6.31A
; 设 计 者: shinea8868
; 说    明: 部分程序原型源自网络,经本人修改调试可用,请尊重知识产权,如
; 	  	  作商业用途请保留本段文字
; 完成日期: 2007年4月9日
; *******************************************************************/
; 
; #include <iom16v.h>
; #include <macros.h>
; #include "..\ICC_H\SOFTWARE.h"
; 
; uint tab[] = {637,568,505,477,425,378,337};//音符
; /*-----------------------------------------------------------------
;     延时程序计算方法
; 	计数个数j = 延时时间/6*晶振频率 - 1
; 函数名称: void DelayMs(uchar i)
; 函数功能: 毫秒延时
; 参    数: 
; 返 回 值: 无
; -----------------------------------------------------------------*/
; void DelayMs(uchar i)
; {
;  	uchar j;
; 	while(i--)
; 	{
; 	 	j = 167;//1mhz 1ms延时
; 	    while(j--);
; 	}
; }
; 
; /*-----------------------------------------------------------------
; 函数名称: void KeyScan(void)
; 函数功能: 键盘扫描程序
; 参    数: 
; 返 回 值: 无
; -----------------------------------------------------------------*/
; void KeyScan(void)
; {
;  	uchar temp;	  		  //存放音符
;  	uchar KeyNum = 0;	  //用来存放按键信息
;  	DDRA  = 0xff;         //置端口A为输出
; 	PORTA = 0xff; 		  //全部输出为高电平
; 	DelayMs(1);   		  //延时一段时间
; 	DDRA  = 0x00;		  //置端口A为输入
; 	if( PINA != 0xff)	  //是否有按键按下
; 		DelayMs(1);		  //延时去抖动
; 		
; 	DDRA  = 0xff;         //置端口A为输出
; 	PORTA = 0xff; 		  //全部输出为高电平
; 	DelayMs(1);   		  //延时一段时间
; 	DDRA  = 0x00;		  //置端口A为输入
; 	if( PINA != 0xff)	  //是否有按键按下
; 	{		 			  //确实有按键按下
; 	 	switch (PINA & 0xff)//判断是哪个按键按下
; 		{
; 		 	 case 0b11111110: KeyNum = 1;break;
; 			 case 0b11111101: KeyNum = 2;break;
; 			 case 0b11111011: KeyNum = 3;break;
; 			 case 0b11110111: KeyNum = 4;break;
; 			 case 0b11101111: KeyNum = 5;break;
; 			 case 0b11011111: KeyNum = 6;break;
; 			 case 0b10111111: KeyNum = 7;break;
; 			 case 0b01111111: KeyNum = 8;break;
; 			 default: break;			 
; 		}
; 		
; 		while(PINA != 0xff)
; 		{
; 		    DDRB  = 0xff;
; 			PORTB&= ~(1<<(KeyNum-1));//显示对应的发光二极管
; 			DDRA  = 0xff;         //置端口A为输出
; 			PORTA = 0xff; 		  //全部输出为高电平
; //			DelayMs(1);   		  //延时一段时间
; 			temp  = tab[KeyNum-1];
; 			while(temp--)
; 				NOP();
; 			DDRD   = (1<<5);
; 			PORTD ^= (1<<5);
; 			DDRA   = 0x00;	
; 		}
; 		DDRB  = 0xff;			  //设为输出
; 		PORTB = 0xff;			  //灭所有的二极管 
; 	}
; 	
; }
; /*-----------------------------------------------------------------
; 函数名称: void main(void)
; 函数功能: 
; 参    数: 
; 返 回 值: 无
; -----------------------------------------------------------------*/
; void main(void)
; {
;  	DDRB  = 0xff;
; 	PORTB = 0xff;
;  	while(1)
; 	{
; //	 	DelayMs(200);
; 		KeyScan();
; 	}
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
	.dbline 137
; }
	movw R30,R20
	ldd R2,z+0
	clr R3
	ldi R17,10
	mov R16,R2
	xcall mod8u
	mov R4,R16
	ldi R17,10
	mov R16,R2
	xcall div8u
	mov R24,R16
	andi R24,#0x0F
	swap R24
	or R24,R4
	movw R30,R20
	std z+0,R24
	.dbline -2
L1:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r dec 20 pc
	.dbend
	.dbfunc e ChangeHexToInt _ChangeHexToInt fV
;            hex -> R16,R17
	.even
_ChangeHexToInt::
	.dbline -1
	.dbline 166
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
	.dbline 167
; }
	movw R30,R16
	ldd R2,z+0
	clr R3
	mov R24,R2
	swap R24
	andi R24,#0x0F
	ldi R25,10
	mul R25,R24
	mov R24,R2
	andi R24,15
	mov R2,R0
	add R2,R24
	std z+0,R2
	.dbline -2
L2:
	.dbline 0 ; func end
	ret
	.dbsym r hex 16 pc
	.dbend
	.dbfunc e Delay _Delay fV
;              i -> R16
	.even
_Delay::
	.dbline -1
	.dbline 180
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
	.dbline 182
; }
; }
	ldi R16,200
L4:
	.dbline 183
L5:
	.dbline 183
; }
	mov R2,R16
	clr R3
	subi R16,1
	tst R2
	brne L4
	.dbline -2
L3:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 c
	.dbend
	.area data(ram, con, rel)
	.dbfile F:\job\M16学习板\BUZZER(实验三)\..\ICC_H\SOFTWARE.h
_tab::
	.blkb 2
	.area idata
	.word 637
	.area data(ram, con, rel)
	.dbfile F:\job\M16学习板\BUZZER(实验三)\..\ICC_H\SOFTWARE.h
	.blkb 2
	.area idata
	.word 568
	.area data(ram, con, rel)
	.dbfile F:\job\M16学习板\BUZZER(实验三)\..\ICC_H\SOFTWARE.h
	.blkb 2
	.area idata
	.word 505
	.area data(ram, con, rel)
	.dbfile F:\job\M16学习板\BUZZER(实验三)\..\ICC_H\SOFTWARE.h
	.blkb 2
	.area idata
	.word 477
	.area data(ram, con, rel)
	.dbfile F:\job\M16学习板\BUZZER(实验三)\..\ICC_H\SOFTWARE.h
	.blkb 2
	.area idata
	.word 425
	.area data(ram, con, rel)
	.dbfile F:\job\M16学习板\BUZZER(实验三)\..\ICC_H\SOFTWARE.h
	.blkb 2
	.area idata
	.word 378
	.area data(ram, con, rel)
	.dbfile F:\job\M16学习板\BUZZER(实验三)\..\ICC_H\SOFTWARE.h
	.blkb 2
	.area idata
	.word 337
	.area data(ram, con, rel)
	.dbfile F:\job\M16学习板\BUZZER(实验三)\..\ICC_H\SOFTWARE.h
	.dbfile F:\job\M16学习板\BUZZER(实验三)\buzzer.c
	.dbsym e tab _tab A[14:7]i
	.area text(rom, con, rel)
	.dbfile F:\job\M16学习板\BUZZER(实验三)\buzzer.c
	.dbfunc e DelayMs _DelayMs fV
;              j -> R20
;              i -> R16
	.even
_DelayMs::
	xcall push_gset1
	.dbline -1
	.dbline 27
	xjmp L9
L8:
	.dbline 30
	.dbline 31
	ldi R20,167
L11:
	.dbline 32
L12:
	.dbline 32
	mov R2,R20
	clr R3
	subi R20,1
	tst R2
	brne L11
	.dbline 33
L9:
	.dbline 29
	mov R2,R16
	clr R3
	subi R16,1
	tst R2
	brne L8
	.dbline -2
L7:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r j 20 c
	.dbsym r i 16 c
	.dbend
	.dbfunc e KeyScan _KeyScan fV
;         KeyNum -> R20
;           temp -> R22
	.even
_KeyScan::
	xcall push_gset2
	.dbline -1
	.dbline 43
	.dbline 45
	clr R20
	.dbline 46
	ldi R24,255
	out 0x1a,R24
	.dbline 47
	out 0x1b,R24
	.dbline 48
	ldi R16,1
	xcall _DelayMs
	.dbline 49
	clr R2
	out 0x1a,R2
	.dbline 50
	in R24,0x19
	cpi R24,255
	breq L15
	.dbline 51
	ldi R16,1
	xcall _DelayMs
L15:
	.dbline 53
	ldi R24,255
	out 0x1a,R24
	.dbline 54
	out 0x1b,R24
	.dbline 55
	ldi R16,1
	xcall _DelayMs
	.dbline 56
	clr R2
	out 0x1a,R2
	.dbline 57
	in R24,0x19
	cpi R24,255
	brne X1
	xjmp L17
X1:
	.dbline 58
	.dbline 59
	in R22,0x19
	clr R23
	andi R23,0
	cpi R22,223
	ldi R30,0
	cpc R23,R30
	brne X2
	xjmp L27
X2:
	ldi R24,223
	ldi R25,0
	cp R24,R22
	cpc R25,R23
	brlt L31
L30:
	cpi R22,127
	ldi R30,0
	cpc R23,R30
	brne X3
	xjmp L29
X3:
	cpi R22,127
	ldi R30,0
	cpc R23,R30
	brge X4
	xjmp L35
X4:
L32:
	cpi R22,191
	ldi R30,0
	cpc R23,R30
	breq L28
	xjmp L35
L31:
	cpi R22,239
	ldi R30,0
	cpc R23,R30
	breq L26
	cpi R22,239
	ldi R30,0
	cpc R23,R30
	brge X5
	xjmp L35
X5:
L33:
	cpi R22,247
	ldi R30,0
	cpc R23,R30
	breq L25
	cpi R22,251
	ldi R30,0
	cpc R23,R30
	breq L24
	cpi R22,253
	ldi R30,0
	cpc R23,R30
	breq L23
	cpi R22,254
	ldi R30,0
	cpc R23,R30
	breq L22
	xjmp L35
X0:
	.dbline 60
L22:
	.dbline 61
	ldi R20,1
	.dbline 61
	xjmp L35
L23:
	.dbline 62
	ldi R20,2
	.dbline 62
	xjmp L35
L24:
	.dbline 63
	ldi R20,3
	.dbline 63
	xjmp L35
L25:
	.dbline 64
	ldi R20,4
	.dbline 64
	xjmp L35
L26:
	.dbline 65
	ldi R20,5
	.dbline 65
	xjmp L35
L27:
	.dbline 66
	ldi R20,6
	.dbline 66
	xjmp L35
L28:
	.dbline 67
	ldi R20,7
	.dbline 67
	xjmp L35
L29:
	.dbline 68
	ldi R20,8
	.dbline 68
	.dbline 69
	xjmp L35
L34:
	.dbline 73
	.dbline 74
	ldi R24,255
	out 0x17,R24
	.dbline 75
	mov R17,R20
	subi R17,1
	ldi R16,1
	xcall lsl8
	mov R2,R16
	com R2
	in R3,0x18
	and R3,R2
	out 0x18,R3
	.dbline 76
	ldi R24,255
	out 0x1a,R24
	.dbline 77
	out 0x1b,R24
	.dbline 79
	ldi R24,2
	mul R24,R20
	movw R30,R0
	ldi R24,<_tab-2
	ldi R25,>_tab-2
	add R30,R24
	adc R31,R25
	ldd R22,z+0
	xjmp L39
L38:
	.dbline 81
	nop
L39:
	.dbline 80
	mov R2,R22
	clr R3
	subi R22,1
	tst R2
	brne L38
	.dbline 82
	ldi R24,32
	out 0x11,R24
	.dbline 83
	in R2,0x12
	eor R2,R24
	out 0x12,R2
	.dbline 84
	clr R2
	out 0x1a,R2
	.dbline 85
L35:
	.dbline 72
	in R24,0x19
	cpi R24,255
	brne L34
	.dbline 86
	ldi R24,255
	out 0x17,R24
	.dbline 87
	out 0x18,R24
	.dbline 88
L17:
	.dbline -2
L14:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r KeyNum 20 c
	.dbsym r temp 22 c
	.dbend
	.dbfunc e main _main fV
	.even
_main::
	.dbline -1
	.dbline 98
	.dbline 99
	ldi R24,255
	out 0x17,R24
	.dbline 100
	out 0x18,R24
	xjmp L43
L42:
	.dbline 102
	.dbline 104
	xcall _KeyScan
	.dbline 105
L43:
	.dbline 101
	xjmp L42
X6:
	.dbline -2
L41:
	.dbline 0 ; func end
	ret
	.dbend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -