?? eeprom.lst
字號(hào):
__text_start:
__start:
005C EFCF LDI R28,0xFF
005D E1D0 LDI R29,0x10
005E BFCD OUT 0x3D,R28
005F BFDE OUT 0x3E,R29
0060 51C0 SUBI R28,0x10
0061 40D0 SBCI R29,0
0062 EA0A LDI R16,0xAA
0063 8308 STD Y+0,R16
0064 2400 CLR R0
0065 E2EC LDI R30,0x2C
0066 E0F1 LDI R31,1
0067 E011 LDI R17,1
0068 32EC CPI R30,0x2C
0069 07F1 CPC R31,R17
006A F011 BEQ 0x006D
006B 9201 ST R0,Z+
006C CFFB RJMP 0x0068
006D 8300 STD Z+0,R16
006E E8EC LDI R30,0x8C
006F E0F0 LDI R31,0
0070 E0A0 LDI R26,0
0071 E0B1 LDI R27,1
0072 E010 LDI R17,0
0073 3BE8 CPI R30,0xB8
0074 07F1 CPC R31,R17
0075 F021 BEQ 0x007A
0076 95C8 LPM
0077 9631 ADIW R30,1
0078 920D ST R0,X+
0079 CFF9 RJMP 0x0073
007A 940E02FA CALL _main
_exit:
007C CFFF RJMP _exit
FILE: E:\icc\eeprom\lcd_init.h
(0001) /*
(0002) LCD12864液晶驅(qū)動(dòng)模塊
(0003) */
(0004) /*
(0005) PG0---RS---4
(0006) PG1---R/W--5
(0007) PG2---EN---6
(0008) PA0---DB0---7
(0009) PA1---DB1---8
(0010) PA2---DB2---9
(0011) PA3---DB3---10
(0012) PA4---DB4---11
(0013) PA5---DB5---12
(0014) PA6---DB6---13
(0015) PA7---DB7---14
(0016)
(0017) */
(0018) #include <iom128v.h>
(0019) #include <macros.h>
(0020)
(0021)
(0022) /*命令或是數(shù)據(jù)選擇*/
(0023) /*RS = 0命令,RS = 1數(shù)據(jù)*/
(0024) #define RS_CLR PORTG&=~(1<<0)
(0025) #define RS_SET PORTG|=(1<<0)
(0026) /*讀取或?qū)懭脒x擇*/
(0027) /*RW = 1讀,RW = 0寫*/
(0028) #define RW_CLR PORTG&=~(1<<1)
(0029) #define RW_SET PORTG|=(1<<1)
(0030) /*讀寫使能信號(hào)*/
(0031) /*下降沿有效*/
(0032) #define EN_CLR PORTG&=~(1<<2)
(0033) #define EN_SET PORTG|=(1<<2)
(0034) /*芯片復(fù)位腳*/
(0035) /*高電平復(fù)位
(0036) #define RST_CLR PORTD&=~(1<<PD7)
(0037) #define RST_SET PORTD|=(1<<PD7)*/
(0038) //延時(shí)函數(shù)
(0039) void delay (unsigned int n)
(0040) {
(0041) while(n--);
_delay:
n --> R16
007D 0118 MOVW R2,R16
007E 5001 SUBI R16,1
007F 4010 SBCI R17,0
0080 2022 TST R2
0081 F7D9 BNE 0x007D
0082 2033 TST R3
0083 F7C9 BNE 0x007D
0084 9508 RET
(0042) }
(0043) void chk_busy(void)
(0044) {
(0045) PORTA=0XFF;
_chk_busy:
0085 EF8F LDI R24,0xFF
0086 BB8B OUT 0x1B,R24
(0046) RS_CLR;
0087 91800065 LDS R24,0x65
0089 7F8E ANDI R24,0xFE
008A 93800065 STS 0x65,R24
(0047) RW_SET;
008C 91800065 LDS R24,0x65
008E 6082 ORI R24,2
008F 93800065 STS 0x65,R24
(0048)
(0049) DDRA=0X00;
0091 2422 CLR R2
0092 BA2A OUT 0x1A,R2
(0050)
(0051) EN_SET;
0093 91800065 LDS R24,0x65
0095 6084 ORI R24,4
0096 93800065 STS 0x65,R24
(0052) while(PINA&0X80);
0098 99CF SBIC 0x19,7
0099 CFFE RJMP 0x0098
(0053) EN_CLR;
009A 91800065 LDS R24,0x65
009C 7F8B ANDI R24,0xFB
009D 93800065 STS 0x65,R24
(0054) DDRA=0XFF;
009F EF8F LDI R24,0xFF
00A0 BB8A OUT 0x1A,R24
00A1 9508 RET
_LCD_write_code:
code --> R20
00A2 940E036F CALL push_gset1
00A4 2F40 MOV R20,R16
(0055) }
(0056) //顯示屏命令寫入函數(shù)
(0057) void LCD_write_code(unsigned char code)
(0058) {
(0059) chk_busy();
00A5 DFDF RCALL _chk_busy
(0060) RS_CLR;
00A6 91800065 LDS R24,0x65
00A8 7F8E ANDI R24,0xFE
00A9 93800065 STS 0x65,R24
(0061) RW_CLR;
00AB 91800065 LDS R24,0x65
00AD 7F8D ANDI R24,0xFD
00AE 93800065 STS 0x65,R24
(0062) PORTA=code;
00B0 BB4B OUT 0x1B,R20
(0063) EN_SET;
00B1 91800065 LDS R24,0x65
00B3 6084 ORI R24,4
00B4 93800065 STS 0x65,R24
(0064) delay(100);
00B6 E604 LDI R16,0x64
00B7 E010 LDI R17,0
00B8 DFC4 RCALL _delay
(0065) EN_CLR;
00B9 91800065 LDS R24,0x65
00BB 7F8B ANDI R24,0xFB
00BC 93800065 STS 0x65,R24
00BE 940E0372 CALL pop_gset1
00C0 9508 RET
_LCD_write_data:
data --> R20
00C1 940E036F CALL push_gset1
00C3 2F40 MOV R20,R16
(0066) }
(0067) //顯示屏數(shù)據(jù)顯寫入函數(shù)
(0068) void LCD_write_data(unsigned char data)
(0069) {
(0070) chk_busy();
00C4 DFC0 RCALL _chk_busy
(0071) RS_SET;
00C5 91800065 LDS R24,0x65
00C7 6081 ORI R24,1
00C8 93800065 STS 0x65,R24
(0072) RW_CLR;
00CA 91800065 LDS R24,0x65
00CC 7F8D ANDI R24,0xFD
00CD 93800065 STS 0x65,R24
(0073) PORTA=data;
00CF BB4B OUT 0x1B,R20
(0074) EN_SET;
00D0 91800065 LDS R24,0x65
00D2 6084 ORI R24,4
00D3 93800065 STS 0x65,R24
(0075) delay(100);
00D5 E604 LDI R16,0x64
00D6 E010 LDI R17,0
00D7 DFA5 RCALL _delay
(0076) EN_CLR;
00D8 91800065 LDS R24,0x65
00DA 7F8B ANDI R24,0xFB
00DB 93800065 STS 0x65,R24
00DD 940E0372 CALL pop_gset1
00DF 9508 RET
_disp_char:
asii --> R20
position --> R22
00E0 940E036D CALL push_gset2
00E2 2F42 MOV R20,R18
00E3 2F60 MOV R22,R16
(0077) }
(0078) /*單個(gè)字符輸入函數(shù);position--顯示位置,data--顯示內(nèi)容*/
(0079) void disp_char(unsigned char position,unsigned char asii)
(0080) {
(0081) LCD_write_code(position);
00E4 2F06 MOV R16,R22
00E5 DFBC RCALL _LCD_write_code
(0082) LCD_write_data(asii);
00E6 2F04 MOV R16,R20
00E7 DFD9 RCALL _LCD_write_data
00E8 940E0361 CALL pop_gset2
00EA 9508 RET
_disp_word:
word --> R20
position --> R22
00EB 940E036D CALL push_gset2
00ED 01A9 MOVW R20,R18
00EE 2F60 MOV R22,R16
(0083) }
(0084) /*一串字符輸入函數(shù)
(0085) void disp_char_str(unsigned char position,unsigned char *str)
(0086) {
(0087) LCD_write_code(position);
(0088) while(*str!=0) //含義???
(0089) {
(0090)
(0091) LCD_write_data(*str);
(0092) str++;
(0093) }
(0094) }*/
(0095) /*漢字輸入*/
(0096) void disp_word(unsigned char position,unsigned char *word)
(0097) {
(0098) LCD_write_code(position);//要顯示的位置
00EF 2F06 MOV R16,R22
00F0 DFB1 RCALL _LCD_write_code
00F1 C005 RJMP 0x00F7
(0099) while(*word!=0)
(0100) {
(0101) LCD_write_data(*word);
00F2 01FA MOVW R30,R20
00F3 8100 LDD R16,Z+0
00F4 DFCC RCALL _LCD_write_data
(0102) word++;
00F5 5F4F SUBI R20,0xFF
00F6 4F5F SBCI R21,0xFF
00F7 01FA MOVW R30,R20
00F8 8020 LDD R2,Z+0
00F9 2022 TST R2
00FA F7B9 BNE 0x00F2
00FB 940E0361 CALL pop_gset2
00FD 9508 RET
_disp_number10:
num_l --> R22
num_h --> R10
num --> R20
position --> R22
00FE 940E036B CALL push_gset3
0100 2F42 MOV R20,R18
0101 2F60 MOV R22,R16
(0103) }
(0104)
(0105) }
(0106) //------------------------------------------------------------------------------
(0107) //函數(shù)名稱:disp_number10()
(0108) //功能:數(shù)據(jù)的十進(jìn)制顯示,7顯示07,12顯示12
(0109) //------------------------------------------------------------------------------
(0110) void disp_number10(unsigned char position,unsigned char num)
(0111) {
(0112) unsigned char num_h, num_l;
(0113) LCD_write_code(position);
0102 2F06 MOV R16,R22
0103 DF9E RCALL _LCD_write_code
(0114) if(num>=10)
0104 304A CPI R20,0xA
0105 F088 BCS 0x0117
(0115) {
(0116) num_h=(num/10);
0106 E01A LDI R17,0xA
0107 2F04 MOV R16,R20
0108 940E034B CALL div8u
010A 2EA0 MOV R10,R16
(0117) num_l=(num%10);
010B E01A LDI R17,0xA
010C 2F04 MOV R16,R20
010D 940E0349 CALL mod8u
010F 2F60 MOV R22,R16
(0118) LCD_write_data(num_h+0x30);
0110 2D0A MOV R16,R10
0111 5D00 SUBI R16,0xD0
0112 DFAE RCALL _LCD_write_data
(0119) LCD_write_data(num_l+0x30);
0113 2F06 MOV R16,R22
0114 5D00 SUBI R16,0xD0
0115 DFAB RCALL _LCD_write_data
(0120) }
0116 C005 RJMP 0x011C
(0121) else
(0122) {
(0123) LCD_write_data(0x30);
0117 E300 LDI R16,0x30
0118 DFA8 RCALL _LCD_write_data
(0124) LCD_write_data(num+0x30);
0119 2F04 MOV R16,R20
011A 5D00 SUBI R16,0xD0
011B DFA5 RCALL _LCD_write_data
(0125) }
011C 940E0364 CALL pop_gset3
011E 9508 RET
_disp_number16:
num_l --> R22
num_h --> R10
num --> R20
position --> R22
011F 940E036B CALL push_gset3
0121 2F42 MOV R20,R18
0122 2F60 MOV R22,R16
(0126)
(0127) }
(0128) //------------------------------------------------------------------------------
(0129) //函數(shù)名稱:disp_number16()
(0130) //功能:數(shù)據(jù)的16進(jìn)制顯示,
(0131) //------------------------------------------------------------------------------
(0132) void disp_number16(unsigned char position,unsigned char num)
(0133) {
(0134) unsigned char num_h,num_l;
(0135)
(0136) LCD_write_code(position);
0123 2F06 MOV R16,R22
0124 DF7D RCALL _LCD_write_code
(0137) if(num>=10)
0125 304A CPI R20,0xA
0126 F080 BCS 0x0137
(0138) {
(0139) num_h=(num/16);
0127 2F84 MOV R24,R20
0128 9582 SWAP R24
0129 708F ANDI R24,0xF
012A 2EA8 MOV R10,R24
(0140)
(0141) num_l=(num%16);
012B E110 LDI R17,0x10
012C 2F04 MOV R16,R20
012D 940E0349 CALL mod8u
012F 2F60 MOV R22,R16
(0142)
(0143)
(0144) LCD_write_data(num_h+0x30);
0130 2D0A MOV R16,R10
0131 5D00 SUBI R16,0xD0
0132 DF8E RCALL _LCD_write_data
(0145) LCD_write_data(num_l+0x30);
0133 2F06 MOV R16,R22
0134 5D00 SUBI R16,0xD0
0135 DF8B RCALL _LCD_write_data
(0146) }
0136 C005 RJMP 0x013C
(0147) else
(0148) {
(0149)
(0150)
(0151) LCD_write_data(0x30);
0137 E300 LDI R16,0x30
0138 DF88 RCALL _LCD_write_data
(0152) LCD_write_data(num+0x30);
0139 2F04 MOV R16,R20
013A 5D00 SUBI R16,0xD0
013B DF85 RCALL _LCD_write_data
(0153) }
013C 940E0364 CALL pop_gset3
013E 9508 RET
(0154) }
(0155) //顯示屏初始化
(0156) void disp_init(void)
(0157) {
(0158) DDRA=0XFF;
_disp_init:
013F EF8F LDI R24,0xFF
0140 BB8A OUT 0x1A,R24
(0159) //DDRD=(1<<PD4)|(1<<PD5)|(1<<PD6)|(1<<PD7);
(0160) DDRG=0XFF;
0141 93800064 STS 0x64,R24
(0161)
(0162) LCD_write_code(0x30);//功能設(shè)定/*30---基本指令動(dòng)作
0143 E300 LDI R16,0x30
0144 DF5D RCALL _LCD_write_code
(0163) LCD_write_code(0x01);//清屏,地址指針指向00H
0145 E001 LDI R16,1
0146 DF5B RCALL _LCD_write_code
(0164) LCD_write_code(0x06);//光標(biāo)的移動(dòng)方向
0147 E006 LDI R16,6
0148 DF59 RCALL _LCD_write_code
(0165) LCD_write_code(0x0c);//光標(biāo)反白顯示--0x0f/*開顯示,關(guān)游標(biāo)
0149 E00C LDI R16,0xC
014A DF57 RCALL _LCD_write_code
014B 9508 RET
_error:
type --> R16
014C 940E036F CALL push_gset1
FILE: E:\icc\eeprom\eeprom_init.h
(0001) /*
(0002) I2C總線/TWI操作模塊
(0003) 1、讀取和寫入函數(shù)
(0004) 2、地址有效范圍255
(0005) 3、數(shù)據(jù)長(zhǎng)度為單字節(jié)
(0006) 4、函數(shù)采用查詢方式
(0007) 5、可直接嵌入到項(xiàng)目中使用
(0008) 6、晶振頻率:1M
(0009) 7、總線速度:50K
(0010) AVR_AFA
(0011) www.iccavr.com
(0012) */
(0013) #include "iom128v.h"
(0014) /*I2C總線主機(jī)模式錯(cuò)誤處理*/
(0015) void error(unsigned char type)
(0016) {
(0017) switch (type & 0xF8)
014E 2F40 MOV R20,R16
014F 2755 CLR R21
0150 7F48 ANDI R20,0xF8
0151 7050 ANDI R21,0
0152 3340 CPI R20,0x30
0153 E0E0 LDI R30,0
0154 075E CPC R21,R30
0155 F0D9 BEQ 0x0171
0156 E380 LDI R24,0x30
0157 E090 LDI R25,0
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -