?? avr_gy-27.lis
字號:
019E 36DF xcall _delay_nus
01A0 .dbline 61
01A0 ; LCD_EN_PORT&=~LCD_EN;
01A0 AF98 cbi 0x15,7
01A2 .dbline -2
01A2 L70:
01A2 .dbline 0 ; func end
01A2 0895 ret
01A4 .dbend
01A4 .dbfunc e LCD_write_command _LCD_write_command fV
01A4 ; command -> R20
.even
01A4 _LCD_write_command::
01A4 4A93 st -y,R20
01A6 402F mov R20,R16
01A8 .dbline -1
01A8 .dbline 65
01A8 ; }
01A8 ;
01A8 ; void LCD_write_command(unsigned char command) //寫指令
01A8 ; {
01A8 .dbline 67
01A8 ; //連線為高4位的寫法
01A8 ; delay_nus(16);
01A8 00E1 ldi R16,16
01AA 10E0 ldi R17,0
01AC 2FDF xcall _delay_nus
01AE .dbline 68
01AE ; LCD_RS_PORT&=~LCD_RS; //RS=0
01AE AE98 cbi 0x15,6
01B0 .dbline 69
01B0 ; LCD_DATA_PORT&=0X0f; //清高四位
01B0 8BB3 in R24,0x1b
01B2 8F70 andi R24,15
01B4 8BBB out 0x1b,R24
01B6 .dbline 70
01B6 ; LCD_DATA_PORT|=command&0xf0; //寫高四位
01B6 842F mov R24,R20
01B8 807F andi R24,240
01BA 2BB2 in R2,0x1b
01BC 282A or R2,R24
01BE 2BBA out 0x1b,R2
01C0 .dbline 71
01C0 ; LCD_en_write();
01C0 EBDF xcall _LCD_en_write
01C2 .dbline 72
01C2 ; command=command<<4; //低四位移到高四位
01C2 842F mov R24,R20
01C4 8F70 andi R24,#0x0F
01C6 8295 swap R24
01C8 482F mov R20,R24
01CA .dbline 73
01CA ; LCD_DATA_PORT&=0x0f; //清高四位
01CA 8BB3 in R24,0x1b
01CC 8F70 andi R24,15
01CE 8BBB out 0x1b,R24
01D0 .dbline 74
01D0 ; LCD_DATA_PORT|=command&0xf0; //寫低四位
01D0 842F mov R24,R20
01D2 807F andi R24,240
01D4 2BB2 in R2,0x1b
01D6 282A or R2,R24
01D8 2BBA out 0x1b,R2
01DA .dbline 75
01DA ; LCD_en_write();
01DA DEDF xcall _LCD_en_write
01DC .dbline -2
01DC L71:
01DC .dbline 0 ; func end
01DC 4991 ld R20,y+
01DE 0895 ret
01E0 .dbsym r command 20 c
01E0 .dbend
01E0 .dbfunc e LCD_write_data _LCD_write_data fV
01E0 ; data -> R20
.even
01E0 _LCD_write_data::
01E0 4A93 st -y,R20
01E2 402F mov R20,R16
01E4 .dbline -1
01E4 .dbline 92
01E4 ;
01E4 ; /*
01E4 ; //連線為低四位的寫法
01E4 ; delay_nus(16);
01E4 ; LCD_RS_PORT&=~LCD_RS; //RS=0
01E4 ; LCD_DATA_PORT&=0xf0; //清高四位
01E4 ; LCD_DATA_PORT|=(command>>4)&0x0f; //寫高四位
01E4 ; LCD_en_write();
01E4 ; LCD_DATA_PORT&=0xf0; //清高四位
01E4 ; LCD_DATA_PORT|=command&0x0f; //寫低四位
01E4 ; LCD_en_write();
01E4 ; */
01E4 ;
01E4 ; }
01E4 ;
01E4 ; void LCD_write_data(unsigned char data) //寫數據
01E4 ; {
01E4 .dbline 94
01E4 ; //連線為高4位的寫法
01E4 ; delay_nus(16);
01E4 00E1 ldi R16,16
01E6 10E0 ldi R17,0
01E8 11DF xcall _delay_nus
01EA .dbline 95
01EA ; LCD_RS_PORT|=LCD_RS; //RS=1
01EA AE9A sbi 0x15,6
01EC .dbline 96
01EC ; LCD_DATA_PORT&=0X0f; //清高四位
01EC 8BB3 in R24,0x1b
01EE 8F70 andi R24,15
01F0 8BBB out 0x1b,R24
01F2 .dbline 97
01F2 ; LCD_DATA_PORT|=data&0xf0; //寫高四位
01F2 842F mov R24,R20
01F4 807F andi R24,240
01F6 2BB2 in R2,0x1b
01F8 282A or R2,R24
01FA 2BBA out 0x1b,R2
01FC .dbline 98
01FC ; LCD_en_write();
01FC CDDF xcall _LCD_en_write
01FE .dbline 99
01FE ; data=data<<4; //低四位移到高四位
01FE 842F mov R24,R20
0200 8F70 andi R24,#0x0F
0202 8295 swap R24
0204 482F mov R20,R24
0206 .dbline 100
0206 ; LCD_DATA_PORT&=0X0f; //清高四位
0206 8BB3 in R24,0x1b
0208 8F70 andi R24,15
020A 8BBB out 0x1b,R24
020C .dbline 101
020C ; LCD_DATA_PORT|=data&0xf0; //寫低四位
020C 842F mov R24,R20
020E 807F andi R24,240
0210 2BB2 in R2,0x1b
0212 282A or R2,R24
0214 2BBA out 0x1b,R2
0216 .dbline 102
0216 ; LCD_en_write();
0216 C0DF xcall _LCD_en_write
0218 .dbline -2
0218 L72:
0218 .dbline 0 ; func end
0218 4991 ld R20,y+
021A 0895 ret
021C .dbsym r data 20 c
021C .dbend
021C .dbfunc e LCD_set_xy _LCD_set_xy fV
021C ; address -> R20
021C ; y -> R10
021C ; x -> R22
.even
021C _LCD_set_xy::
021C 0E940000 xcall push_xgsetF00C
0220 A22E mov R10,R18
0222 602F mov R22,R16
0224 .dbline -1
0224 .dbline 121
0224 ;
0224 ; /*
0224 ; //連線為低四位的寫法
0224 ; delay_nus(16);
0224 ; LCD_RS_PORT|=LCD_RS; //RS=1
0224 ; LCD_DATA_PORT&=0Xf0; //清高四位
0224 ; LCD_DATA_PORT|=(data>>4)&0x0f; //寫高四位
0224 ; LCD_en_write();
0224 ;
0224 ; LCD_DATA_PORT&=0Xf0; //清高四位
0224 ; LCD_DATA_PORT|=data&0x0f; //寫低四位
0224 ; LCD_en_write();
0224 ; */
0224 ;
0224 ; }
0224 ;
0224 ;
0224 ; void LCD_set_xy( unsigned char x, unsigned char y ) //寫地址函數
0224 ; {
0224 .dbline 123
0224 ; unsigned char address;
0224 ; if (y == 0) address = 0x80 + x;
0224 AA20 tst R10
0226 19F4 brne L74
0228 X23:
0228 .dbline 123
0228 462F mov R20,R22
022A 4058 subi R20,128 ; addi 128
022C 02C0 xjmp L75
022E L74:
022E .dbline 124
022E ; else address = 0xc0 + x;
022E 462F mov R20,R22
0230 4054 subi R20,64 ; addi 192
0232 L75:
0232 .dbline 125
0232 ; LCD_write_command( address);
0232 042F mov R16,R20
0234 B7DF xcall _LCD_write_command
0236 .dbline -2
0236 L73:
0236 .dbline 0 ; func end
0236 0C940000 xjmp pop_xgsetF00C
023A .dbsym r address 20 c
023A .dbsym r y 10 c
023A .dbsym r x 22 c
023A .dbend
023A .dbfunc e LCD_write_string _LCD_write_string fV
023A ; s -> R20,R21
023A ; Y -> R12
023A ; X -> R10
.even
023A _LCD_write_string::
023A 0E940000 xcall push_xgset303C
023E C22E mov R12,R18
0240 A02E mov R10,R16
0242 4E81 ldd R20,y+6
0244 5F81 ldd R21,y+7
0246 .dbline -1
0246 .dbline 129
0246 ; }
0246 ;
0246 ; void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s) //列x=0~15,行y=0,1
0246 ; {
0246 .dbline 130
0246 ; LCD_set_xy( X, Y ); //寫地址
0246 2C2D mov R18,R12
0248 0A2D mov R16,R10
024A E8DF xcall _LCD_set_xy
024C 05C0 xjmp L78
024E L77:
024E .dbline 132
024E ; while (*s) // 寫顯示字符
024E ; {
024E .dbline 133
024E ; LCD_write_data( *s );
024E FA01 movw R30,R20
0250 0081 ldd R16,z+0
0252 C6DF xcall _LCD_write_data
0254 .dbline 134
0254 ; s ++;
0254 4F5F subi R20,255 ; offset = 1
0256 5F4F sbci R21,255
0258 .dbline 135
0258 ; }
0258 L78:
0258 .dbline 131
0258 FA01 movw R30,R20
025A 2080 ldd R2,z+0
025C 2220 tst R2
025E B9F7 brne L77
0260 X24:
0260 .dbline -2
0260 L76:
0260 .dbline 0 ; func end
0260 0C940000 xjmp pop_xgset303C
0264 .dbsym r s 20 pc
0264 .dbsym r Y 12 c
0264 .dbsym r X 10 c
0264 .dbend
0264 .dbfunc e LCD_write_char _LCD_write_char fV
0264 ; data -> y+2
0264 ; Y -> R12
0264 ; X -> R10
.even
0264 _LCD_write_char::
0264 AA92 st -y,R10
0266 CA92 st -y,R12
0268 C22E mov R12,R18
026A A02E mov R10,R16
026C .dbline -1
026C .dbline 140
026C ;
026C ; }
026C ;
026C ; void LCD_write_char(unsigned char X,unsigned char Y,unsigned char data) //列x=0~15,行y=0,1
026C ; {
026C .dbline 141
026C ; LCD_set_xy( X, Y ); //寫地址
026C 2C2D mov R18,R12
026E 0A2D mov R16,R10
0270 D5DF xcall _LCD_set_xy
0272 .dbline 142
0272 ; LCD_write_data( data);
0272 0A81 ldd R16,y+2
0274 B5DF xcall _LCD_write_data
0276 .dbline -2
0276 L80:
0276 .dbline 0 ; func end
0276 C990 ld R12,y+
0278 A990 ld R10,y+
027A 0895 ret
027C .dbsym l data 2 c
027C .dbsym r Y 12 c
027C .dbsym r X 10 c
027C .dbend
.area data(ram, con, rel)
0000 .dbfile D:\MCU_Project\MCU_AVR\AVR_GY-27\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-27\1602.h
0002 .blkb 2
.area idata
0002 0000 .byte 0,0
.area data(ram, con, rel)
0004 .dbfile D:\MCU_Project\MCU_AVR\AVR_GY-27\1602.h
0004 .blkb 1
.area idata
0004 00 .byte 0
.area data(ram, con, rel)
0005 .dbfile D:\MCU_Project\MCU_AVR\AVR_GY-27\1602.h
0005 .dbfile D:\MCU_Project\MCU_AVR\AVR_GY-27\AVR_GY-27.c
0005 .dbsym e display _display A[5:5]c
.area text(rom, con, rel)
027C .dbfile D:\MCU_Project\MCU_AVR\AVR_GY-27\AVR_GY-27.c
027C .dbfunc e conversion _conversion fV
027C ; i -> R20,R21
.even
027C _conversion::
027C 4A93 st -y,R20
027E 5A93 st -y,R21
0280 A801 movw R20,R16
0282 .dbline -1
0282 .dbline 28
0282 ; /*****************************************
0282 ; * 基于AVR單片機GY-27模塊通信程序 *
0282 ; * HMC5883L+ADXL345 通信程序 *
0282 ; * 功 能:IIC通信讀取數據并顯示 *
0282 ; * 時鐘頻率:內部1M *
0282 ; * 設 計:廣運電子 *
0282 ; * 修改日期:2011年4月20日 *
0282 ; * 編譯環境:ICC-AVR7.14 *
0282 ; * 實驗環境:ATmega16+1602 *
0282 ; * 使用端口:PC0,PC1,PC6,PC7,PA4~PA7 *
0282 ; * 參 考:莫錦攀實驗程序24c02讀取實驗 *
0282 ; *****************************************/
0282 ; #include <iom16v.h>
0282 ; #include "I2C.h"
0282 ; #include "1602.h"
0282 ; #include "delay.h"
0282 ; #include "math.h"
0282 ; #include "stdio.h"
0282 ; void conversion(unsigned int i);
0282 ; unsigned char display[5]={0,0,0,0,0};//顯示數據
0282 ;
0282 ; /*********************************************
0282 ; 數據轉換,十六進制數據轉換成10進制
0282 ; 輸入十六進制范圍:0x0000-0x270f(0-9999)
0282 ; 結果分成個十百千位,以ascii存入顯示區
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -