?? avr_gy-27.lis
字號:
0282 ; **********************************************/
0282 ; void conversion(unsigned int i)
0282 ; {
0282 .dbline 29
0282 ; display[0]=i/10000+0x30 ;
0282 20E1 ldi R18,10000
0284 37E2 ldi R19,39
0286 8A01 movw R16,R20
0288 0E940000 xcall div16u
028C C801 movw R24,R16
028E C096 adiw R24,48
0290 80930000 sts _display,R24
0294 .dbline 30
0294 ; i=i%10000; //取余運算
0294 20E1 ldi R18,10000
0296 37E2 ldi R19,39
0298 8A01 movw R16,R20
029A 0E940000 xcall mod16u
029E A801 movw R20,R16
02A0 .dbline 31
02A0 ; display[1]=i/1000+0x30 ;
02A0 28EE ldi R18,1000
02A2 33E0 ldi R19,3
02A4 0E940000 xcall div16u
02A8 C801 movw R24,R16
02AA C096 adiw R24,48
02AC 80930100 sts _display+1,R24
02B0 .dbline 32
02B0 ; i=i%1000; //取余運算
02B0 28EE ldi R18,1000
02B2 33E0 ldi R19,3
02B4 8A01 movw R16,R20
02B6 0E940000 xcall mod16u
02BA A801 movw R20,R16
02BC .dbline 33
02BC ; display[2]=i/100+0x30 ;
02BC 24E6 ldi R18,100
02BE 30E0 ldi R19,0
02C0 0E940000 xcall div16u
02C4 C801 movw R24,R16
02C6 C096 adiw R24,48
02C8 80930200 sts _display+2,R24
02CC .dbline 34
02CC ; i=i%100; //取余運算
02CC 24E6 ldi R18,100
02CE 30E0 ldi R19,0
02D0 8A01 movw R16,R20
02D2 0E940000 xcall mod16u
02D6 A801 movw R20,R16
02D8 .dbline 35
02D8 ; display[3]=i/10+0x30 ;
02D8 2AE0 ldi R18,10
02DA 30E0 ldi R19,0
02DC 0E940000 xcall div16u
02E0 C801 movw R24,R16
02E2 C096 adiw R24,48
02E4 80930300 sts _display+3,R24
02E8 .dbline 36
02E8 ; i=i%10; //取余運算
02E8 2AE0 ldi R18,10
02EA 30E0 ldi R19,0
02EC 8A01 movw R16,R20
02EE 0E940000 xcall mod16u
02F2 A801 movw R20,R16
02F4 .dbline 37
02F4 ; display[4]=i+0x30;
02F4 CA01 movw R24,R20
02F6 C096 adiw R24,48
02F8 80930400 sts _display+4,R24
02FC .dbline -2
02FC L81:
02FC .dbline 0 ; func end
02FC 5991 ld R21,y+
02FE 4991 ld R20,y+
0300 0895 ret
0302 .dbsym r i 20 i
0302 .dbend
0302 .dbfunc e display_angle _display_angle fV
0302 ; temp -> y+8
0302 ; angle -> y+4
0302 ; y -> R10,R11
0302 ; x -> R12,R13
.even
0302 _display_angle::
0302 0E940000 xcall push_xgset00FC
0306 2C97 sbiw R28,12
0308 .dbline -1
0308 .dbline 42
0308 ; }
0308 ; //*******************************
0308 ; //顯示角度
0308 ; void display_angle(void)
0308 ; { float temp;
0308 .dbline 46
0308 ; int x,y;
0308 ; double angle;
0308 ;
0308 ; x=I2C_Read(0x03);
0308 03E0 ldi R16,3
030A 10E0 ldi R17,0
030C E2DE xcall _I2C_Read
030E C02E mov R12,R16
0310 DD24 clr R13
0312 .dbline 47
0312 ; x=(x<<8)+I2C_Read(0x04);
0312 04E0 ldi R16,4
0314 10E0 ldi R17,0
0316 DDDE xcall _I2C_Read
0318 DC2C mov R13,R12
031A C02E mov R12,R16
031C .dbline 49
031C ;
031C ; y=I2C_Read(0x07);
031C 07E0 ldi R16,7
031E 10E0 ldi R17,0
0320 D8DE xcall _I2C_Read
0322 A02E mov R10,R16
0324 BB24 clr R11
0326 .dbline 50
0326 ; y=(y<<8)+I2C_Read(0x08);
0326 08E0 ldi R16,8
0328 10E0 ldi R17,0
032A D3DE xcall _I2C_Read
032C E02E mov R14,R16
032E BA2C mov R11,R10
0330 AE2C mov R10,R14
0332 .dbline 53
0332 ;
0332 ;
0332 ; angle= atan2((double)y,(double)x) * (180 / 3.14159265) + 180; // angle in degrees
0332 8601 movw R16,R12
0334 0E940000 xcall int2fp
0338 0883 std y+0,R16
033A 1983 std y+1,R17
033C 2A83 std y+2,R18
033E 3B83 std y+3,R19
0340 8501 movw R16,R10
0342 0E940000 xcall int2fp
0346 0E940000 xcall _atan2f
034A 1801 movw R2,R16
034C 2901 movw R4,R18
034E 00E0 ldi R16,<L87
0350 10E0 ldi R17,>L87
0352 0E940000 xcall elpm32
0356 5A92 st -y,R5
0358 4A92 st -y,R4
035A 3A92 st -y,R3
035C 2A92 st -y,R2
035E 0E940000 xcall fpmule2
0362 1801 movw R2,R16
0364 2901 movw R4,R18
0366 00E0 ldi R16,<L88
0368 10E0 ldi R17,>L88
036A 0E940000 xcall elpm32
036E 3A93 st -y,R19
0370 2A93 st -y,R18
0372 1A93 st -y,R17
0374 0A93 st -y,R16
0376 8101 movw R16,R2
0378 9201 movw R18,R4
037A 0E940000 xcall fpadd2
037E 0C83 std y+4,R16
0380 1D83 std y+5,R17
0382 2E83 std y+6,R18
0384 3F83 std y+7,R19
0386 .dbline 54
0386 ; angle*=10;
0386 00E0 ldi R16,<L89
0388 10E0 ldi R17,>L89
038A 0E940000 xcall elpm32
038E CE01 movw R24,R28
0390 0496 adiw R24,4
0392 9A93 st -y,R25
0394 8A93 st -y,R24
0396 0E940000 xcall fpmule1
039A 0C83 std y+4,R16
039C 1D83 std y+5,R17
039E 2E83 std y+6,R18
03A0 3F83 std y+7,R19
03A2 .dbline 56
03A2 ;
03A2 ; conversion(angle); //轉換出顯示需要的數據
03A2 0C81 ldd R16,y+4
03A4 1D81 ldd R17,y+5
03A6 2E81 ldd R18,y+6
03A8 3F81 ldd R19,y+7
03AA 0E940000 xcall fpint
03AE 66DF xcall _conversion
03B0 .dbline 57
03B0 ; LCD_write_char(0,0,'A'); //第0行,第0列 顯示A
03B0 81E4 ldi R24,65
03B2 8883 std y+0,R24
03B4 2227 clr R18
03B6 0027 clr R16
03B8 55DF xcall _LCD_write_char
03BA .dbline 58
03BA ; LCD_write_char(1,0,'n'); //
03BA 8EE6 ldi R24,110
03BC 8883 std y+0,R24
03BE 2227 clr R18
03C0 01E0 ldi R16,1
03C2 50DF xcall _LCD_write_char
03C4 .dbline 59
03C4 ; LCD_write_char(2,0,'g'); //
03C4 87E6 ldi R24,103
03C6 8883 std y+0,R24
03C8 2227 clr R18
03CA 02E0 ldi R16,2
03CC 4BDF xcall _LCD_write_char
03CE .dbline 60
03CE ; LCD_write_char(3,0,'l'); //
03CE 8CE6 ldi R24,108
03D0 8883 std y+0,R24
03D2 2227 clr R18
03D4 03E0 ldi R16,3
03D6 46DF xcall _LCD_write_char
03D8 .dbline 61
03D8 ; LCD_write_char(4,0,'e'); //
03D8 85E6 ldi R24,101
03DA 8883 std y+0,R24
03DC 2227 clr R18
03DE 04E0 ldi R16,4
03E0 41DF xcall _LCD_write_char
03E2 .dbline 62
03E2 ; LCD_write_char(5,0,':');
03E2 8AE3 ldi R24,58
03E4 8883 std y+0,R24
03E6 2227 clr R18
03E8 05E0 ldi R16,5
03EA 3CDF xcall _LCD_write_char
03EC .dbline 63
03EC ; LCD_write_char(6,0,display[1]);
03EC 20900100 lds R2,_display+1
03F0 2882 std y+0,R2
03F2 2227 clr R18
03F4 06E0 ldi R16,6
03F6 36DF xcall _LCD_write_char
03F8 .dbline 64
03F8 ; LCD_write_char(7,0,display[2]);
03F8 20900200 lds R2,_display+2
03FC 2882 std y+0,R2
03FE 2227 clr R18
0400 07E0 ldi R16,7
0402 30DF xcall _LCD_write_char
0404 .dbline 65
0404 ; LCD_write_char(8,0,display[3]);
0404 20900300 lds R2,_display+3
0408 2882 std y+0,R2
040A 2227 clr R18
040C 08E0 ldi R16,8
040E 2ADF xcall _LCD_write_char
0410 .dbline 66
0410 ; LCD_write_char(9,0,'.');
0410 8EE2 ldi R24,46
0412 8883 std y+0,R24
0414 2227 clr R18
0416 09E0 ldi R16,9
0418 25DF xcall _LCD_write_char
041A .dbline 67
041A ; LCD_write_char(10,0,display[4]);
041A 20900400 lds R2,_display+4
041E 2882 std y+0,R2
0420 2227 clr R18
0422 0AE0 ldi R16,10
0424 1FDF xcall _LCD_write_char
0426 .dbline 68
0426 ; LCD_write_char(11,0,0xdf);
0426 8FED ldi R24,223
0428 8883 std y+0,R24
042A 2227 clr R18
042C 0BE0 ldi R16,11
042E 1ADF xcall _LCD_write_char
0430 .dbline -2
0430 L86:
0430 .dbline 0 ; func end
0430 2C96 adiw R28,12
0432 0C940000 xjmp pop_xgset00FC
0436 .dbsym l temp 8 D
0436 .dbsym l angle 4 D
0436 .dbsym r y 10 I
0436 .dbsym r x 12 I
0436 .dbend
0436 .dbfunc e main _main fV
0436 ; i -> <dead>
.even
0436 _main::
0436 .dbline -1
0436 .dbline 76
0436 ;
0436 ; }
0436 ;
0436 ; /*******************************
0436 ; 主程序
0436 ; *******************************/
0436 ; void main(void)
0436 ; {
0436 .dbline 78
0436 ; unsigned char i;
0436 ; delay_nms(50); //lcd上電延時
0436 02E3 ldi R16,50
0438 10E0 ldi R17,0
043A 00DE xcall _delay_nms
043C .dbline 79
043C ; LCD_init(); //lcd初始化
043C 98DE xcall _LCD_init
043E 0AC0 xjmp L96
0440 L95:
0440 .dbline 81
0440 ;
0440 ; while(1){ //循環
0440 .dbline 82
0440 ; I2C_Write(0x02,0x00); //模式寄存器寫0
0440 2227 clr R18
0442 02E0 ldi R16,2
0444 09DE xcall _I2C_Write
0446 .dbline 83
0446 ; delay_nms(50);
0446 02E3 ldi R16,50
0448 10E0 ldi R17,0
044A F8DD xcall _delay_nms
044C .dbline 84
044C ; display_angle(); //顯示角度
044C 5ADF xcall _display_angle
044E .dbline 85
044E ; delay_nms(50);
044E 02E3 ldi R16,50
0450 10E0 ldi R17,0
0452 F4DD xcall _delay_nms
0454 .dbline 86
0454 ; }
0454 L96:
0454 .dbline 81
0454 F5CF xjmp L95
0456 X25:
0456 .dbline -2
0456 L94:
0456 .dbline 0 ; func end
0456 0895 ret
0458 .dbsym l i 1 c
0458 .dbend
.area lit(rom, con, rel)
0000 L89:
0000 00002041 .word 0x0,0x4120
0004 L88:
0004 00003443 .word 0x0,0x4334
0008 L87:
0008 E12E6542 .word 0x2ee1,0x4265
000C ; }
000C ;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -