📄 1820.lst
字号:
(0115) case 0xde:return 13; //按键D
0122 E00D LDI R16,0xD
0123 C005 RJMP 0x0129
(0116) case 0xbe:return 14; //按键E
0124 E00E LDI R16,0xE
0125 C003 RJMP 0x0129
(0117) case 0x7e:return 15; //按键F
0126 E00F LDI R16,0xF
0127 C001 RJMP 0x0129
(0118) default: return 16; //无按键按下
0128 E100 LDI R16,0x10
0129 940E0457 CALL pop_gset1
012B 9508 RET
_Display_One_SMG:
data --> R22
bit --> R20
012C 940E0452 CALL push_gset2
012E 2F62 MOV R22,R18
012F 2F40 MOV R20,R16
(0119) }
(0120) }
(0121) /*******************************************************/
(0122) /****** 函数名称: Display_One_SMG() ******/
(0123) /****** 功 能: 显示指定内容在指定位 ******/
(0124) /****** 参 数: bit--位(1-8), ******/
(0125) /****** data--显示内容(0-15,16为全灭)****/
(0126) /****** 返回值 : 无 ******/
(0127) /*******************************************************/
(0128) void Display_One_SMG(unsigned char bit,unsigned char data)
(0129) {
(0130) SMG=SMG_Conver[data]; //送显示数据
0130 E584 LDI R24,0x54
0131 E090 LDI R25,0
0132 2FE6 MOV R30,R22
0133 27FF CLR R31
0134 0FE8 ADD R30,R24
0135 1FF9 ADC R31,R25
0136 91E4 LPM R30,0(Z)
0137 BBE8 OUT 0x18,R30
(0131) Open_SMG_DATA; //锁存数据
0138 9ADB SBI 0x1B,3
(0132) Close_SMG_DATA;
0139 98DB CBI 0x1B,3
(0133) SMG=~BIT(bit); //送位数据
013A E001 LDI R16,1
013B 2F14 MOV R17,R20
013C 940E0488 CALL lsl8
013E 2E20 MOV R2,R16
013F 9420 COM R2
0140 BA28 OUT 0x18,R2
(0134) Open_SMG_BIT; //锁存数据
0141 9ADA SBI 0x1B,2
(0135) Close_SMG_BIT;
0142 98DA CBI 0x1B,2
(0136) delay_nms(2);
0143 E002 LDI R16,2
0144 E010 LDI R17,0
0145 DF2C RCALL _delay_nms
0146 940E0446 CALL pop_gset2
0148 9508 RET
_Display_One_SMG_Point:
bit --> R20
0149 940E0454 CALL push_gset1
014B 2F40 MOV R20,R16
(0137) }
(0138) /*******************************************************/
(0139) /****** 函数名称: Display_One_SMG_Point() ******/
(0140) /****** 功 能: 显示小数点在指定位 ******/
(0141) /****** 返回值 : 无 ******/
(0142) /*******************************************************/
(0143) void Display_One_SMG_Point(unsigned char bit)
(0144) {
(0145) SMG=0x80; //送显示数据
014C E880 LDI R24,0x80
014D BB88 OUT 0x18,R24
(0146) Open_SMG_DATA; //锁存数据
014E 9ADB SBI 0x1B,3
(0147) Close_SMG_DATA;
014F 98DB CBI 0x1B,3
(0148) SMG=~BIT(bit); //送位数据
0150 E001 LDI R16,1
0151 2F14 MOV R17,R20
0152 940E0488 CALL lsl8
0154 2E20 MOV R2,R16
0155 9420 COM R2
0156 BA28 OUT 0x18,R2
(0149) Open_SMG_BIT; //锁存数据
0157 9ADA SBI 0x1B,2
(0150) Close_SMG_BIT;
0158 98DA CBI 0x1B,2
(0151) delay_nms(2);
0159 E002 LDI R16,2
015A E010 LDI R17,0
015B DF16 RCALL _delay_nms
015C 940E0457 CALL pop_gset1
015E 9508 RET
(0152) }
(0153) /*******************************************************/
(0154) /****** 函数名称: En_Led() ******/
(0155) /****** 功 能: 使能LED功能 ******/
(0156) /****** 参 数: 无 ******/
(0157) /****** 返回值 : 无 ******/
(0158) /*******************************************************/
(0159) void En_Led(void)
(0160) {
(0161) DDRB=0xff; //设置输出
_En_Led:
015F EF8F LDI R24,0xFF
0160 BB87 OUT 0x17,R24
(0162) PORTB=0xff; //输出高电平
0161 BB88 OUT 0x18,R24
(0163) Open_LED; //打开LED功能
0162 9ADC SBI 0x1B,4
0163 9508 RET
(0164) }
(0165) /*******************************************************/
(0166) /****** 函数名称: Un_Led() ******/
(0167) /****** 功 能: 关闭LED功能 ******/
(0168) /****** 参 数: 无 ******/
(0169) /****** 返回值 : 无 ******/
(0170) /*******************************************************/
(0171) void Un_Led(void)
(0172) {
(0173) DDRB=0xff; //设置输出
_Un_Led:
0164 EF8F LDI R24,0xFF
0165 BB87 OUT 0x17,R24
(0174) PORTB=0xff; //输出高电平
0166 BB88 OUT 0x18,R24
(0175) Open_LED; //打开LED功能
0167 9ADC SBI 0x1B,4
(0176) Close_LED; //关闭LED功能
0168 98DC CBI 0x1B,4
0169 9508 RET
(0177) }
(0178) /*******************************************************/
(0179) /****** 函数名称: Clear_SMG() ******/
(0180) /****** 功 能: 关闭数码管功能 ******/
(0181) /****** 参 数: 无 ******/
(0182) /****** 返回值 : 无 ******/
(0183) /*******************************************************/
(0184) void Clear_SMG(void)
(0185) {
(0186) DDRB=0xff; //设置输出
_Clear_SMG:
016A EF8F LDI R24,0xFF
016B BB87 OUT 0x17,R24
(0187) PORTB=0x00; //输出高电平
016C 2422 CLR R2
016D BA28 OUT 0x18,R2
(0188) Open_SMG_DATA; //锁存数据
016E 9ADB SBI 0x1B,3
(0189) Close_SMG_DATA;
016F 98DB CBI 0x1B,3
(0190) Open_SMG_BIT;
0170 9ADA SBI 0x1B,2
(0191) Close_SMG_BIT;
0171 98DA CBI 0x1B,2
0172 9508 RET
(0192) }
(0193) /*******************************************************/
(0194) /****** 函数名称: Spi_Init() ******/
(0195) /****** 功 能: 初始化SPI接口 ******/
(0196) /****** 参 数: 无 ******/
(0197) /****** 返回值 : 无 ******/
(0198) /*******************************************************/
(0199) void Spi_Init(void)
(0200) {
(0201) unsigned char i;
(0202) DDRB|=0xb0; //MISO输入MOSI,SCK,SS输出
_Spi_Init:
i --> R16
0173 B387 IN R24,0x17
0174 6B80 ORI R24,0xB0
0175 BB87 OUT 0x17,R24
(0203) DDRB&=~0x40;
0176 98BE CBI 0x17,6
(0204) PORTB|=0x40; //MISO上拉有效
0177 9AC6 SBI 0x18,6
(0205) SPSR=0x01; //SPI允许,主机模式,高位在先,极性00,1/2系统时钟速率
0178 E081 LDI R24,1
0179 B98E OUT 0x0E,R24
(0206) SPCR=0x50;
017A E580 LDI R24,0x50
017B B98D OUT 0x0D,R24
(0207) i=SPSR;
017C B10E IN R16,0x0E
(0208) i=SPDR; //清空SPI,和中断标志,使SPI空闲
017D B10F IN R16,0x0F
017E 9508 RET
(0209) }
(0210) /*******************************************************/
(0211) /****** 函数名称: PutSPIchar() ******/
(0212) /****** 功 能: 用SPI发送数据 ******/
(0213) /****** 参 数: data--待发的数据 ******/
(0214) /****** 返回值 : 无 ******/
(0215) /*******************************************************/
(0216) void PutSPIchar(char data)
(0217) {
(0218) SPDR=data;
_PutSPIchar:
data --> R16
017F B90F OUT 0x0F,R16
(0219) while(!(SPSR&(1<<SPIF))); //等待发送完毕
0180 9B77 SBIS 0x0E,7
0181 CFFE RJMP 0x0180
0182 9508 RET
(0220) }
(0221) /*******************************************************/
(0222) /****** 函数名称: CPU_Init() ******/
(0223) /****** 功 能: 初始化CPU端口 ******/
(0224) /****** 参 数: 无 ******/
(0225) /****** 返回值 : 无 ******/
(0226) /*******************************************************/
(0227) void CPU_Init(void)
(0228) {
(0229) PORTB=0xff;
_CPU_Init:
0183 EF8F LDI R24,0xFF
0184 BB88 OUT 0x18,R24
(0230) DDRB=0xff;
0185 BB87 OUT 0x17,R24
(0231) PORTA=0x80;
0186 E880 LDI R24,0x80
0187 BB8B OUT 0x1B,R24
(0232) DDRA=0xdc;
0188 ED8C LDI R24,0xDC
0189 BB8A OUT 0x1A,R24
(0233) DDRB=0x00;
018A 2422 CLR R2
018B BA27 OUT 0x17,R2
(0234) PORTC=0xff;
018C EF8F LDI R24,0xFF
018D BB85 OUT 0x15,R24
(0235) DDRC=0x00;
018E BA24 OUT 0x14,R2
(0236) PORTD=0xff;
018F BB82 OUT 0x12,R24
(0237) DDRD=0x00;
0190 BA21 OUT 0x11,R2
(0238) Un_Led();
0191 DFD2 RCALL _Un_Led
(0239) Clear_SMG();
0192 DFD7 RCALL _Clear_SMG
0193 9508 RET
_LCD_send_data:
i --> R20
data --> R16
0194 940E0454 CALL push_gset1
FILE: H:\bbi项目源程序\18b20温度传感器\LCD显示18B20\lcd.h
(0001) #define uchar unsigned char
(0002) #define uint unsigned int
(0003) /*******************************************************/
(0004) /****** 函数名称: send_data () ******/
(0005) /****** 功 能: 写入字节数据 ******/
(0006) /****** ******/
(0007) /****** 参 数: uchar data ******/
(0008) /****** 返回值 : 无 ******/
(0009) /*******************************************************/
(0010) void LCD_send_data(uchar data)
(0011) {
(0012) unsigned char i;
(0013) for(i=0;i<8;i++) //循环8次
0196 2744 CLR R20
0197 C009 RJMP 0x01A1
(0014) {
(0015) PORTA&=~0x08; //置低CLK
0198 98DB CBI 0x1B,3
(0016) if(data&0x80) //判断数据极性
0199 FF07 SBRS R16,7
019A C002 RJMP 0x019D
(0017) PORTA|=0X04; //如果数据为1置高
019B 9ADA SBI 0x1B,2
019C C001 RJMP 0x019E
(0018) else
(0019) PORTA&=~0X04; //否则置低
019D 98DA CBI 0x1B,2
(0020) data<<=1; //右移一位
019E 0F00 LSL R16
(0021) PORTA|=0X08; //置高CLK
019F 9ADB SBI 0x1B,3
01A0 9543 INC R20
01A1 3048 CPI R20,0x8
01A2 F3A8 BCS 0x0198
01A3 940E0457 CALL pop_gset1
01A5 9508 RET
_delay:
i --> R20
n --> R16
01A6 940E0454 CALL push_gset1
(0022) //delay_nus(1);
(0023) //PORTA&=~0X08; //置低
(0024) }
(0025) }
(0026) /*******************************************************/
(0027) /****** 函数名称: wr_command(char) ******/
(0028) /****** 功 能: 向LCD写入控制字 ******/
(0029) /****** ******/
(0030) /****** 参 数: com ******/
(0031) unsigned char ADtmp,ADbz=0;
(0032) #define LCD_DATAL PORTA&=~BIT(2)
(0033) #define LCD_DATAH PORTA|=BIT(2)
(0034) #define LCD_CLKL PORTA&=~BIT(3)
(0035) #define LCD_CLKH PORTA|=BIT(3)
(0036) #define JP_CHK PINA&BIT(4)
(0037) #define JP_CHK2 PINA&BIT(1)
(0038) void delay(unsigned char n)
(0039) {
(0040) unsigned char i;
(0041) for(i=0;i<n;i++) //延时
01A8 2744 CLR R20
01A9 C002 RJMP 0x01AC
(0042) {asm("nop");}
01AA 0000 NOP
01AB 9543 INC R20
01AC 1740 CP R20,R16
01AD F3E0 BCS 0x01AA
01AE 940E0457 CALL pop_gset1
01B0 9508 RET
_lcd_out:
s --> Y+1
i --> R20
send_byte --> R22
01B1 940E0452 CALL push_gset2
01B3 2F60 MOV R22,R16
(0043) }
(0044) //*************************************************************************
(0045)
(0046) //***************************************************************************
(0047) void lcd_out(unsigned char send_byte)
(0048) {
(0049) unsigned char i,s;
(0050) for (i=0;i<8;i++)
01B4 2744 CLR R20
01B5 C009 RJMP 0x01BF
(0051) {
(0052) if((send_byte&0x80)==0)
01B6 FD67 SBRC R22,7
01B7 C002 RJMP 0x01BA
(0053) {
(0054) LCD_DATAL;
01B8 98DA CBI 0x1B,2
(0055) }
01B9 C001 RJMP 0x01BB
(0056) else
(0057) {
(0058) LCD_DATAH;
01BA 9ADA SBI 0x1B,2
(0059) } //送数据
(0060) LCD_CLKL;
01BB 98DB CBI 0x1B,3
(0061) LCD_CLKH;
01BC 9ADB SBI 0x1B,3
(0062) send_byte=send_byte<<1;
01BD 0F66 LSL R22
01BE 9543 INC R20
01BF 3048 CPI R20,0x8
01C0 F3A8 BCS 0x01B6
(0063) }
(0064) delay(256);
01C1 E000 LDI R16,0
01C2 DFE3 RCALL _delay
01C3 940E0446 CALL pop_gset2
01C5 9508 RET
_WR_dat:
s --> R20
dat --> R22
01C6 940E0452 CALL push_gset2
01C8 2F60 MOV R22,R16
(0065) }
(0066) //***************************************************************************
(0067)
(0068) void WR_dat(unsigned char dat)
(0069) {
(0070) unsigned char s;
(0071) s=dat&0xf0;
01C9 2F46 MOV R20,R22
01CA 7F40 ANDI R20,0xF0
(0072) lcd_out(0xfa);
01CB EF0A LDI R16,0xFA
01CC DFE4 RCALL _lcd_out
(0073) lcd_out(s);
01CD 2F04 MOV R16,R20
01CE DFE2 RCALL _lcd_out
(0074) s=dat&0x0f;
01CF 2F46 MOV R20,R22
01D0 704F ANDI R20,0xF
(0075) s<<=4;
01D1 2F84 MOV R24,R20
01D2 708F ANDI R24,0xF
01D3 9582 SWAP R24
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -