📄 main_c.c
字号:
//创建时期:
//----------------------------------------------------------------------
void disp() //Led display
{
char led_data_temp;
led_data_temp=real_temp;
if(!CHONLANG_FG)
led_data_temp=t3;
if(TIME_DISP_FG)
led_data_temp=t3;
if(TEMP_DISP_FG)
led_data_temp=tem_data1;
led_data=led_data_temp;
led_pub_sel++;
if(led_pub_sel>=3)
led_pub_sel=0;
switch(led_pub_sel)
{
case 0 : led_gw_cl(); break;
case 1 : led_sw_cl(); break;
case 2 : led_led(); break;
default: return;
}
}
//----------------------------------------------------------------------
//函数功能:蜂鸣器驱动
//输入参数:beep_fg,beep_delay
//返回参数:beep_fg,beep_delay,beep
//创建时期:
//----------------------------------------------------------------------
void beep_cl() //蜂鸣器驱动
{
//static volatile unsigned char beep_delay;
if(beep_fg)
{ beep=1;
beep_delay++;
if(beep_delay>=50)
{ beep_fg=0;
beep=0;
beep_delay=0;
}
}
}
//----------------------------------------------------------------------
//函数功能:功能处理
//输入参数:
//返回参数:
//创建时期:
//----------------------------------------------------------------------
void function1() //function1
{
if(!JIRE_FG_0) //
{
if(tem_data1<real_temp)
{
CHAOWEN_FG=1;
CHAOWEN_FG_LED=1;
GN1_OUT=0;
}
else
if(tem_data1==real_temp)
{
CHAOWEN_FG=1;
CHAOWEN_FG_LED=0;
GN1_OUT=0;
}
else
// if(tem_data1>real_temp)
{
CHAOWEN_FG_LED=0;
if(real_temp<=(tem_data1-2))
CHAOWEN_FG=0;
if(!power_fg|CHAOWEN_FG)
GN1_OUT=0;
else
if(JIRE_FG)
GN1_OUT=1;
}
}
else //为保证在第一次按下温度加或减键不会马上加热,要等到数码管闪烁完后再开始加热
GN1_OUT=0;
//
if(CHONLANG_FG)
GN2_OUT=1;
else
GN2_OUT=0;
if(ZHENDON_FG)
GN3_OUT=1;
else
GN3_OUT=0;
if(QP_FG)
GN4_OUT=1;
else
GN4_OUT=0;
if(CY_FG)
GN5_OUT=1;
else
GN5_OUT=0;
}
//**************************************************************************************************************************
//----------------------------------------------------------------------
//函数功能:测温电容放电处理
//输入参数:RA1
//返回参数:RA1
//创建时期:
//----------------------------------------------------------------------
void dschrg()
{
PORTA=0x07;
TRISA=0x07;
asm("nop");
do
{
asm("clrwdt");
}while(RA1);
}
//----------------------------------------------------------------------
//函数功能:测量校准电阻(10K)充电时间Tc
//输入参数:RA3
//返回参数:temp_tc
//创建时期:
//----------------------------------------------------------------------
void m_teime_tc()
{
temp_tc=0; //测量校准电阻(10K)充电时间Tc
PORTA=0x07;
TRISA=0x0d;
while(!RA3)
{
temp_tc++;
}
}
//----------------------------------------------------------------------
//函数功能:测量校准电阻(10K)充电时间Tm
//输入参数:RA3
//返回参数:temp_tm
//创建时期:
//----------------------------------------------------------------------
void m_teime_tm()
{
temp_tm=0; //测量校准电阻(10K)充电时间Tm
PORTA=0x07;
TRISA=0x0b;
while(!RA3)
{
temp_tm++;
}
}
//----------------------------------------------------------------------
//函数功能:16位乘法处理
//输入参数:(_real_rm+3,_real_rm+2,_real_rm+1,_real_rm)=(_temp_tm+1,_temp_tm)*(_RC_XX+1,_RC_XX)
//返回参数:
//创建时期:
//----------------------------------------------------------------------
void mpy_()
{
// RC_XX=10000;
#asm
bcf 0x4,5
bcf 0x4,6
movlw 0x10
movwf _TEMP // H L H L H L H L
mpy_0 //(_real_rm+3,_real_rm+2,_real_rm+1,_real_rm)=(_temp_tm+1,_temp_tm)*(_RC_XX+1,_RC_XX)
rrf _temp_tc+1; //H
rrf _temp_tc; //L
btfss 0x03,0
goto mpy_1;
//
movf _temp_tm,w
addwf _real_rm+2
btfsc 0x03,0
incf _real_rm+3
movf _temp_tm+1,w
addwf _real_rm+3
//
mpy_1
rrf _real_rm+3
rrf _real_rm+2
rrf _real_rm+1
rrf _real_rm
decfsz _TEMP
goto mpy_0
nop
#endasm
//--------------------------------------------
}
//----------------------------------------------------------------------
//函数功能:除法处理
//输入参数:real_temp0000=(_real_rm+3,_real_rm+2,_real_rm+1,_real_rm)/temp_tc+(_real_rm+1,_real_rm)
//返回参数:
//创建时期:
//----------------------------------------------------------------------
void div_()
{
#asm
bcf 0x4,5
bcf 0x4,6
div_
//real_temp0000=(_real_rm+3,_real_rm+2,_real_rm+1,_real_rm)/temp_tc+(_real_rm+1,_real_rm)
movlw 0x20
movwf _TEMP
clrf _div_xx
clrf _div_xx+1
clrf _div_yy
clrf _div_yy+1
dloop
bcf 0x03,0
rlf _real_rm
rlf _real_rm+1
rlf _real_rm+2
rlf _real_rm+3
rlf _div_xx
rlf _div_xx+1
movf _temp_tc+1,w
subwf _div_xx+1,w
btfss 0x03,2
goto nochk
movf _temp_tc,w
subwf _div_xx,w
nochk
btfss 0x03,0
goto nogo
movf _temp_tc,w
subwf _div_xx
btfss 0x03,0
decf _div_xx+1
movf _temp_tc+1,w
subwf _div_xx+1
bsf 0x03,0
nogo
rlf _div_yy
rlf _div_yy+1
decfsz _TEMP
goto dloop
nop
#endasm
}
//----------------------------------------------------------------------
//函数功能:温度测量,Rm=(Tm*REAL_Rc)/Tc
//输入参数:
//返回参数:
//创建时期:
//----------------------------------------------------------------------
//----------------------------------------------------
void Temp_Measure()
{
dschrg();
if(led_pub_sel&0x01)
{
m_teime_tc();
temp_tc_bank2=temp_tc;
}
else
{ m_teime_tm();
real_rm=0;
temp_tc=10000;
mpy_();//real_rm=temp_tm*temp_tc
temp_tc=temp_tc_bank2;
div_();//div_yy=real_rm/temp_tc
i=0;
while(div_yy<temp_table[i])//查表得出温度值
{
i++;
if(i>=60)
break;
}
}
if(i!=real_temp_old)
{ count++;
if(count>=10)
{ real_temp_old=real_temp=i;
count=0;
}
}
else
count=0;
}
//----------------------------------------------------------------------
//函数功能:定时处理
//输入参数:
//返回参数:
//创建时期:
//----------------------------------------------------------------------
void time() //定时
{
//
if(power_fg)
{
asm("clrwdt");
if(!CHAOWEN_FG_LED&!FALSH_FG_0)
FALSH_FG=1;
else
{
SEC_0++;
if(SEC_0<125)
;
else
{
GN_flag^=0x02;
SEC_0=0;
SEC_1++;
if(SEC_1>=6)
{
SEC_1=0;
FALSH_FG_0=0;
JIRE_FG_0=0;
TIME_DISP_FG=0;
TEMP_DISP_FG=0;
}
}
}
}
//
t1++;
if(t1>=250) //4ms*250=1S
{t2++;t1=0;}
if(t2>=60)
{t3--;t2=0;}
if(t3==0)
{ power_fg=0; beep_fg=1; }
//
while(TMR0<250)
{
asm("clrwdt");
}
OPTION=0x03;
TMR0=0;
}
//----------------------------------------------------------------------
//函数功能:关处理
//输入参数:
//返回参数:
//创建时期:
//----------------------------------------------------------------------
off_fun()
{
GN_flag=0;
flag0&=6; //关机时按键标志不能清零。
flag3=0;
FALSH_FG_0=0;
FALSH_FG=1;
TIME_DISP_FG=0;
TEMP_DISP_FG=0;
// t1=0;t2=0;
// t3=TIME_DEFINE;
}
//#######################################################
main()
{
while(1)
{
init();
beep_fg=1;
while(1)
{
asm("clrwdt");
KeyScan();
disp(); //
beep_cl(); //
function1();
Temp_Measure();
time(); //
if(!power_fg)
off_fun();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -