?? avr_gy-27.lis
字號:
00C8 B9DF xcall _delay_nms
00CA .dbline 63
00CA ; return 0;
00CA 0027 clr R16
00CC .dbline -2
00CC L17:
00CC .dbline 0 ; func end
00CC C990 ld R12,y+
00CE A990 ld R10,y+
00D0 0895 ret
00D2 .dbsym r Wdata 10 c
00D2 .dbsym r RegAddress 12 c
00D2 .dbend
00D2 .dbfunc e I2C_Read _I2C_Read fc
00D2 ; temp -> R10
00D2 ; RegAddress -> R16,R17
.even
00D2 _I2C_Read::
00D2 AA92 st -y,R10
00D4 .dbline -1
00D4 .dbline 74
00D4 ; }
00D4 ;
00D4 ; /*********************************************
00D4 ; I2C總線讀一個字節(jié)
00D4 ; 返回0:讀成功
00D4 ; 返回1:讀失敗
00D4 ; **********************************************/
00D4 ;
00D4 ; unsigned char I2C_Read(unsigned RegAddress)
00D4 ;
00D4 ; {
00D4 .dbline 77
00D4 ; unsigned char temp;
00D4 ;
00D4 ; Start();//I2C啟動
00D4 84EA ldi R24,164
00D6 86BF out 0x36,R24
00D8 .dbline 78
00D8 ; Wait();
00D8 L39:
00D8 .dbline 78
00D8 L40:
00D8 .dbline 78
00D8 26B6 in R2,0x36
00DA 27FE sbrs R2,7
00DC FDCF rjmp L39
00DE X11:
00DE .dbline 78
00DE .dbline 78
00DE .dbline 79
00DE ; if (TestAck()!=START)
00DE 81B1 in R24,0x1
00E0 887F andi R24,248
00E2 8830 cpi R24,8
00E4 11F0 breq L42
00E6 X12:
00E6 .dbline 80
00E6 ; return 1; //ACK
00E6 01E0 ldi R16,1
00E8 40C0 xjmp L38
00EA L42:
00EA .dbline 82
00EA ;
00EA ; Write8Bit(WD_DEVICE_ADDR); //寫I2C從器件地址和寫方式
00EA .dbline 82
00EA 8CE3 ldi R24,60
00EC 83B9 out 0x3,R24
00EE .dbline 82
00EE 84E8 ldi R24,132
00F0 86BF out 0x36,R24
00F2 .dbline 82
00F2 .dbline 82
00F2 .dbline 83
00F2 ; Wait();
00F2 L44:
00F2 .dbline 83
00F2 L45:
00F2 .dbline 83
00F2 26B6 in R2,0x36
00F4 27FE sbrs R2,7
00F6 FDCF rjmp L44
00F8 X13:
00F8 .dbline 83
00F8 .dbline 83
00F8 .dbline 84
00F8 ; if (TestAck()!=MT_SLA_ACK)
00F8 81B1 in R24,0x1
00FA 887F andi R24,248
00FC 8831 cpi R24,24
00FE 11F0 breq L47
0100 X14:
0100 .dbline 85
0100 ; return 1; //ACK
0100 01E0 ldi R16,1
0102 33C0 xjmp L38
0104 L47:
0104 .dbline 87
0104 ;
0104 ; Write8Bit(RegAddress); //寫器件相應(yīng)寄存器地址
0104 .dbline 87
0104 03B9 out 0x3,R16
0106 .dbline 87
0106 84E8 ldi R24,132
0108 86BF out 0x36,R24
010A .dbline 87
010A .dbline 87
010A .dbline 88
010A ; Wait();
010A L49:
010A .dbline 88
010A L50:
010A .dbline 88
010A 26B6 in R2,0x36
010C 27FE sbrs R2,7
010E FDCF rjmp L49
0110 X15:
0110 .dbline 88
0110 .dbline 88
0110 .dbline 89
0110 ; if (TestAck()!=MT_DATA_ACK)
0110 81B1 in R24,0x1
0112 887F andi R24,248
0114 8832 cpi R24,40
0116 11F0 breq L52
0118 X16:
0118 .dbline 90
0118 ; return 1;
0118 01E0 ldi R16,1
011A 27C0 xjmp L38
011C L52:
011C .dbline 92
011C ;
011C ; Start(); //I2C重新啟動
011C 84EA ldi R24,164
011E 86BF out 0x36,R24
0120 .dbline 93
0120 ; Wait();
0120 L54:
0120 .dbline 93
0120 L55:
0120 .dbline 93
0120 26B6 in R2,0x36
0122 27FE sbrs R2,7
0124 FDCF rjmp L54
0126 X17:
0126 .dbline 93
0126 .dbline 93
0126 .dbline 94
0126 ; if (TestAck()!=RE_START)
0126 81B1 in R24,0x1
0128 887F andi R24,248
012A 8031 cpi R24,16
012C 11F0 breq L57
012E X18:
012E .dbline 95
012E ; return 1;
012E 01E0 ldi R16,1
0130 1CC0 xjmp L38
0132 L57:
0132 .dbline 96
0132 ; Write8Bit(RD_DEVICE_ADDR); //寫I2C從器件地址和讀方式
0132 .dbline 96
0132 8DE3 ldi R24,61
0134 83B9 out 0x3,R24
0136 .dbline 96
0136 84E8 ldi R24,132
0138 86BF out 0x36,R24
013A .dbline 96
013A .dbline 96
013A .dbline 97
013A ; Wait();
013A L59:
013A .dbline 97
013A L60:
013A .dbline 97
013A 26B6 in R2,0x36
013C 27FE sbrs R2,7
013E FDCF rjmp L59
0140 X19:
0140 .dbline 97
0140 .dbline 97
0140 .dbline 98
0140 ; if(TestAck()!=MR_SLA_ACK)
0140 81B1 in R24,0x1
0142 887F andi R24,248
0144 8034 cpi R24,64
0146 11F0 breq L62
0148 X20:
0148 .dbline 99
0148 ; return 1; //ACK
0148 01E0 ldi R16,1
014A 0FC0 xjmp L38
014C L62:
014C .dbline 101
014C ;
014C ; Twi(); //啟動主I2C讀方式
014C 84E8 ldi R24,132
014E 86BF out 0x36,R24
0150 .dbline 102
0150 ; Wait();
0150 L64:
0150 .dbline 102
0150 L65:
0150 .dbline 102
0150 26B6 in R2,0x36
0152 27FE sbrs R2,7
0154 FDCF rjmp L64
0156 X21:
0156 .dbline 102
0156 .dbline 102
0156 .dbline 103
0156 ; if(TestAck()!=MR_DATA_NOACK)
0156 81B1 in R24,0x1
0158 887F andi R24,248
015A 8835 cpi R24,88
015C 11F0 breq L67
015E X22:
015E .dbline 104
015E ; return 1; //ACK
015E 01E0 ldi R16,1
0160 04C0 xjmp L38
0162 L67:
0162 .dbline 106
0162 ;
0162 ; temp=TWDR;//讀取I2C接收數(shù)據(jù)
0162 A3B0 in R10,0x3
0164 .dbline 107
0164 ; Stop();//I2C停止
0164 84E9 ldi R24,148
0166 86BF out 0x36,R24
0168 .dbline 108
0168 ; return temp;
0168 0A2D mov R16,R10
016A .dbline -2
016A L38:
016A .dbline 0 ; func end
016A A990 ld R10,y+
016C 0895 ret
016E .dbsym r temp 10 c
016E .dbsym r RegAddress 16 i
016E .dbend
016E .dbfile D:\MCU_Project\MCU_AVR\AVR_GY-27\1602.h
016E .dbfunc e LCD_init _LCD_init fV
.even
016E _LCD_init::
016E .dbline -1
016E .dbline 44
016E ; /* 用法:
016E ; LCD_init();
016E ; LCD_write_string(列,行,"字符串");
016E ; LCD_write_char(列,行,'字符');
016E ; ---------------------------------------------------------------
016E ; 下面是AVR與LCD連接信息
016E ; PC6 ->RS
016E ; PC7 ->EN
016E ; 地 ->RW
016E ; PA4 ->D4
016E ; PA5 ->D5
016E ; PA6 ->D6
016E ; PA7 ->D7
016E ; 使用端口:1602:PC6,PC7,PA4~PA7
016E ; 要使用本驅(qū)動,改變下面配置信息即可
016E ; -----------------------------------------------------------------*/
016E ; #define LCD_EN_PORT PORTC //以下2個要設(shè)為同一個口
016E ; #define LCD_EN_DDR DDRC
016E ; #define LCD_RS_PORT PORTC //以下2個要設(shè)為同一個口
016E ; #define LCD_RS_DDR DDRC
016E ; #define LCD_DATA_PORT PORTA //以下3個要設(shè)為同一個口
016E ; #define LCD_DATA_DDR DDRA //默認情況下連線必須使用高四位端口,如果不是請注意修改
016E ; #define LCD_DATA_PIN PINA
016E ; #define LCD_RS (1<<PC6) //0x20 portC6 out
016E ; #define LCD_EN (1<<PC7) //0x40 portC7 out
016E ; #define LCD_DATA ((1<<PA4)|(1<<PA5)|(1<<PA6)|(1<<PA7)) //0xf0 portA 4/5/6/7 out
016E ; /*--------------------------------------------------------------------------------------------------
016E ; 函數(shù)說明
016E ; --------------------------------------------------------------------------------------------------*/
016E ; void LCD_init(void);
016E ; void LCD_en_write(void);
016E ; void LCD_write_command(unsigned char command) ;
016E ; void LCD_write_data(unsigned char data);
016E ; void LCD_set_xy (unsigned char x, unsigned char y);
016E ; void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s);
016E ; void LCD_write_char(unsigned char X,unsigned char Y,unsigned char data);
016E ;
016E ; //-----------------------------------------------------------------------------------------
016E ;
016E ; #include <macros.h>
016E ; #include "delay.h"
016E ;
016E ; void LCD_init(void) //液晶初始化
016E ; {
016E .dbline 45
016E ; LCD_DATA_DDR|=LCD_DATA; //數(shù)據(jù)口方向為輸出
016E 8AB3 in R24,0x1a
0170 806F ori R24,240
0172 8ABB out 0x1a,R24
0174 .dbline 46
0174 ; LCD_EN_DDR|=LCD_EN; //設(shè)置EN方向為輸出
0174 A79A sbi 0x14,7
0176 .dbline 47
0176 ; LCD_RS_DDR|=LCD_RS; //設(shè)置RS方向為輸出
0176 A69A sbi 0x14,6
0178 .dbline 48
0178 ; LCD_write_command(0x28);
0178 08E2 ldi R16,40
017A 14D0 xcall _LCD_write_command
017C .dbline 49
017C ; LCD_en_write();
017C 0DD0 xcall _LCD_en_write
017E .dbline 50
017E ; delay_nus(40);
017E 08E2 ldi R16,40
0180 10E0 ldi R17,0
0182 44DF xcall _delay_nus
0184 .dbline 51
0184 ; LCD_write_command(0x28); //4位顯示
0184 08E2 ldi R16,40
0186 0ED0 xcall _LCD_write_command
0188 .dbline 52
0188 ; LCD_write_command(0x0c); //顯示開
0188 0CE0 ldi R16,12
018A 0CD0 xcall _LCD_write_command
018C .dbline 53
018C ; LCD_write_command(0x01); //清屏
018C 01E0 ldi R16,1
018E 0AD0 xcall _LCD_write_command
0190 .dbline 54
0190 ; delay_nms(10);
0190 0AE0 ldi R16,10
0192 10E0 ldi R17,0
0194 53DF xcall _delay_nms
0196 .dbline -2
0196 L69:
0196 .dbline 0 ; func end
0196 0895 ret
0198 .dbend
0198 .dbfunc e LCD_en_write _LCD_en_write fV
.even
0198 _LCD_en_write::
0198 .dbline -1
0198 .dbline 58
0198 ; }
0198 ;
0198 ; void LCD_en_write(void) //液晶使能
0198 ; {
0198 .dbline 59
0198 ; LCD_EN_PORT|=LCD_EN;
0198 AF9A sbi 0x15,7
019A .dbline 60
019A ; delay_nus(1);
019A 01E0 ldi R16,1
019C 10E0 ldi R17,0
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -