找回密码
 立即注册
查看: 574|回复: 3

NTC测温 变化大 一会22一会23 请教下大佬们 程序如下

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:323
  • 最近打卡:2025-06-30 08:11:39

26

主题

162

回帖

473

积分

中级会员

积分
473
发表于 2024-3-16 09:00:17 | 显示全部楼层 |阅读模式
#include <stc15.h>
#include "intrins.h"

#include"ntc.h"

//#define FOSC    11059200UL
//#define BAUD    115200
#define ADC_POWER   0x80            //ADC电源控制位
#define ADC_FLAG    0x10            //ADC完成标志
#define ADC_START   0x08            //ADC起始控制位
#define ADC_SPEEDLL 0x00            //540个时钟
#define ADC_SPEEDL  0x20            //360个时钟
#define ADC_SPEEDH  0x40            //180个时钟
#define ADC_SPEEDHH 0x60            //90个时钟
//#define CLK_DIV     0X97;
#define  adcbo      0.09       //滤波系数

//typedef unsigned int u16;          //对数据类型进行声明定义
//typedef unsigned char u8;
u16 temp,temp2;
s16 temp1;
u8 disp[3];
u8 xdata SMG[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
sbit v1=P1^2;
sbit v2=P1^3;
sbit v3=P1^4;

bit busy;
char wptr;xdata
char rptr;
char buffer[16];
u8 ddy;
void Beep();
void UartSend(char dat)
{
    while (busy);
    busy = 1;
    SBUF = dat;
}
       

void Delay1ms()                //@12.000MHz
{
        unsigned char i, j;

        i = 12;
        j = 169;
        do
        {
                while (--j);
        } while (--i);
}

void UartSendStr(char *p)
{
    while (*p)
    {
        UartSend(*p++);
    }
}


void Delayms(u16 k)               
{
        while(k)
        {

                Delay1ms();

                k--;
        }

}



void UartInit(void)                //4800bps@12.000MHz
{
        SCON = 0x50;                //8位数据,可变波特率
        AUXR |= 0x01;                //串口1选择定时器2为波特率发生器
        AUXR |= 0x04;                //定时器时钟1T模式
        T2L = 0x8F;                        //设置定时初始值
        T2H = 0xFD;                        //设置定时初始值
        AUXR |= 0x10;                //定时器2开始计时
        ES = 1;                //打开串口中断
        EA =1;                //打开总中断
}

void UartIsr() interrupt 4
{
    if (TI)
    {
        TI = 0;
        busy = 0;
    }
    if (RI)
    {
        RI = 0;
        buffer[wptr++] = SBUF;
        wptr &= 0x0f;
    }
}

void InitADC()
{
       
//    PCON2=0X20;
          CLK_DIV |= 0x20;                //ADC_RES高8位
    P1ASF = 0x02;                   //设置P1.1口为AD口
    ADC_RES = 0;
    ADC_RESL=0;        //清除结果寄存器
    ADC_CONTR = ADC_POWER | ADC_SPEEDLL ;
    Delayms(5);              //ADC上电并延时
}

u16 GetADCResult(u8 ch)
{
        u16 weidu;
        u16 mun=0;
        u8 count=0, n=100;
       
    ADC_CONTR = ADC_POWER | ADC_SPEEDHH  |ch| ADC_START;
    _nop_();   
    _nop_();          //等待5个NOP
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    while (!(ADC_CONTR & ADC_FLAG));//等待ADC转换完成
    ADC_CONTR &= ~ADC_FLAG;         //Close ADC

//        weidu=ADC_RESL;           //返回ADC结果
//        weidu=weidu<<8;
//        weidu|=ADC_RES;
       
        weidu=ADC_RES;           //返回ADC结果
        weidu=weidu<<8;
        weidu|=ADC_RESL;
        for(count=0;count<n;count++)    //求100次的平均值
        {
                mun+=weidu;
        }



        return (mun/n);
//        return weidu;
}

u16 adcc(u16 k)                          //k为ADC数值  返回adata为经过一阶低涌滤波后数值
{
        static ndata;                       //上一次的计算值
    u16 adata;                          //本次的计算值
          adata=(k*adcbo)+(1-adcbo)*ndata;   //计算
          ndata=adata;                       // 存下本次值
    return adata;                     //返回数据

}
void SMG_DigDisplay()

{
        u8 i;
        for(i=0;i<3;i++)//位选,选择点亮的数码管
        {
                switch(i)
                {
                        case (0):v1=1;v2=0;v3=0;break;//显示最高位
                        case (1):v1=0;v2=1;v3=0;break;
                        case (2):v1=0;v2=0;v3=1;break;


                }


                P3=disp[i];
                Delayms(2);  
//                P3=0xff;

        }



}  
void Smgxx()
{
        static s16 vis=0;
//        static u16 vis1=0;
        u8 con=0;
//        temp=GetADCResult(1);
//        if(vis1!=temp)
//        {
//               
//           vis1=temp;
//       
//       
        temp=GetADCResult(1);
        temp2=adcc(temp);
        temp1=Temperature(temp2);
             
        if(vis!=temp1)
        {  
          
                vis=temp1;
       
                if(temp1<0)
                {
                        disp[0] =0xbf ;                //-
                        temp1 *=-1;
                }
                else
                {
                        disp[0] = 0xc0;        //不显示
                }

               
                disp[1] = SMG[temp1 /10%10];
                disp[2] = SMG[temp1 %10];


       
                }
//        }

}

void main()
{

        P3M0 = 0x00; P3M1 = 0x00;

//        P1M0 = 0x1c; P1M1 = 0x02;
    P1M0 = 0x00; P1M1 = 0x02;


    InitADC();                               //初始化ADC
//    IE = 0xa0;                      //使能ADC中断
//    UartInit();
       
          Delayms(1000);                 //延时开机
    while(1)
               
        {
       


          

//                UartSend(temp);
////                UartSend(temp);
//                Delayms(1000);
               
//                disp[0] = SMG[1];
//                disp[1] = SMG[2];
//                disp[2] = SMG[3];       

            Smgxx();
               
                SMG_DigDisplay();
               
       
               
            

       
        }


}


回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:113
  • 最近打卡:2025-06-30 09:26:17

741

主题

1万

回帖

1万

积分

管理员

积分
17259
发表于 2024-3-16 09:40:20 | 显示全部楼层
参考下我们 STC8H 实验箱的参考程序
深圳国芯人工智能有限公司-实验箱 (stcai.com)
截图202403160940186098.jpg

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:193
  • 最近打卡:2025-06-28 08:36:03
已绑定手机

95

主题

990

回帖

2539

积分

超级版主

积分
2539
QQ
发表于 2024-3-16 10:16:41 | 显示全部楼层
要是温度显示不稳定  你来打我
截图202403161016165197.jpg
热线19952583534
www.STCAI.com
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:323
  • 最近打卡:2025-06-30 08:11:39

26

主题

162

回帖

473

积分

中级会员

积分
473
发表于 2024-3-16 12:00:17 | 显示全部楼层
谢谢  我去看看
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-30 20:24 , Processed in 0.109438 second(s), 71 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表