?? led.lst
字號:
__start:
__text_start:
0033 E5CF LDI R28,0x5F
0034 E0D4 LDI R29,4
0035 BFCD OUT 0x3D,R28
0036 BFDE OUT 0x3E,R29
0037 51C0 SUBI R28,0x10
0038 40D0 SBCI R29,0
0039 EA0A LDI R16,0xAA
003A 8308 STD Y+0,R16
003B 2400 CLR R0
003C E6E0 LDI R30,0x60
003D E0F0 LDI R31,0
003E E010 LDI R17,0
003F 36E3 CPI R30,0x63
0040 07F1 CPC R31,R17
0041 F011 BEQ 0x0044
0042 9201 ST R0,Z+
0043 CFFB RJMP 0x003F
0044 8300 STD Z+0,R16
0045 E6E6 LDI R30,0x66
0046 E0F0 LDI R31,0
0047 E6A0 LDI R26,0x60
0048 E0B0 LDI R27,0
0049 E010 LDI R17,0
004A 36E6 CPI R30,0x66
004B 07F1 CPC R31,R17
004C F021 BEQ 0x0051
004D 95C8 LPM
004E 9631 ADIW R30,1
004F 920D ST R0,X+
0050 CFF9 RJMP 0x004A
0051 940E01B4 CALL _main
_exit:
0053 CFFF RJMP _exit
FILE: D:\icc\include\delay.h
(0001) //#define F_CPU 12000000
(0002) #define F_CPU 11059200
(0003) //#define F_CPU 8000000
(0004) //#define F_CPU 7372800
(0005) //#define F_CPU 4000000
(0006) /*************************************************************************
(0007) 通用延時頭文件:
(0008) delay_nus(n)延時n微秒
(0009) delay_nms(n)延時n毫秒
(0010) *************************************************************************/
(0011) #if F_CPU == 12000000
(0012) void delay_nus(unsigned int time)
(0013) {
(0014) while (time!=0)
(0015) {
(0016) NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();
(0017) time--;
(0018) }
(0019) }
(0020) void delay_nms(unsigned int time)
(0021) {
(0022) unsigned int i;
(0023) while (time!=0)
(0024) {
(0025) for(i=0;i<1740;i++);
(0026) time--;
(0027) }
(0028) }
(0029) #endif
(0030)
(0031) #if F_CPU == 11059200
(0032) void delay_nus(unsigned int time)
(0033) {
_delay_nus:
time --> R16
0054 C009 RJMP 0x005E
(0034) while (time!=0)
(0035) {
(0036) NOP();NOP();NOP();NOP();NOP();NOP();NOP();
0055 0000 NOP
0056 0000 NOP
0057 0000 NOP
0058 0000 NOP
0059 0000 NOP
005A 0000 NOP
005B 0000 NOP
(0037) time--;
005C 5001 SUBI R16,1
005D 4010 SBCI R17,0
005E 3000 CPI R16,0
005F 0701 CPC R16,R17
0060 F7A1 BNE 0x0055
0061 9508 RET
_delay_nms:
i --> R20
time --> R16
0062 940E0257 CALL push_gset1
(0038) }
(0039) }
(0040) void delay_nms(unsigned int time)
(0041) {
0064 C00B RJMP 0x0070
(0042) unsigned int i;
(0043) while (time!=0)
(0044) {
(0045) for(i=0;i<1580;i++);
0065 2744 CLR R20
0066 2755 CLR R21
0067 C002 RJMP 0x006A
0068 5F4F SUBI R20,0xFF
0069 4F5F SBCI R21,0xFF
006A 324C CPI R20,0x2C
006B E0E6 LDI R30,6
006C 075E CPC R21,R30
006D F3D0 BCS 0x0068
(0046) time--;
006E 5001 SUBI R16,1
006F 4010 SBCI R17,0
0070 3000 CPI R16,0
0071 0701 CPC R16,R17
0072 F791 BNE 0x0065
0073 940E025A CALL pop_gset1
0075 9508 RET
_Scan_Key:
i --> R20
0076 940E0257 CALL push_gset1
FILE: D:\icc\include\AVR_XQV12.h
(0001)
(0002)
(0003) #define TRUE 0xff
(0004) #define FALSE 0x00
(0005) #define null 0x00
(0006) #define Open_LED PORTA|=0x10
(0007) #define Close_LED PORTA&=~0x10
(0008) #define LED PORTB
(0009) #define SMG PORTB
(0010) #define Open_SMG_DATA PORTA|=0x08
(0011) #define Close_SMG_DATA PORTA&=~0x08
(0012) #define Open_SMG_BIT PORTA|=0x04
(0013) #define Close_SMG_BIT PORTA&=~0x04
(0014) #define KEY0 (PIND&0x04)
(0015) #define KEY1 (PIND&0x08)
(0016) #define SetSclk (PORTC|=0x80)
(0017) #define ClrSclk (PORTC&=~0x80)
(0018) #define SetRs (PORTD|=0x40)
(0019) #define ClrRs (PORTD&=~0x40)
(0020) #define SetSid (PORTC|=0x40)
(0021) #define ClrSid (PORTC&=~0x40)
(0022) #define D0 0x20
(0023) #define port PORTA
(0024) #define ddrt DDRA
(0025) #define pin PINA
(0026) #define Set_CS5615 (PORTA|=0x80)
(0027) #define Clr_CS5615 (PORTA&=~0x80)
(0028) #define Period 0x6bfe //PWM脈沖周期20ms
(0029) #define START 0x08
(0030) #define MT_SLA_ACK 0x18
(0031) #define MT_DATA_ACK 0x28
(0032) #define RE_START 0x10
(0033) #define MR_SLA_ACK 0x40
(0034) #define MR_DATA_NOACK 0x58
(0035) #define rd_device_add 0xa3 //定義器件讀地址
(0036) #define wr_device_add 0xa2 //定義器件寫地址
(0037) #define START 0x08
(0038) #define MT_SLA_ACK 0x18
(0039) #define MT_DATA_ACK 0x28
(0040) #define RE_START 0x10
(0041) #define MR_SLA_ACK 0x40
(0042) #define MR_DATA_NOACK 0x58
(0043) #define MR_DATA_ACK 0x50
(0044)
(0045) /********************************************
(0046) #define rd_device_add 0xa3 //定義器件讀地址
(0047) #define wr_device_add 0xa2 //定義器件寫地址
(0048) #define START 0x08
(0049) #define MT_SLA_ACK 0x18
(0050) #define MT_DATA_ACK 0x28
(0051) #define RE_START 0x10
(0052) #define MR_SLA_ACK 0x40
(0053) #define MR_DATA_NOACK 0x58
(0054) #define MR_DATA_ACK 0x50
(0055) #define START 0x08
(0056) #define MT_SLA_ACK 0x18
(0057) #define MT_DATA_ACK 0x28
(0058) #define RE_START 0x10
(0059) #define MR_SLA_ACK 0x40
(0060) #define MR_DATA_NOACK 0x58
(0061) unsigned char sing=0;
(0062)
(0063) unsigned char read_shijian[7]={0x02,0x21,0x16,0x24,0x00,0x12,0x27};
(0064) unsigned char write_shijian[7]={0x00,0x52,0x10,0x28,0x04,0x05,0x07};
(0065) unsigned char temp[3];
(0066)
(0067)
(0068) //********************************************
(0069)
(0070)
(0071) void Start(void)
(0072) {TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);}
(0073)
(0074) void Wait(void)
(0075) {while((TWCR&0x80)!=0x80);}
(0076)
(0077) unsigned char TestAck(void)
(0078) {unsigned char twsr;
(0079) twsr=TWSR&0xf8;
(0080) return twsr;}
(0081)
(0082) void Write8Bit(unsigned char data)
(0083) {TWDR=data;TWCR=(1<<TWINT)|(1<<TWEN);}
(0084)
(0085) void Stop(void)
(0086) {TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN);}
(0087)
(0088) void Ack(void)
(0089) {TWCR=(1<<TWINT)|(1<<TWEA)|(1<<TWEN);}
(0090)
(0091) void Twi(void)
(0092) {TWCR=(1<<TWINT)|(1<<TWEN);}
(0093)
(0094) *********************************************/
(0095)
(0096)
(0097)
(0098)
(0099)
(0100)
(0101) #if AD==TRUE //條件編譯指令
(0102) unsigned char Adc_Mux=0;
(0103) unsigned int Adc0_Rel=0;
(0104) unsigned int Adc1_Rel=0;
(0105) unsigned int Adc0_Catch=0;
(0106) unsigned int Adc1_Catch=0;
(0107) unsigned int Adc0_Conver[20];
(0108) unsigned int Adc1_Conver[20];
(0109) unsigned char Adc0_F;
(0110) unsigned char Adc1_F;
(0111) #endif //條件編譯結束
(0112) unsigned char Key_Number; //全局變量:按鍵標志
(0113) unsigned int temprter;
(0114) #pragma data:code
(0115) const unsigned char SMG_Conver[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
(0116) 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40};
(0117) //數碼管譯碼數組
(0118) #pragma data:data
(0119) /*******************************************************/
(0120) /****** 函數名稱: Scan_Key() ******/
(0121) /****** 功 能: 鍵盤掃描 ******/
(0122) /****** 參 數: 無 ******/
(0123) /****** 返回值 : 按鍵的鍵值,無按鍵時返回null ******/
(0124) /*******************************************************/
(0125) unsigned char Scan_Key(void)
(0126) {
(0127) unsigned char i;
(0128) PORTC=0x00;
0078 2422 CLR R2
0079 BA25 OUT 0x15,R2
(0129) DDRC =0xf0; //設置端口高4位輸出,低四位輸入
007A EF80 LDI R24,0xF0
007B BB84 OUT 0x14,R24
(0130) PORTC=0x0f; //低四位內部上拉
007C E08F LDI R24,0xF
007D BB85 OUT 0x15,R24
(0131) delay_nus(1); //短暫延時
007E E001 LDI R16,1
007F E010 LDI R17,0
0080 DFD3 RCALL _delay_nus
(0132) i=PINC&0x0f; //讀取端口電平
0081 B343 IN R20,0x13
0082 704F ANDI R20,0xF
(0133) if(i!=0x0f) //判斷是否有鍵按下
0083 304F CPI R20,0xF
0084 F0B1 BEQ 0x009B
(0134) {
(0135) PORTC=0x00;
0085 2422 CLR R2
0086 BA25 OUT 0x15,R2
(0136) DDRC =0x0f; //設置端口低4位輸出,高四位輸入
0087 E08F LDI R24,0xF
0088 BB84 OUT 0x14,R24
(0137) PORTC=0xf0; //高四位內部上拉
0089 EF80 LDI R24,0xF0
008A BB85 OUT 0x15,R24
(0138) delay_nus(10); //短暫延時,去抖
008B E00A LDI R16,0xA
008C E010 LDI R17,0
008D DFC6 RCALL _delay_nus
(0139) if((PINC&0xf0)!=0xf0) //再次判斷是否有鍵按下
008E B383 IN R24,0x13
008F 7F80 ANDI R24,0xF0
0090 3F80 CPI R24,0xF0
0091 F049 BEQ 0x009B
(0140) {
(0141) i+=(PINC&0xf0); //讀取端口電平
0092 B383 IN R24,0x13
0093 7F80 ANDI R24,0xF0
0094 0F48 ADD R20,R24
(0142) while((PINC&0xf0)!=0xf0); //等待按鍵釋放
0095 B383 IN R24,0x13
0096 7F80 ANDI R24,0xF0
0097 3F80 CPI R24,0xF0
0098 F7E1 BNE 0x0095
(0143) return i; //返回鍵值
0099 2F04 MOV R16,R20
009A C001 RJMP 0x009C
(0144) }
(0145) }
(0146) return null; //無按鍵按下返回null
009B 2700 CLR R16
009C 940E025A CALL pop_gset1
009E 9508 RET
_Key_Num:
key --> R16
009F 940E0257 CALL push_gset1
(0147) }
(0148)
(0149) /*******************************************************/
(0150) /****** 函數名稱: Key_Num() ******/
(0151) /****** 功 能: 轉換鍵值為0-f十六進制數 ******/
(0152) /****** 參 數: key--鍵值 ******/
(0153) /****** 返回值 : 0-f ******/
(0154) /*******************************************************/
(0155) unsigned char Key_Num(unsigned char key)
(0156) {
(0157) switch(key)
00A1 2F40 MOV R20,R16
00A2 2755 CLR R21
00A3 3B47 CPI R20,0xB7
00A4 E0E0 LDI R30,0
00A5 075E CPC R21,R30
00A6 F409 BNE 0x00A8
00A7 C054 RJMP 0x00FC
00A8 3B4B CPI R20,0xBB
00A9 E0E0 LDI R30,0
00AA 075E CPC R21,R30
00AB F409 BNE 0x00AD
00AC C057 RJMP 0x0104
00AD 3B4D CPI R20,0xBD
00AE E0E0 LDI R30,0
00AF 075E CPC R21,R30
00B0 F409 BNE 0x00B2
00B1 C05A RJMP 0x010C
00B2 3B4E CPI R20,0xBE
00B3 E0E0 LDI R30,0
00B4 075E CPC R21,R30
00B5 F409 BNE 0x00B7
00B6 C05D RJMP 0x0114
00B7 EB8E LDI R24,0xBE
00B8 E090 LDI R25,0
00B9 1784 CP R24,R20
00BA 0795 CPC R25,R21
00BB F0AC BLT 0x00D1
00BC 3747 CPI R20,0x77
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -