📄 avr_gy-29.lis
字号:
025A ; void LCD_write_char(unsigned char X,unsigned char Y,unsigned char data) //列x=0~15,行y=0,1
025A ; {
025A .dbline 141
025A ; LCD_set_xy( X, Y ); //写地址
025A 2C2D mov R18,R12
025C 0A2D mov R16,R10
025E D5DF xcall _LCD_set_xy
0260 .dbline 142
0260 ; LCD_write_data( data);
0260 0A81 ldd R16,y+2
0262 B5DF xcall _LCD_write_data
0264 .dbline -2
0264 L80:
0264 .dbline 0 ; func end
0264 C990 ld R12,y+
0266 A990 ld R10,y+
0268 0895 ret
026A .dbsym l data 2 c
026A .dbsym r Y 12 c
026A .dbsym r X 10 c
026A .dbend
.area data(ram, con, rel)
0000 .dbfile D:\MCU_Project\MCU_AVR\AVR_GY-29\1602.h
0000 _display::
0000 .blkb 2
.area idata
0000 0000 .byte 0,0
.area data(ram, con, rel)
0002 .dbfile D:\MCU_Project\MCU_AVR\AVR_GY-29\1602.h
0002 .blkb 2
.area idata
0002 0067 .byte 0,'g
.area data(ram, con, rel)
0004 .dbfile D:\MCU_Project\MCU_AVR\AVR_GY-29\1602.h
0004 .dbfile D:\MCU_Project\MCU_AVR\AVR_GY-29\AVR_GY-29.c
0004 .dbsym e display _display A[4:4]c
.area text(rom, con, rel)
026A .dbfile D:\MCU_Project\MCU_AVR\AVR_GY-29\AVR_GY-29.c
026A .dbfunc e conversion _conversion fV
026A ; i -> R10,R11
.even
026A _conversion::
026A AA92 st -y,R10
026C BA92 st -y,R11
026E 5801 movw R10,R16
0270 .dbline -1
0270 .dbline 26
0270 ; /*****************************************
0270 ; * 基于AVR单片机GY-29模块通信程序 *
0270 ; * 功 能:IIC通信读取数据并显示 *
0270 ; * 时钟频率:内部1M *
0270 ; * 设 计:广运电子 *
0270 ; * 修改日期:2011年4月20日 *
0270 ; * 编译环境:ICC-AVR7.14 *
0270 ; * 实验环境:ATmega16+1602 *
0270 ; * 使用端口:PC0,PC1,PC6,PC7,PA4~PA7 *
0270 ; * 参 考:莫锦攀实验程序24c02读取实验 *
0270 ; *****************************************/
0270 ; #include <iom16v.h>
0270 ; #include "I2C.h"
0270 ; #include "1602.h"
0270 ; #include "delay.h"
0270 ; void conversion(unsigned int i);
0270 ; void ADXL345_init(void);
0270 ; unsigned char display[4]={0,0,0,'g'};//显示数据
0270 ;
0270 ; /*********************************************
0270 ; 数据转换,十六进制数据转换成10进制
0270 ; 输入十六进制范围:0x0000-0x270f(0-9999)
0270 ; 结果分成个十百千位,以ascii存入显示区
0270 ; **********************************************/
0270 ; void conversion(unsigned int i)
0270 ; {
0270 .dbline 29
0270 ; // display[0]=i/10000+0x30 ;
0270 ; // i=i%10000; //取余运算
0270 ; display[0]=i/1000+0x30 ;
0270 28EE ldi R18,1000
0272 33E0 ldi R19,3
0274 8501 movw R16,R10
0276 0E940000 xcall div16u
027A C801 movw R24,R16
027C C096 adiw R24,48
027E 80930000 sts _display,R24
0282 .dbline 30
0282 ; i=i%1000; //取余运算
0282 28EE ldi R18,1000
0284 33E0 ldi R19,3
0286 8501 movw R16,R10
0288 0E940000 xcall mod16u
028C 5801 movw R10,R16
028E .dbline 31
028E ; display[1]=i/100+0x30 ;
028E 24E6 ldi R18,100
0290 30E0 ldi R19,0
0292 0E940000 xcall div16u
0296 C801 movw R24,R16
0298 C096 adiw R24,48
029A 80930100 sts _display+1,R24
029E .dbline 32
029E ; i=i%100; //取余运算
029E 24E6 ldi R18,100
02A0 30E0 ldi R19,0
02A2 8501 movw R16,R10
02A4 0E940000 xcall mod16u
02A8 5801 movw R10,R16
02AA .dbline 33
02AA ; display[2]=i/10+0x30 ;
02AA 2AE0 ldi R18,10
02AC 30E0 ldi R19,0
02AE 0E940000 xcall div16u
02B2 C801 movw R24,R16
02B4 C096 adiw R24,48
02B6 80930200 sts _display+2,R24
02BA .dbline -2
02BA L81:
02BA .dbline 0 ; func end
02BA B990 ld R11,y+
02BC A990 ld R10,y+
02BE 0895 ret
02C0 .dbsym r i 10 i
02C0 .dbend
02C0 .dbfunc e display_x _display_x fV
02C0 ; temp -> y+1
02C0 ; x -> R20,R21
.even
02C0 _display_x::
02C0 4A93 st -y,R20
02C2 5A93 st -y,R21
02C4 2597 sbiw R28,5
02C6 .dbline -1
02C6 .dbline 40
02C6 ; // i=i%10; //取余运算
02C6 ; // display[3]=i+0x30;
02C6 ; }
02C6 ; //*******************************
02C6 ; //显示x
02C6 ; void display_x(void)
02C6 ; { float temp;
02C6 .dbline 43
02C6 ; int x;
02C6 ;
02C6 ; x=I2C_Read(0x33);
02C6 03E3 ldi R16,51
02C8 10E0 ldi R17,0
02CA FADE xcall _I2C_Read
02CC 402F mov R20,R16
02CE 5527 clr R21
02D0 .dbline 44
02D0 ; x=(x<<8)+I2C_Read(0x32);
02D0 02E3 ldi R16,50
02D2 10E0 ldi R17,0
02D4 F5DE xcall _I2C_Read
02D6 542F mov R21,R20
02D8 402F mov R20,R16
02DA .dbline 46
02DA ;
02DA ; if(x<0){
02DA 4030 cpi R20,0
02DC E0E0 ldi R30,0
02DE 5E07 cpc R21,R30
02E0 54F4 brge L85
02E2 X25:
02E2 .dbline 46
02E2 .dbline 47
02E2 ; x=-x;
02E2 4095 com R20
02E4 5095 com R21
02E6 4F5F subi R20,0xFF
02E8 5F4F sbci R21,0xFF
02EA .dbline 48
02EA ; LCD_write_char(2,0,'-'); //显示负符号位
02EA 8DE2 ldi R24,45
02EC 8883 std y+0,R24
02EE 2227 clr R18
02F0 02E0 ldi R16,2
02F2 AFDF xcall _LCD_write_char
02F4 .dbline 49
02F4 ; }
02F4 05C0 xjmp L86
02F6 L85:
02F6 .dbline 51
02F6 ; else
02F6 ; LCD_write_char(2,0,' '); //显示空格
02F6 80E2 ldi R24,32
02F8 8883 std y+0,R24
02FA 2227 clr R18
02FC 02E0 ldi R16,2
02FE A9DF xcall _LCD_write_char
0300 L86:
0300 .dbline 52
0300 ; temp=(float)x*3.9; //计算数据和显示,查考ADXL345快速入门第4页
0300 00E0 ldi R16,<L87
0302 10E0 ldi R17,>L87
0304 0E940000 xcall elpm32
0308 1801 movw R2,R16
030A 2901 movw R4,R18
030C 8A01 movw R16,R20
030E 0E940000 xcall int2fp
0312 3A93 st -y,R19
0314 2A93 st -y,R18
0316 1A93 st -y,R17
0318 0A93 st -y,R16
031A 8101 movw R16,R2
031C 9201 movw R18,R4
031E 0E940000 xcall fpmule2
0322 0983 std y+1,R16
0324 1A83 std y+2,R17
0326 2B83 std y+3,R18
0328 3C83 std y+4,R19
032A .dbline 53
032A ; conversion(temp); //转换出显示需要的数据
032A 0981 ldd R16,y+1
032C 1A81 ldd R17,y+2
032E 2B81 ldd R18,y+3
0330 3C81 ldd R19,y+4
0332 0E940000 xcall fpint
0336 99DF xcall _conversion
0338 .dbline 54
0338 ; LCD_write_char(0,0,'X'); //第0行,第0列 显示X
0338 88E5 ldi R24,88
033A 8883 std y+0,R24
033C 2227 clr R18
033E 0027 clr R16
0340 88DF xcall _LCD_write_char
0342 .dbline 55
0342 ; LCD_write_char(1,0,':');
0342 8AE3 ldi R24,58
0344 8883 std y+0,R24
0346 2227 clr R18
0348 01E0 ldi R16,1
034A 83DF xcall _LCD_write_char
034C .dbline 56
034C ; LCD_write_char(3,0,display[0]);
034C 20900000 lds R2,_display
0350 2882 std y+0,R2
0352 2227 clr R18
0354 03E0 ldi R16,3
0356 7DDF xcall _LCD_write_char
0358 .dbline 57
0358 ; LCD_write_char(4,0,'.');
0358 8EE2 ldi R24,46
035A 8883 std y+0,R24
035C 2227 clr R18
035E 04E0 ldi R16,4
0360 78DF xcall _LCD_write_char
0362 .dbline 58
0362 ; LCD_write_char(5,0,display[1]);
0362 20900100 lds R2,_display+1
0366 2882 std y+0,R2
0368 2227 clr R18
036A 05E0 ldi R16,5
036C 72DF xcall _LCD_write_char
036E .dbline 59
036E ; LCD_write_char(6,0,display[2]);
036E 20900200 lds R2,_display+2
0372 2882 std y+0,R2
0374 2227 clr R18
0376 06E0 ldi R16,6
0378 6CDF xcall _LCD_write_char
037A .dbline 60
037A ; LCD_write_char(7,0,'g');
037A 87E6 ldi R24,103
037C 8883 std y+0,R24
037E 2227 clr R18
0380 07E0 ldi R16,7
0382 67DF xcall _LCD_write_char
0384 .dbline -2
0384 L84:
0384 .dbline 0 ; func end
0384 2596 adiw R28,5
0386 5991 ld R21,y+
0388 4991 ld R20,y+
038A 0895 ret
038C .dbsym l temp 1 D
038C .dbsym r x 20 I
038C .dbend
038C .dbfunc e display_y _display_y fV
038C ; temp -> y+1
038C ; y -> R20,R21
.even
038C _display_y::
038C 4A93 st -y,R20
038E 5A93 st -y,R21
0390 2597 sbiw R28,5
0392 .dbline -1
0392 .dbline 66
0392 ;
0392 ; }
0392 ; //*******************************
0392 ; //显示y
0392 ; void display_y(void)
0392 ; { float temp;
0392 .dbline 68
0392 ; int y;
0392 ; y=I2C_Read(0x35);
0392 05E3 ldi R16,53
0394 10E0 ldi R17,0
0396 94DE xcall _I2C_Read
0398 402F mov R20,R16
039A 5527 clr R21
039C .dbline 69
039C ; y=(y<<8)+I2C_Read(0x34);
039C 04E3 ldi R16,52
039E 10E0 ldi R17,0
03A0 8FDE xcall _I2C_Read
03A2 542F mov R21,R20
03A4 402F mov R20,R16
03A6 .dbline 71
03A6 ;
03A6 ; if(y<0){
03A6 4030 cpi R20,0
03A8 E0E0 ldi R30,0
03AA 5E07 cpc R21,R30
03AC 54F4 brge L91
03AE X26:
03AE .dbline 71
03AE .dbline 72
03AE ; y=-y;
03AE 4095 com R20
03B0 5095 com R21
03B2 4F5F subi R20,0xFF
03B4 5F4F sbci R21,0xFF
03B6 .dbline 73
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -