李想测温比较器版XG

[复制链接]
624|1
手机看帖
扫描二维码
随时随地手机跟帖
34af9uc|  楼主 | 2021-2-2 23:26 | 显示全部楼层 |阅读模式
/********************李想测温比较器版**************/
/******************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

void                cewen();                                //测温
void                cewen_fangdian();                //测温放电
void                cewen_js();                                //测温计算出温度值
void                yanshi();                                //延时
void                yanshi1();                                //延时1
void                biao1();                                //表1(低于25度每度之间差值)
void                biao2();                                //表2(高于25度每度之间差值)
void                xianshi();                                //显示
void                xianshi_js();                        //显示计算
void                biao3();                                //机器码

byte                temp;                                        //温度0-99
byte                xianshi_a1,xianshi_a2;        //显示十位,显示个位
byte                xianshi_b1,xianshi_b2;        //机器码十位,机器码个位
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
byte                a1;
while(1)
{
cewen();
cewen_js();
xianshi_js();
a1=70;
while(a1)
{
a1--;
xianshi();
}


}

}

/**************************************************/
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
$                gpcs                vdd*21/32;
$                gpcc                enable,n_r,p_pa4;
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

$                gpcs                vdd*21/32;
$                gpcc                enable,n_r,p_pa4;
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                cewen_js()                                //测温计算出温度值
{
byte                jisuan_a1;
word                jisuan_a2;
byte                jisuan_a3;
byte                jisuan_a4;
cewen_a3                =0;
if(cewen_a1 < cewen_a2)                                                //低于25度
{
cewen_a3                =cewen_a2-cewen_a1;
jisuan_a1                =0;                //查表用
jisuan_a2                =0;                //临时ad值
jisuan_a3                =25;        //温度暂值
jisuan_a4                =1;                //退出条件
while(jisuan_a4)
        {
        jisuan_a1                ++;                //jisuan_a1不能为0
        a                                =jisuan_a1;
        biao1();
        jisuan_a2                +=a;        //累加器a取回的值
        jisuan_a3                --;
        if(cewen_a3<jisuan_a2)
                {
                temp        =jisuan_a3;                //温度值
                return;
                }
        jisuan_a4                ++;
        if(jisuan_a4>25)                //退出条件以免卡死
                {
                jisuan_a4        =0;
                temp                =254;
                }
        }
}

else
{
cewen_a3                =cewen_a1-cewen_a2;

jisuan_a1                =0;                //查表用
jisuan_a2                =0;                //临时ad值
jisuan_a3                =25;        //温度暂值
jisuan_a4                =1;                //退出条件
while(jisuan_a4)
        {
        jisuan_a1                ++;                //jisuan_a1不能为0
        a                                =jisuan_a1;
        biao2();
        jisuan_a2                +=a;        //累加器a取回的值
        jisuan_a3                ++;
        if(cewen_a3<jisuan_a2)
        {
        temp        =jisuan_a3;                //温度值
        return;
        }

        jisuan_a4                ++;
        if(jisuan_a4>75)                //退出条件以免卡死
                {
                jisuan_a4        =0;
                temp                =254;
                }
        }
}
}
/**************************************************/
void                biao1()                                //表1(低于25度每度之间差值)
{
pcadd        a;                //汇编指令(a>0)代替查表
ret                15;                //24
ret                15;                //23
ret                15;                //22
ret                17;                //21
ret                19;                //20
ret                19;                //19
ret                20;                //18
ret                21;                //17
ret                23;                //16
ret                23;                //15
ret                25;                //14
ret                27;                //13
ret                27;                //12
ret                29;                //11
ret                31;                //10
ret                33;                //9
ret                34;                //8
ret                36;                //7
ret                38;                //6
ret                41;                //5
ret                43;                //4
ret                45;                //3
ret                48;                //2
ret                50;                //1
ret                54;                //0
}
/**************************************************/
void                biao2()                                //表2(高于25度每度之间差值)
{
pcadd        a;                //汇编指令(a>0)代替查表
ret                14;                //25
ret                13;                //26
ret                12;                //27
ret                11;                //28
ret                11;                //29
ret                10;                //30
ret                10;                //31
ret                9;                //32
ret                9;                //33
ret                8;                //34
ret                8;                //35
ret                8;                //36
ret                7;                //37
ret                7;                //38
ret                7;                //39

ret                6;                //40
ret                6;                //41
ret                6;                //42
ret                6;                //43
ret                5;                //44
ret                0;                //45
ret                5;                //46
ret                5;                //47
ret                4;                //48
ret                4;                //49

ret                5;                //50
ret                4;                //51
ret                3;                //52
ret                4;                //53
ret                3;                //54
ret                4;                //55
ret                3;                //56
ret                3;                //57
ret                3;                //58
ret                3;                //59

ret                3;                //60
ret                2;                //61
ret                3;                //62
ret                2;                //63
ret                2;                //64
ret                3;                //65
ret                2;                //66
ret                2;                //67
ret                2;                //68
ret                2;                //69

ret                1;                //70
ret                2;                //71
ret                2;                //72
ret                1;                //73
ret                2;                //74
ret                2;                //75
ret                1;                //76
ret                1;                //77
ret                2;                //78
ret                1;                //79

ret                1;                //80
ret                1;                //81
ret                2;                //82
ret                1;                //83
ret                1;                //84
ret                1;                //85
ret                1;                //86
ret                1;                //87
ret                1;                //88
ret                1;                //89

ret                1;                //90
ret                1;                //91
ret                0;                //92
ret                1;                //93
ret                1;                //94
ret                1;                //95
ret                0;                //96
ret                1;                //97
ret                1;                //98
ret                2;                //99
ret                3;                //100


}
/**************************************************/
void                yanshi()                                //延时
{
.delay                300;
}
/**************************************************/
void                xianshi_js()                        //显示计算
{
byte                temp1;
xianshi_a1        =0;                //显示十位
xianshi_a2        =0;                //显示个位

temp1                =temp;
while(temp1>9)                        //代替除法计算出十位
{
xianshi_a1        ++;                        //十位
temp1                -=10;
}
xianshi_a2        =temp1;                //个位

if(xianshi_a1>9)                //大于100显示--
{
xianshi_a1        =10;
xianshi_a2        =10;
}

a                =xianshi_a1+1;        //累加器a是搬运工取字模
biao3();
xianshi_b1                =a;                //十位字模

a                =xianshi_a2+1;        //累加器a是搬运工取字模
biao3();
xianshi_b2                =a;                //个位字模
}
/**************************************************/
//共阴:0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
void                biao3()                                //机器码
{
pcadd        a;                //汇编指令(a>0)代替查表
ret                0x3f;                //0
ret                0x06;                //1
ret                0x5b;                //2
ret                0x4f;                //3
ret                0x66;                //4
ret                0x6d;                //5
ret                0x7d;                //6
ret                0x07;                //7
ret                0x7f;                //8
ret                0x6f;                //9
ret                0x40;                //-中杠
}
/**************************************************/                //五线数码管五种状态
void                xianshi()                                //显示
{
/**************************************************/                //第一种
$                led1                out,high;
$                led2                in;
$                led3                in;
$                led4                in;
$                led5                in;
//if(){}                                                                                //高
if(xianshi_b2.0)        {$        led2        out,low;}                //3a
if(xianshi_b2.2)        {$        led3        out,low;}                //3c
if(xianshi_b2.4)        {$        led4        out,low;}                //3e
//if(){}                                                                        //空
yanshi1();
/**************************************************/                //第二种
$                led1                in;
$                led2                out,high;
$                led3                in;
$                led4                in;
$                led5                in;
if(xianshi_b2.1)        {$        led1        out,low;}                //3b
//if(){}                                                                                //高
if(xianshi_b1.0)        {$        led3        out,low;}                //2a
//if(xianshi_c1==1)        {$        led4        out,low;}                //1b
//if(){}       
yanshi1();
/**************************************************/                //第三种
$                led1                in;
$                led2                in;
$                led3                out,high;
$                led4                in;
$                led5                in;
if(xianshi_b2.3){$        led1        out,low;}                //3d
if(xianshi_b1.1){$        led2        out,low;}                //2b
//if(){}                                                                        //高
//if(xianshi_c1==1){$        led4        out,low;}                //1a
//if(){}                                                                        //空
yanshi1();
/**************************************************/                //第四种
$                led1                in;
$                led2                in;
$                led3                in;
$                led4                out,high;
$                led5                in;
if(xianshi_b2.5){$        led1        out,low;}                //3f
if(xianshi_b1.3){$        led2        out,low;}                //2d
if(xianshi_b1.2){$        led3        out,low;}                //2c
//if(){}                                                                        //高
//if(){}                                                                        //空
yanshi1();
/**************************************************/                //第五种
$                led1                in;
$                led2                in;
$                led3                in;
$                led4                in;
$                led5                out,high;
if(xianshi_b2.6){$        led1        out,low;}                //3g
if(xianshi_b1.4){$        led2        out,low;}                //2e
if(xianshi_b1.5){$        led3        out,low;}                //2f
if(xianshi_b1.6){$        led4        out,low;}                //2g
//if(){}                                                                        //高
yanshi1();
}
/**************************************************/
void                yanshi1()                                //延时1
{
.delay        3000;
}
/**************************************************/


比较器01xg.rar

4.57 KB

使用特权

评论回复

相关帖子

tzmvp| | 2021-6-13 22:02 | 显示全部楼层
6666 bilbil看大佬视频过来的!

使用特权

评论回复
发新帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

273

主题

430

帖子

55

粉丝