/********************李想测温比较器版**************/
/******************qq:774145445********************/
/*****************快手:共同学习stm8****************/
/******************20210123************************/
// pms150g
// _______@______
// |1 vdd gnd 8|-----------------------|地
// @2|2 pa7 pa0 7|@5--dianzu100k--| |
// @1|3 pa6 pa4 6|@4--jiance20r---|--||--|
// |4_pa5____pa3_5|@3--ntc100k-----| 103
/**************************************************/
/******************************************************************************/
// 显示屏2353/188
// _2a_ ____
// | 2e 2b | |
// | | | | |
// -2f- ----
// | 2e 2c | |
// | |_2d_| |____|
// @1 @2 @3 @4 @5
// ____________________________
// | |led1|led2|led3|led4|led5|
// |_1_|_高_|_3A_|_3C_|_3E_|____|
// |_2_|_3B_|_高_|_2A_|_1B_|____|
// |_3_|_3D_|_2B_|_高_|_1A_|____|
// |_4_|_3F_|_2D_|_2C_|_高_|____|
// |_5_|_3G_|_2E_|_2F_|_2G_|_高_|
//共阳:0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90//0x88,0x83,0xc6,0xa1,0x86,0x8e
//共阴:0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f//0x77,0x7c,0x39,0x5e,0x79,0x71
/******************************************************************************/
#include "extern.h"
led1 bit pa.6;
led2 bit pa.7;
led3 bit pa.3;
led4 bit pa.4;
led5 bit pa.0;
jiance bit pa.4; //检测脚
dianzu bit pa.0; //标准电阻100k
ntc bit pa.3; //ntc电阻100k
bit led_hong;
bit led_lv;
byte temp; //温度
void cewen(); //测温
void cewen_fangdian(); //测温放电
void jisuan(); //计算
void yanshi(); //延时
void biao1(); //表1(低于25度每度之间差值)
word cewen_a1,cewen_a2,cewen_a3;
void FPPA0 (void)
{
.ADJUST_IC SYSCLK=IHRC/4 // SYSCLK=IHRC/4
//$ gpcc enable,bandgap,p_pa4; //比较器pa.4,1.2v
while(1)
{
cewen();
jisuan();
}
}
/**************************************************/
void cewen() //测温
{
cewen_a1 =0;
cewen_a2 =0;
/**************************************************/ //1计算标准电阻充电时间25℃
cewen_fangdian();
$ led1 in;
$ led2 in; //为了不影响测温全部设成输入
$ dianzu in;
$ jiance in;
$ ntc in;
$ gpcc enable,bandgap,p_pa4; //开比较器1.2v,pa.4
nop;nop;
$ dianzu out,high;
while(!gpcc.6)
{
cewen_a1++;
//if(cewen_a1>254){return;}
}
$ gpcc disable; //关比较器
/**************************************************/ //2计算ntc电阻充电时间
cewen_fangdian();
$ dianzu in;
$ jiance in;
$ ntc in;
$ gpcc enable,bandgap,p_pa4; //开比较器1.2v,pa.4
nop;nop;
$ ntc out,high;
while(!gpcc.6)
{
cewen_a2++;
//if(cewen_a2>54){return;}
}
$ gpcc disable; //关比较器
}
/**************************************************/
void cewen_fangdian() //测温放电
{
$ dianzu out,low;
$ jiance out,low;
$ ntc out,low;
yanshi();
}
/**************************************************/
void jisuan() //计算
{
byte jisuan_a1;
word jisuan_a2;
byte jisuan_a3;
cewen_a3 =0;
if(cewen_a1 < cewen_a2) //低于25度
{
cewen_a3 =cewen_a2-cewen_a1;
led_hong =0;
led_lv =1;
jisuan_a1 =0; //查表
jisuan_a2 =0; //临时ad值
jisuan_a3 =25; //临时温度值
while(1)
{
jisuan_a1 ++; //jisuan_a1不能为0
a =jisuan_a1;
biao1();
jisuan_a2 +=a;
jisuan_a3 --;
if(cewen_a3<jisuan_a2)
{
temp =jisuan_a3;
return;
}
}
}
else
{
cewen_a3 =cewen_a1-cewen_a2;
led_hong =1;
led_lv =0;
}
}
/**************************************************/
void biao1() //表1(低于25度每度之间差值)
{
pcadd a; //汇编指令(a>0)代替查表
ret 14;
ret 15;
ret 15;
ret 15;
ret 17;
ret 19;
ret 19;
ret 20;
ret 21;
ret 23;
ret 23;
ret 25;
ret 27;
ret 27;
ret 29;
ret 31;
ret 33;
ret 34;
ret 36;
ret 38;
ret 41;
ret 43;
ret 45;
ret 48;
ret 50;
ret 54;
}
/**************************************************/
/**************************************************/
void yanshi() //延时
{
.delay 300;
}
/**************************************************/
|