📄 rc.c
字号:
{
/*Rm_t-=temp_table[RC_num+1];
Rc_t=temp_table[RC_num]-temp_table[RC_num+1];
Rm_t*=10;
Rm_t=Rm_t/Rc_t;
// RC_num++;*/
break;
}
RC_num++;
}while(RC_num<48);
tamp=Bin1toBcd(RC_num);
//Rc_t<<=4;
//Rm_t|=Rc_t;
P6CR&=0xfC;
PORT6&=0xfC;
return tamp;
}
void display(uchar temp_v,uchar tamp_v,uchar set_tmp)
{
uchar real_dep,tmp1;
LCD_ADDR=6;
LCD_DB=0x08;
//风速+冷热
LCD_ADDR=0;
LCD_DB=tamp_v;
LCD_ADDR=23;
_asm
{
swap %tamp_v
}
LCD_DB=tamp_v;
//当时温度
real_dep=temp_v;
temp_v>>=4;
real_dep&=0x0f;
LCD_ADDR=4;
tmp1=lcd_ram[real_dep];
tmp1&=0xf7;
LCD_DB=tmp1;
LCD_ADDR=3;
_asm
{
swap %tmp1
}
LCD_DB=tmp1;
tmp1=temp_v&0x0f;
LCD_ADDR=2;
tmp1=lcd_ram[tmp1];
LCD_DB=tmp1;
LCD_ADDR=1;
_asm
{
swap %tmp1
}
LCD_DB=tmp1;
//设置温度
real_dep=set_tmp;
set_tmp>>=4;
real_dep&=0x0f;
LCD_ADDR=10;
tmp1=lcd_ram[real_dep];
LCD_DB=tmp1;
LCD_ADDR=9;
_asm
{
swap %tmp1
}
LCD_DB=tmp1;
tmp1=set_tmp&0x0f;
LCD_ADDR=8;
tmp1=lcd_ram[tmp1];
LCD_DB=tmp1;
LCD_ADDR=7;
_asm
{
swap %tmp1
}
LCD_DB=tmp1;
//实时时间(时)
real_dep=s[0];
s[0]>>=4;
real_dep&=0x0f;
LCD_ADDR=14;
tmp1=lcd_ram[real_dep];
if(timer_1s_ok)
{
tmp1|=0x08;
timer_1s_ok=0;
}
LCD_DB=tmp1;
LCD_ADDR=13;
_asm
{
swap %tmp1
}
LCD_DB=tmp1;
tmp1=s[0]&0x0f;
LCD_ADDR=12;
tmp1=lcd_ram[tmp1];
LCD_DB=tmp1;
LCD_ADDR=11;
_asm
{
swap %tmp1
}
LCD_DB=tmp1;
//实时时间(分)
real_dep=s[2];
s[2]>>=4;
real_dep&=0x0f;
LCD_ADDR=18;
tmp1=lcd_ram[real_dep];
tmp1|=0x08;
LCD_DB=tmp1;
LCD_ADDR=17;
_asm
{
swap %tmp1
}
LCD_DB=tmp1;
tmp1=s[2]&0x0f;
LCD_ADDR=16;
tmp1=lcd_ram[tmp1];
LCD_DB=tmp1;
LCD_ADDR=15;
_asm
{
swap %tmp1
}
LCD_DB=tmp1;
//实时时间(星期)
real_dep=s[1];
real_dep&=0x0f;
LCD_ADDR=20;
tmp1=lcd_ram[real_dep];
LCD_DB=tmp1;
LCD_ADDR=19;
_asm
{
swap %tmp1
}
LCD_DB=tmp1;
}
/*void lcd_on_off(void)
{
uchar i;
for(i=0;i<32;i++)
{
LCD_ADDR=i;
LCD_DB=0xff;
}
for(dly=0x00ff;dly;dly--)
{
WDTC();
}
for(i=32;i;i--)
{
LCD_ADDR=i;
LCD_DB=0;
}
for(dly=0x1fff;dly;dly--)
{
WDTC();
}
}*/
/******************************按键扫描************************/
/*****************************按键处理************************/
void KeyDo(uchar key)
{
uchar fan_temp;
if (key == ON_OFF){
if(mode_on_off==0)
{
key_flag=1;
mode_on_off=1;
}
else
{
mode_on_off=0;
}
}
else if (key == FAN)
{
timer1=0;
key_flag=1;
if(mode_on_off==1)
{
fan_temp=fan_st&0xe0;
if(fan_temp==0x80)
{
fan_st|=0x40;
fan_st&=0x7f;
}
else if(fan_temp==0x40)
{
fan_st|=0x20;
fan_st&=0xbf;
}
else if(fan_temp==0x20)
{
fan_st|=0x80;
fan_st&=0xdf;
}
}
}
else if (key == MODE)
{
timer1=0;
key_flag=1;
if(mode_on_off==1)
{
fan_temp=fan_st&0x03;
if(fan_temp==0x01)
fan_st++;
else
{
fan_st|=0x01;
fan_st&=0xfd;
}
}
}
else if (key == DECREASE)
{
timer1=0;
key_flag=1;
if (set_temper == 10)
{
set_temper = 10;
}
else
{
set_temper--;
}
}
else if (key == INCREASE)
{ timer1=0;
key_flag=1;
set_temper++;
if (set_temper > 30)
{
set_temper = 30;
}
}
}
uchar KeyScan(void)
{
uchar temp = 0;
temp = PORT8;
temp&=0x1f;
if(temp!=0x1f)
return temp;
return 0x1f;
}
void _intcall counter1_l(void) @ 0x0C:low_int 3
{
}
void _intcall counter1(void) @ int 3
{
//backup R4
_asm
{
SWAPA 0x04
MOV 0x1F,A
}
//backup C system
_asm
{
BS 0X4,6
BS 0X4,7
MOV A,0X10 // USE 1 BYTE C TYPE,C SYSTEM BACKUP
MOV 0X3C+1,A
MOV A,0X14
MOV 0X3B+1,A
MOV A,0X18
MOV 0X3A+1,A
MOV A,0X1B
MOV 0X39+1,A
MOV A,0X1C
MOV 0X38+1,A
}
ISR=0;
timer_2ms_ok=1;
if (key_state == 0)
{
new_key = KeyScan();
if (new_key != 0x1f)
{
key_state++;
}
}
else if (key_state < 5)
{
if (KeyScan() == new_key)
{
key_state++;
}
else
{
key_state = 0;
}
}
else if (key_state == 5)
{
key_state++;
KeyDo(new_key);
}
else if (key_state == 6)
{
key_temp = KeyScan();
if (key_temp == 0x1f)
{
key_state ++;
}
else if (key_temp == DECREASE || key_temp == INCREASE)
{
if (key_tcc >= 10)
{
key_tcc = 5;
KeyDo(key_temp);
}
else
{
key_tcc++;
}
}
}
else if (key_state < 10)
{
if (KeyScan() == 0x1f)
{
key_state ++;
}
else
{
key_state = 6;
}
}
else if (key_state == 10)
{
key_state = 0;
key_tcc = 0;
}
if(mode_on_off)
{
times++;
timer1++;
if(++timer2>=100)
{
timer_1s_ok=1;
timer2=0;
}
}
// Write your code (inline assembly or C) here
//restore C system
_asm
{
BS 0X4,6
BS 0X4,7
MOV A,0X3C+1 // USE 1 BYTE C TYPE,C SYSTEM RESTORE
MOV 0X10,A
MOV A,0X3B+1
MOV 0X14,A
MOV A,0X3A+1
MOV 0X18,A
MOV A,0X39+1
MOV 0X1B,A
MOV A,0X38+1
MOV 0X1C,A
}
//restore R4
_asm
{
SWAPA 0x1F
MOV 0X04,A
}
}
void main()
{
uchar temp1,temp2;
uchar i,j;
uchar *r;
uchar b;
uchar c;
uchar stst;
uchar *w;
uchar x;
uchar y;
DISI();
tms(10);
sys_init();
//lcd_init(0xf7);
r_buf[0]=0;
r_buf[1]=0;
r=r_buf; //读参数
b=0x00;
c=2;
w=w_buf; //写参数
x=0x00;
y=2;
//w_buf[0]=0x81;
//w_buf[1]=0x19;
// wt24c(w,x,y); //出厂写EEPROM
rd24c(r,b,c); //初始读EEPROM
fan_st=r_buf[0];
set_temper=r_buf[1];
init_1302();
temp1=test_temperature();
for(i=0;i<32;i++)// 清屏
{
LCD_ADDR=i;
LCD_DB=0;
}
for(dly=0x1fff;dly;dly--)
{
WDTC();
}
//LED=1;
ENI();
init_time();//出厂写实时时间
while(1)
{
//key_find();
while(timer_2ms_ok)
{
timer_2ms_ok=0;
if(mode_on_off==1)
{
lcd_init(0xf7);
for(i=0;i<4;i+=2)
{
s[i]=read_data(0x85-i);
}
s[1]=read_data(0x8b);
if(key_flag)
{
LED=1;
if(timer1>=200)
{
timer1=0;
LED=0;
if((r_buf[0]!=fan_st)||(r_buf[1]!=set_temper))
{
r_buf[0]=fan_st;
r_buf[1]=set_temper;
w_buf[0]=fan_st;
w_buf[1]=set_temper;
wt24c(w,x,y); //写
}
key_flag=0;
}
}
if(times>=250)
{
temp1=test_temperature();
times=0;
}
temp2=Bin1toBcd(set_temper);
display(temp1,fan_st,temp2);
PORT6=fan_st&0xe0;
stst=fan_st&0x01;
if(stst==0x01)
{
COOL=1;
HOT=0;
tms(1);
if((temp1>temp2)&&(COL_RST_FLAG==0))
{
j=0;
while((COOL_IF_L)&&(j<=3))
{
j++;
COL_RST=1;
tms(10);
COL_RST=0;
COL_RST_FLAG=1;
}
j=0;
}
else if((temp1<temp2)&&(COL_RST_FLAG==1))
{
j=0;
while((COOL_IF_H)&&(j<=3))
{
j++;
COL_RST=1;
tms(10);
COL_RST=0;
COL_RST_FLAG=0;
}
j=0;
}
}
//stst=fan_st&0x02;
else
{
COOL=0;
if((temp1<temp2)&&(HEAT_IF_H))
HOT=1;
else
HOT=0;
}
}
else
{
LED=0;
lcd_init(0x00);
LOW=0;
MID=0;
HI=0;
COOL=0;
HOT=0;
}
WDTC();
}
WDTC();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -