📄 main.c
字号:
////////////////////////////////////*/
/* */
/* Hot_Box */
/* Version_2 */
/* AHTL_2007_11 */
/* */
/* */
/* MAIN.C */
/* */
////////////////////////////////////*/
#include <reg52.h>
#include <absacc.h>
#include <intrins.h>
#include "lcd.h"
#include "key.h"
#include "ad.h"
#include "main.h"
#include "eep.h"
/*variable definition*/
unsigned char press_l, press_h;
//unsigned int
/*functions*/
void init_system(void);
void operat_mode(void);
void window_operat(void);
unsigned int sample(void);
unsigned int ad2temp(unsigned int);
void t_set(void);
void t_run(void);
/*-------------------------------------------------------------------------*/
void init_system(void)
{
ctrl_da=0;
// TMOD|=0x11; //T0:16bits Timer
// TH0=TH0_20MS;
// TL0=TL0_20MS;
ET0=1;
EA=1;
run=1;
stop=0;
ctrl_da=1;
_nop_();
_nop_();
_nop_();
ctrl_da=0;
ctrl_da=1;
s_clk=0;
_init_display ();
_disp_msge(0,0,"Temp. Controller");
_disp_msge(1,0," AHTL 2006.11 ");
_delay500us(200);
_delay500us(200);
_delay500us(200);
_delay500us(200);
_delay500us(200);
_delay500us(200);
_delay500us(200);
_delay500us(200);
_disp_msge(0,0," System Initial ");
_disp_msge(1,0," AHTL 2006.11 ");
_delay500us(200);
_delay500us(200);
_delay500us(200);
_delay500us(200);
_delay500us(200);
_delay500us(200);
_delay500us(200);
_delay500us(200);
_delay500us(200);
_clear_display();
if(_read_eep_byte(eep_ready)==0x25)
{
press_l=_read_eep_byte(eep_press_l );
press_h=_read_eep_byte(eep_press_h );
}
else
{
press_l=40;
press_h=50;
_write_eep_byte(eep_press_l,40);
_write_eep_byte(eep_press_h,50);
_write_eep_byte(eep_ready,0x25);
}
}
/*--------------------------------------------------------*/
void window_operat()
{
_clear_display();
_disp_msge(0,0," Hot Box ");
_disp_msge(1,0,"1:SET 2:RUN");
_cursor_pos(1,0);
}
/*--------------------------------------------------------*/
void operat_mode(void)
{
bit exit_flag=0;
unsigned char r,c,old_r,old_c;
c=0;
r=1;
while(!exit_flag)
{
switch(_scan_key())
{
case KP_LEFT:
switch (c)
{
case 0:
c=11;
break;
case 11:
c=0;
break;
default:
break;
}
_cursor_pos(r,c);
break;
case KP_RIGHT:
switch (c)
{
case 0:
c=11;
break;
case 11:
c=0;
break;
default:
break;
}
_cursor_pos(r,c);
break;
case KP_ENTER:
switch (c)
{
case 0:
t_set();
old_c=c;
old_r=r;
_clear_display();
_disp_msge(0,0," Hot Box ");
_disp_msge(1,0,"1:SET 2:RUN");
c=old_c;
r=old_r;
_cursor_pos(r,c);
_cursor_sw(1);
break;
case 11:
t_run();
old_c=c;
old_r=r;
_clear_display();
_disp_msge(0,0," Hot Box ");
_disp_msge(1,0,"1:SET 2:RUN");
c=old_c;
r=old_r;
_cursor_pos(r,c);
_cursor_sw(1);
break;
default:
break;
}
break;
default:
break;
}
}
}
/*--------------------------------------------------------*/
void main (void)
{
init_system(); /*初始化系统*/
while(1)
{
window_operat();
operat_mode();
}
}
/*--------------------------------------------------------*/
unsigned int ad2temp(unsigned int val) //linear simulink in 4 parts
{
unsigned char temp;
unsigned long val_long;
val_long=val;
val_long=val_long * 5000 / 1023;
val=(unsigned int) val_long;
if(val>1835)
temp=0;
if(val<255)
temp=99;
if((val<=1835)&&(val>=1025))
temp=(1835-val)/35+20;
else if((val<1025)&&(val>=605))
temp=(1025-val)/25+43;
else if((val<605)&&(val>=395))
temp=(605-val)/15+60;
else if((val<395)&&(val>=255))
temp=(395-val)/10+74;
return temp;
}
/*--------------------------------------------------------*/
void save_data()
{
_clear_display();
_disp_msge(1,0," Save Paramater ");
_delay500us(200);
_delay500us(200);
_delay500us(200);
_clear_display();
}
/*--------------------------------------------------------*/
void t_set(void)
{
unsigned char old_r,old_c,r,c;
unsigned char num_l,num_h;
bit exit_flag=0;
_clear_display();
_disp_msge(0,0,"SET ");
_disp_msge(1,0,"Low:xxC-High:xxC");
_cursor_pos(1,4);
num_l=press_l;
num_h=press_h;
_display_bit8(1,4,num_l);
_display_bit8(1,13,num_h);
r=1;
c=4;
_cursor_pos(r,c);
_cursor_sw(1);
while(!exit_flag)
{
switch(_scan_key())
{
case KP_EXIT:
exit_flag=1;
break;
case KP_MENU:
exit_flag=1;
break;
case KP_SAVE:
old_r=r;
old_c=c;
press_h=num_h;
press_l=num_l;
_write_eep_byte(eep_press_l,num_l);
_write_eep_byte(eep_press_h,num_h);
save_data();
_clear_display();
_disp_msge(0,0,"SET ");
_disp_msge(1,0,"Low:xxC-High:xxC");
_display_bit8(1,4,num_l);
_display_bit8(1,13,num_h);
r=old_r;
c=old_c;
_cursor_pos(r,c);
break;
case KP_LEFT:
switch (c)
{
case 4:
c=14;
break;
case 5:
c=4;
break;
case 13:
c=5;
break;
case 14:
c=13;
break;
default:
break;
}
_cursor_pos(1,c);
break;
case KP_RIGHT:
switch (c)
{
case 4:
c=5;
break;
case 5:
c=13;
break;
case 13:
c=14;
break;
case 14:
c=4;
break;
default:
break;
}
_cursor_pos(1,c);
break;
case KP_INC:
switch(c)
{
case 4:
if((_hex2tobcd(num_l)&0x0f0) < 0x90)
num_l +=10;
_display_bit8(r,4,num_l);
_cursor_pos (r,4);
break;
case 5:
if((_hex2tobcd(num_l)&0x0f) < 0x9)
num_l ++;
_display_bit8(r,4,num_l);
_cursor_pos (r,5);
break;
case 13:
if((_hex2tobcd(num_h)&0x0f0) < 0x90)
num_h +=10;
_display_bit8(r,13,num_h);
_cursor_pos (r,13);
break;
case 14:
if((_hex2tobcd(num_h)&0x0f) < 0x9)
num_h ++;
_display_bit8(r,13,num_h);
_cursor_pos (r,14);
break;
default:
break;
}
break;
case KP_DEC:
switch(c)
{
case 4:
if(_hex2tobcd(num_l)&0x0f0)
num_l -=10;
_display_bit8(r,4,num_l);
_cursor_pos (r,4);
break;
case 5:
if(_hex2tobcd(num_l)&0x0f0)
num_l --;
_display_bit8(r,4,num_l);
_cursor_pos (r,5);
break;
case 13:
if(_hex2tobcd(num_h)&0x0f0)
num_h -=10;
_display_bit8(r,13,num_h);
_cursor_pos (r,13);
break;
case 14:
if(_hex2tobcd(num_h)&0x0f)
num_h --;
_display_bit8(r,13,num_h);
_cursor_pos (r,14);
break;
default:
break;
}
break;
default:
break;
}
}
}
/*-------------------------------------------------*/
void t_run(void)
{
bit exit_flag=0;
bit hot_flag=1;
unsigned char real;
_clear_display();
_disp_msge(0,0,"RUN: xx--xx C");
_disp_msge(1,0," 00 C");
_display_bit8(0, 8, press_l);
_display_bit8(0,12, press_h);
run=0;
stop=1;
// flag_disp=0;
// tm0_num=0;
while(!exit_flag)
{
switch(_scan_key())
{
case KP_EXIT:
exit_flag=1;
run=1;
stop=0;
break;
case KP_MENU:
exit_flag=1;
run=1;
stop=0;
break;
default:
break;
}
// TR0=0;
real = (char)sample();
if(real>press_h)
{
run=1;
stop=0;
hot_flag=0;
}
else
{
if(real<press_l)
{
run=0;
stop=1;
hot_flag=1;
}
else
{
if(hot_flag)
{
run=0;
stop=1;
}
else
{
run=1;
stop=0;
}
}
}
// TR0=1;
// if(flag_disp)
// {
if(real>88||real<20)
{
if(real>88)
_disp_msge (1, 11, ">88");
if(real<20)
_disp_msge (1, 11, "<20");
_cursor_sw(0);
}
else
{
_disp_msge(1,0," 00 C");
_display_bit8(1,12, real);
_cursor_sw(0);
}
// flag_disp=0;
// }
}
}
/*----------------------------------------------------*/
unsigned int sample(void)
{
// unsigned char i;
unsigned char i,j;
unsigned int t_max,t_min,t_suv_av;
// unsigned int t_suv_av;
unsigned int samp[4],t_sum=0;
for(i=0;i<4;i++)
{
//_display_bit8 (0,0,i);
//_delay500us(200);
samp[i]=ad2temp(_ad_result());
t_sum+=samp[i];
//_clear_display();
//_display_bit8 (0,10,i);
//_display_bit16 (1,10,samp[i]);
//_display_bit16 (0,10,_ad_result());
//_delay500us(200);
}
t_max=samp[3];
t_min=samp[3];
for(j=4;j>1;j--)
{
if(samp[j-2]>t_max)
t_max=samp[j-2]; //get t_max;
if(samp[j-2]<t_min)
t_min=samp[j-2]; //get t_max;
// _clear_display();
// _display_bit8 (0,3,j-2);
// _display_bit16 (1,3,t_max);
// _delay500us(200);
}
t_suv_av=(t_sum-t_max-t_min)/2; //get the average of one survey;
// t_suv_av=t_sum/8;
return t_suv_av;
}
/*----------------------------------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -