📄 1820.lst
字号:
__start:
__text_start:
0043 E5CF LDI R28,0x5F
0044 E0D4 LDI R29,4
0045 BFCD OUT 0x3D,R28
0046 BFDE OUT 0x3E,R29
0047 51C0 SUBI R28,0x10
0048 40D0 SBCI R29,0
0049 EA0A LDI R16,0xAA
004A 8308 STD Y+0,R16
004B 2400 CLR R0
004C E6EE LDI R30,0x6E
004D E0F0 LDI R31,0
004E E010 LDI R17,0
004F 37E2 CPI R30,0x72
0050 07F1 CPC R31,R17
0051 F011 BEQ 0x0054
0052 9201 ST R0,Z+
0053 CFFB RJMP 0x004F
0054 8300 STD Z+0,R16
0055 E7E8 LDI R30,0x78
0056 E0F0 LDI R31,0
0057 E6A0 LDI R26,0x60
0058 E0B0 LDI R27,0
0059 E010 LDI R17,0
005A 38E6 CPI R30,0x86
005B 07F1 CPC R31,R17
005C F021 BEQ 0x0061
005D 95C8 LPM
005E 9631 ADIW R30,1
005F 920D ST R0,X+
0060 CFF9 RJMP 0x005A
0061 940E038E CALL _main
_exit:
0063 CFFF RJMP _exit
FILE: H:\bbi项目源程序\18b20温度传感器\LCD显示18B20\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
0064 C009 RJMP 0x006E
(0034) while (time!=0)
(0035) {
(0036) NOP();NOP();NOP();NOP();NOP();NOP();NOP();
0065 0000 NOP
0066 0000 NOP
0067 0000 NOP
0068 0000 NOP
0069 0000 NOP
006A 0000 NOP
006B 0000 NOP
(0037) time--;
006C 5001 SUBI R16,1
006D 4010 SBCI R17,0
006E 3000 CPI R16,0
006F 0701 CPC R16,R17
0070 F7A1 BNE 0x0065
0071 9508 RET
_delay_nms:
i --> R20
time --> R16
0072 940E0454 CALL push_gset1
(0038) }
(0039) }
(0040) void delay_nms(unsigned int time)
(0041) {
0074 C00B RJMP 0x0080
(0042) unsigned int i;
(0043) while (time!=0)
(0044) {
(0045) for(i=0;i<1580;i++);
0075 2744 CLR R20
0076 2755 CLR R21
0077 C002 RJMP 0x007A
0078 5F4F SUBI R20,0xFF
0079 4F5F SBCI R21,0xFF
007A 324C CPI R20,0x2C
007B E0E6 LDI R30,6
007C 075E CPC R21,R30
007D F3D0 BCS 0x0078
(0046) time--;
007E 5001 SUBI R16,1
007F 4010 SBCI R17,0
0080 3000 CPI R16,0
0081 0701 CPC R16,R17
0082 F791 BNE 0x0075
0083 940E0457 CALL pop_gset1
0085 9508 RET
_Scan_Key:
i --> R20
0086 940E0454 CALL push_gset1
FILE: H:\bbi项目源程序\18b20温度传感器\LCD显示18B20\AVR_XQV12.h
(0001)
(0002) #define TRUE 0xff //真
(0003) #define FALSE 0x00 //假
(0004) #define null 0x00 //空
(0005) #define Open_LED PORTA|=0x10 //使能LED
(0006) #define Close_LED PORTA&=~0x10 //关闭LED
(0007) #define LED PORTB //LED端口
(0008) #define SMG PORTB //数码管端口
(0009) #define Open_SMG_DATA PORTA|=0x08 //使能数码管数据
(0010) #define Close_SMG_DATA PORTA&=~0x08 //关闭数码管数据
(0011) #define Open_SMG_BIT PORTA|=0x04 //使能数码管位选择
(0012) #define Close_SMG_BIT PORTA&=~0x04 //关闭数码管位选择
(0013) #define KEY0 (PIND&0x04) //INT0
(0014) #define KEY1 (PIND&0x08) //INT1
(0015) #define SetSclk (PORTC|=0x80) //LCD12864 CLK
(0016) #define ClrSclk (PORTC&=~0x80)
(0017) #define SetRs (PORTD|=0x40) //LCD12864 CS
(0018) #define ClrRs (PORTD&=~0x40)
(0019) #define SetSid (PORTC|=0x40) //LCD12864 DATA
(0020) #define ClrSid (PORTC&=~0x40)
(0021) #define D0 0x80 //18B20 DATA
(0022) #define port PORTD
(0023) #define ddrt DDRD
(0024) #define pin PIND
(0025) #define Set_CS5615 (PORTD|=0x80) //片选5615
(0026) #define Clr_CS5615 (PORTD&=~0x80) //释放
(0027) #define Period 0x6bfe //PWM脉冲周期20ms
(0028) #define rd_device_add 0xa3 //定义器件读地址
(0029) #define wr_device_add 0xa2 //定义器件写地址
(0030) #define START 0x08 //起始信号
(0031) #define MT_SLA_ACK 0x18
(0032) #define MT_DATA_ACK 0x28
(0033) #define RE_START 0x10
(0034) #define MR_SLA_ACK 0x40
(0035) #define MR_DATA_NOACK 0x58
(0036) #define START 0x08
(0037) #define MT_SLA_ACK 0x18
(0038) #define MT_DATA_ACK 0x28
(0039) #define RE_START 0x10
(0040) #define MR_SLA_ACK 0x40
(0041) #define MR_DATA_NOACK 0x58
(0042) #define MR_DATA_ACK 0x50
(0043)
(0044) #if AD==TRUE //条件编译指令
(0045) unsigned char Adc_Mux=0;
(0046) unsigned int Adc0_Rel=0;
(0047) unsigned int Adc1_Rel=0;
(0048) unsigned int Adc0_Catch=0;
(0049) unsigned int Adc1_Catch=0;
(0050) unsigned int Adc0_Conver[20];
(0051) unsigned int Adc1_Conver[20];
(0052) unsigned char Adc0_F;
(0053) unsigned char Adc1_F;
(0054) #endif //条件编译结束
(0055) unsigned char Key_Number; //全局变量:按键标志
(0056) unsigned int temprter;
(0057) #pragma data:code
(0058) const unsigned char SMG_Conver[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
(0059) 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40};
(0060) //数码管译码数组
(0061) #pragma data:data
(0062) /*******************************************************/
(0063) /****** 函数名称: Scan_Key() ******/
(0064) /****** 功 能: 键盘扫描 ******/
(0065) /****** 参 数: 无 ******/
(0066) /****** 返回值 : 按键的键值,无按键时返回null ******/
(0067) /*******************************************************/
(0068) unsigned char Scan_Key(void)
(0069) {
(0070) unsigned char i;
(0071) PORTC=0x00;
0088 2422 CLR R2
0089 BA25 OUT 0x15,R2
(0072) DDRC =0xf0; //设置端口高4位输出,低四位输入
008A EF80 LDI R24,0xF0
008B BB84 OUT 0x14,R24
(0073) PORTC=0x0f; //低四位内部上拉
008C E08F LDI R24,0xF
008D BB85 OUT 0x15,R24
(0074) delay_nus(1); //短暂延时
008E E001 LDI R16,1
008F E010 LDI R17,0
0090 DFD3 RCALL _delay_nus
(0075) i=PINC&0x0f; //读取端口电平
0091 B343 IN R20,0x13
0092 704F ANDI R20,0xF
(0076) if(i!=0x0f) //判断是否有键按下
0093 304F CPI R20,0xF
0094 F0B1 BEQ 0x00AB
(0077) {
(0078) PORTC=0x00;
0095 2422 CLR R2
0096 BA25 OUT 0x15,R2
(0079) DDRC =0x0f; //设置端口低4位输出,高四位输入
0097 E08F LDI R24,0xF
0098 BB84 OUT 0x14,R24
(0080) PORTC=0xf0; //高四位内部上拉
0099 EF80 LDI R24,0xF0
009A BB85 OUT 0x15,R24
(0081) delay_nus(10); //短暂延时,去抖
009B E00A LDI R16,0xA
009C E010 LDI R17,0
009D DFC6 RCALL _delay_nus
(0082) if((PINC&0xf0)!=0xf0) //再次判断是否有键按下
009E B383 IN R24,0x13
009F 7F80 ANDI R24,0xF0
00A0 3F80 CPI R24,0xF0
00A1 F049 BEQ 0x00AB
(0083) {
(0084) i+=(PINC&0xf0); //读取端口电平
00A2 B383 IN R24,0x13
00A3 7F80 ANDI R24,0xF0
00A4 0F48 ADD R20,R24
(0085) while((PINC&0xf0)!=0xf0); //等待按键释放
00A5 B383 IN R24,0x13
00A6 7F80 ANDI R24,0xF0
00A7 3F80 CPI R24,0xF0
00A8 F7E1 BNE 0x00A5
(0086) return i; //返回键值
00A9 2F04 MOV R16,R20
00AA C001 RJMP 0x00AC
(0087) }
(0088) }
(0089) return null; //无按键按下返回null
00AB 2700 CLR R16
00AC 940E0457 CALL pop_gset1
00AE 9508 RET
_Key_Num:
key --> R16
00AF 940E0454 CALL push_gset1
(0090) }
(0091)
(0092) /*******************************************************/
(0093) /****** 函数名称: Key_Num() ******/
(0094) /****** 功 能: 转换键值为0-f十六进制数 ******/
(0095) /****** 参 数: key--键值 ******/
(0096) /****** 返回值 : 0-f ******/
(0097) /*******************************************************/
(0098) unsigned char Key_Num(unsigned char key)
(0099) {
(0100) switch(key)
00B1 2F40 MOV R20,R16
00B2 2755 CLR R21
00B3 3B47 CPI R20,0xB7
00B4 E0E0 LDI R30,0
00B5 075E CPC R21,R30
00B6 F409 BNE 0x00B8
00B7 C054 RJMP 0x010C
00B8 3B4B CPI R20,0xBB
00B9 E0E0 LDI R30,0
00BA 075E CPC R21,R30
00BB F409 BNE 0x00BD
00BC C057 RJMP 0x0114
00BD 3B4D CPI R20,0xBD
00BE E0E0 LDI R30,0
00BF 075E CPC R21,R30
00C0 F409 BNE 0x00C2
00C1 C05A RJMP 0x011C
00C2 3B4E CPI R20,0xBE
00C3 E0E0 LDI R30,0
00C4 075E CPC R21,R30
00C5 F409 BNE 0x00C7
00C6 C05D RJMP 0x0124
00C7 EB8E LDI R24,0xBE
00C8 E090 LDI R25,0
00C9 1784 CP R24,R20
00CA 0795 CPC R25,R21
00CB F0AC BLT 0x00E1
00CC 3747 CPI R20,0x77
00CD E0E0 LDI R30,0
00CE 075E CPC R21,R30
00CF F409 BNE 0x00D1
00D0 C03D RJMP 0x010E
00D1 374B CPI R20,0x7B
00D2 E0E0 LDI R30,0
00D3 075E CPC R21,R30
00D4 F409 BNE 0x00D6
00D5 C040 RJMP 0x0116
00D6 374D CPI R20,0x7D
00D7 E0E0 LDI R30,0
00D8 075E CPC R21,R30
00D9 F409 BNE 0x00DB
00DA C043 RJMP 0x011E
00DB 374E CPI R20,0x7E
00DC E0E0 LDI R30,0
00DD 075E CPC R21,R30
00DE F409 BNE 0x00E0
00DF C046 RJMP 0x0126
00E0 C047 RJMP 0x0128
00E1 3D47 CPI R20,0xD7
00E2 E0E0 LDI R30,0
00E3 075E CPC R21,R30
00E4 F129 BEQ 0x010A
00E5 3D4B CPI R20,0xDB
00E6 E0E0 LDI R30,0
00E7 075E CPC R21,R30
00E8 F149 BEQ 0x0112
00E9 3D4D CPI R20,0xDD
00EA E0E0 LDI R30,0
00EB 075E CPC R21,R30
00EC F169 BEQ 0x011A
00ED 3D4E CPI R20,0xDE
00EE E0E0 LDI R30,0
00EF 075E CPC R21,R30
00F0 F409 BNE 0x00F2
00F1 C030 RJMP 0x0122
00F2 3D47 CPI R20,0xD7
00F3 E0E0 LDI R30,0
00F4 075E CPC R21,R30
00F5 F40C BGE 0x00F7
00F6 C031 RJMP 0x0128
00F7 3E47 CPI R20,0xE7
00F8 E0E0 LDI R30,0
00F9 075E CPC R21,R30
00FA F069 BEQ 0x0108
00FB 3E4B CPI R20,0xEB
00FC E0E0 LDI R30,0
00FD 075E CPC R21,R30
00FE F089 BEQ 0x0110
00FF 3E4D CPI R20,0xED
0100 E0E0 LDI R30,0
0101 075E CPC R21,R30
0102 F0A9 BEQ 0x0118
0103 3E4E CPI R20,0xEE
0104 E0E0 LDI R30,0
0105 075E CPC R21,R30
0106 F0C9 BEQ 0x0120
0107 C020 RJMP 0x0128
(0101) {
(0102) case 0xe7:return 0; //按键0
0108 2700 CLR R16
0109 C01F RJMP 0x0129
(0103) case 0xd7:return 1; //按键1
010A E001 LDI R16,1
010B C01D RJMP 0x0129
(0104) case 0xb7:return 2; //按键2
010C E002 LDI R16,2
010D C01B RJMP 0x0129
(0105) case 0x77:return 3; //按键3
010E E003 LDI R16,3
010F C019 RJMP 0x0129
(0106) case 0xeb:return 4; //按键4
0110 E004 LDI R16,4
0111 C017 RJMP 0x0129
(0107) case 0xdb:return 5; //按键5
0112 E005 LDI R16,5
0113 C015 RJMP 0x0129
(0108) case 0xbb:return 6; //按键6
0114 E006 LDI R16,6
0115 C013 RJMP 0x0129
(0109) case 0x7b:return 7; //按键7
0116 E007 LDI R16,7
0117 C011 RJMP 0x0129
(0110) case 0xed:return 8; //按键8
0118 E008 LDI R16,0x8
0119 C00F RJMP 0x0129
(0111) case 0xdd:return 9; //按键9
011A E009 LDI R16,0x9
011B C00D RJMP 0x0129
(0112) case 0xbd:return 10; //按键A
011C E00A LDI R16,0xA
011D C00B RJMP 0x0129
(0113) case 0x7d:return 11; //按键B
011E E00B LDI R16,0xB
011F C009 RJMP 0x0129
(0114) case 0xee:return 12; //按键C
0120 E00C LDI R16,0xC
0121 C007 RJMP 0x0129
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -