📄 dianziqin.lis
字号:
.module dianziqin.c
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator\桌面\AVR程序\电子琴\dianziqin.c
0000 .dbfile C:\DOCUME~1\Administrator\桌面\AVR程序\电子琴\delay.h
0000 .dbfunc e delay_1ms _delay_1ms fV
0000 ; i -> R16,R17
.even
0000 _delay_1ms::
0000 .dbline -1
0000 .dbline 7
0000 ; /* 1MHz 下延时程序*/
0000 ;
0000 ; #ifndef DELAY_H_H
0000 ; #define DELAY_H_H
0000 ;
0000 ; void delay_1ms(void) //1ms 延时
0000 ; {
0000 .dbline 16
0000 ; unsigned int i;
0000 ; /*
0000 ; for(i=1;i<140;i++) //1MHz
0000 ; ;
0000 ;
0000 ; for(i=1331;i>0;i--) // 8MHz
0000 ; ;
0000 ; */
0000 ; for(i=0;i<2;i++) //1MHz,24us
0000 0027 clr R16
0002 1127 clr R17
0004 02C0 xjmp L5
0006 L2:
0006 .dbline 17
0006 ; ;
0006 L3:
0006 .dbline 16
0006 0F5F subi R16,255 ; offset = 1
0008 1F4F sbci R17,255
000A L5:
000A .dbline 16
000A 0230 cpi R16,2
000C E0E0 ldi R30,0
000E 1E07 cpc R17,R30
0010 D0F3 brlo L2
0012 X0:
0012 .dbline -2
0012 L1:
0012 .dbline 0 ; func end
0012 0895 ret
0014 .dbsym r i 16 i
0014 .dbend
0014 .dbfunc e delay _delay fV
0014 ; i -> R20,R21
0014 ; n -> R10,R11
.even
0014 _delay::
0014 0E940000 xcall push_xgset300C
0018 5801 movw R10,R16
001A .dbline -1
001A .dbline 21
001A ; }
001A ;
001A ; void delay(unsigned int n)
001A ; {
001A .dbline 22
001A ; unsigned int i=0;
001A 4427 clr R20
001C 5527 clr R21
001E .dbline 23
001E ; for(i=0;i<n;i++)
001E 03C0 xjmp L10
0020 L7:
0020 .dbline 24
0020 ; delay_1ms();
0020 EFDF xcall _delay_1ms
0022 L8:
0022 .dbline 23
0022 4F5F subi R20,255 ; offset = 1
0024 5F4F sbci R21,255
0026 L10:
0026 .dbline 23
0026 4A15 cp R20,R10
0028 5B05 cpc R21,R11
002A D0F3 brlo L7
002C X1:
002C .dbline -2
002C L6:
002C .dbline 0 ; func end
002C 0C940000 xjmp pop_xgset300C
0030 .dbsym r i 20 i
0030 .dbsym r n 10 i
0030 .dbend
0030 .dbfunc e delay_ms _delay_ms fV
0030 ; i -> R20,R21
0030 ; n -> R16,R17
.even
0030 _delay_ms::
0030 4A93 st -y,R20
0032 5A93 st -y,R21
0034 .dbline -1
0034 .dbline 28
0034 ; }
0034 ;
0034 ; void delay_ms(int n)
0034 ; {
0034 .dbline 30
0034 ; int i;
0034 ; for(i=0;i<n;i++)
0034 4427 clr R20
0036 5527 clr R21
0038 0AC0 xjmp L15
003A L12:
003A .dbline 31
003A ; {
003A .dbline 32
003A ; for(i=0;i<140;i++)
003A 4427 clr R20
003C 5527 clr R21
003E L16:
003E .dbline 33
003E ; ;
003E L17:
003E .dbline 32
003E 4F5F subi R20,255 ; offset = 1
0040 5F4F sbci R21,255
0042 .dbline 32
0042 4C38 cpi R20,140
0044 E0E0 ldi R30,0
0046 5E07 cpc R21,R30
0048 D4F3 brlt L16
004A X2:
004A .dbline 34
004A ; }
004A L13:
004A .dbline 30
004A 4F5F subi R20,255 ; offset = 1
004C 5F4F sbci R21,255
004E L15:
004E .dbline 30
004E 4017 cp R20,R16
0050 5107 cpc R21,R17
0052 9CF3 brlt L12
0054 X3:
0054 .dbline -2
0054 L11:
0054 .dbline 0 ; func end
0054 5991 ld R21,y+
0056 4991 ld R20,y+
0058 0895 ret
005A .dbsym r i 20 I
005A .dbsym r n 16 I
005A .dbend
.area data(ram, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator\桌面\AVR程序\电子琴\delay.h
0000 _count::
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 .dbfile C:\DOCUME~1\Administrator\桌面\AVR程序\电子琴\delay.h
0001 .dbfile C:\DOCUME~1\Administrator\桌面\AVR程序\电子琴\dianziqin.c
0001 .dbsym e count _count c
.area lit(rom, con, rel)
0000 _music_key::
0000 2723 .byte 39,35
0002 1F00 .byte 31,0
0004 1D1A .byte 29,26
0006 1700 .byte 23,0
0008 15 .byte 21
0009 .dbsym e music_key _music_key A[9:9]kc
.area text(rom, con, rel)
005A .dbfile C:\DOCUME~1\Administrator\桌面\AVR程序\电子琴\dianziqin.c
005A .dbfunc e scan_key _scan_key fc
005A ; intKey -> R22
005A ; i -> R20
005A ; tmp -> R10
.even
005A _scan_key::
005A 0E940000 xcall push_xgsetF00C
005E .dbline -1
005E .dbline 12
005E ; /*模拟电子琴,0、1、2、4、5、6、8 分别模拟do re mi fa so la xi*/
005E ;
005E ; #include <iom128v.h>
005E ; #include <macros.h>
005E ; #include "delay.h"
005E ;
005E ; char count=0x00;
005E ; char sound_signal;//定义音符大小
005E ; char sound_pace;//定义节拍大小
005E ; const char music_key[]={0x27,0x23,0x1f,0x00,0x1d,0x1a,0x17,0x00,0x15};
005E ; char scan_key()
005E ; {
005E .dbline 13
005E ; char i=0;
005E 4427 clr R20
0060 .dbline 14
0060 ; char tmp=0x00;
0060 AA24 clr R10
0062 .dbline 15
0062 ; char intKey=0x00;
0062 6627 clr R22
0064 .dbline 16
0064 ; DDRB=0x8f;
0064 8FE8 ldi R24,143
0066 87BB out 0x17,R24
0068 .dbline 17
0068 ; PORTB=0xf8;
0068 88EF ldi R24,248
006A 88BB out 0x18,R24
006C .dbline 19
006C ;
006C ; for(i=0;i<3;i++)
006C 5AC0 xjmp L24
006E L21:
006E .dbline 20
006E ; {
006E .dbline 21
006E ; PORTB=~(1<<i);
006E 01E0 ldi R16,1
0070 142F mov R17,R20
0072 0E940000 xcall lsl8
0076 202E mov R2,R16
0078 2094 com R2
007A 28BA out 0x18,R2
007C .dbline 22
007C ; delay(10); //等待低电平稳定
007C 0AE0 ldi R16,10
007E 10E0 ldi R17,0
0080 C9DF xcall _delay
0082 .dbline 23
0082 ; tmp=PINB&0xf0;
0082 86B3 in R24,0x16
0084 807F andi R24,240
0086 A82E mov R10,R24
0088 .dbline 24
0088 ; if(tmp!=0xf0) //有键按下,延时10ms去抖
0088 803F cpi R24,240
008A 31F0 breq L25
008C X4:
008C .dbline 25
008C ; {
008C .dbline 26
008C ; delay_ms(10);
008C 0AE0 ldi R16,10
008E 10E0 ldi R17,0
0090 CFDF xcall _delay_ms
0092 .dbline 27
0092 ; tmp=PINB&0xf0;
0092 86B3 in R24,0x16
0094 807F andi R24,240
0096 A82E mov R10,R24
0098 .dbline 28
0098 ; }
0098 L25:
0098 .dbline 29
0098 ; if(tmp!=0xf0) //确有键按下
0098 8A2D mov R24,R10
009A 803F cpi R24,240
009C 09F4 brne X13
009E 40C0 xjmp L27
00A0 X13:
00A0 X5:
00A0 .dbline 30
00A0 ; {
00A0 .dbline 31
00A0 ; tmp&=0xf0;
00A0 807F andi R24,240
00A2 A82E mov R10,R24
00A4 .dbline 32
00A4 ; switch(tmp)
00A4 BB24 clr R11
00A6 C501 movw R24,R10
00A8 803B cpi R24,176
00AA E0E0 ldi R30,0
00AC 9E07 cpc R25,R30
00AE 39F1 breq L34
00B0 X6:
00B0 80EB ldi R24,176
00B2 8A15 cp R24,R10
00B4 9B05 cpc R25,R11
00B6 34F0 brlt L37
00B8 X7:
00B8 L36:
00B8 C501 movw R24,R10
00BA 8037 cpi R24,112
00BC E0E0 ldi R30,0
00BE 9E07 cpc R25,R30
00C0 29F1 breq L35
00C2 X8:
00C2 2BC0 xjmp L29
00C4 L37:
00C4 C501 movw R24,R10
00C6 803D cpi R24,208
00C8 E0E0 ldi R30,0
00CA 9E07 cpc R25,R30
00CC 89F0 breq L33
00CE X9:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -