资源简介

内含数字温度计 单片机keil代码 和proteus电路原理仿真 以及设计论文 一条龙服务,超值~

资源截图

代码片段和文件信息

#include
#include 
#define uchar unsigned char
#define uint unsigned int
#define      ad0_7      P1       //AD数据口

sbit         cs=P2^4;      //片选信号,低电平有效,控制芯片的启动和结果读取

sbit         rd=P2^7;        //读数据控制,低电平有效

sbit         wr=P2^6;         //AD启动控制,上升沿有效

sbit         intr=P2^5;       //AD转换完成输出低电平

uchar i;
uchar led[11]={     0x3F  //“0“
                0x06  //“1“
                0x5B  //“2“
                0x4F  //“3“
                0x66  //“4“
                0x6D  //“5“
                0x7D  //“6“
                0x07  //“7“
                0x7F  //“8“
                0x6F  //“9“
0x40   //“-“
};
uchar dat_AD[4]={0};
  
//启动AD转换子程序//////////////////
void start_ad(void)
{       cs=0;                 //允许AD
        wr=0;
        _nop_();
         wr=1;                //WR由低变高时启动AD转换
        
        while(intr);          //等待转换完成,低电平有效
        cs=1;                 //停止AD转换
}////////////////////
 read_ad()
{       uint ad_data;
        ad0_7=0xff;
        cs=0;                 //允许读
        rd=0;                 //读取转换数据结果
        _nop_();
        ad_data=ad0_7;         //把数据存到AD——data中
        rd=1;cs=1;            //停止读取AD
        return(ad_data);
}
// 数据处理函数
//实际测量当0度时,AD数据为133,所以数据处理时判断AD数据和133的大小来识别正负温度。
//由于ADC芯片精度不够,所以测量时有误差,8位AD的分辨率为19.5mV,约为20mV,
//放大电路输出的电压,温度每变化一度,电压变化只有10mV左右,所以测量有误差,
//以下温度和AD数据的计算公式为实测数据后线性拟合得到的,实际线性拟合得到公式为:y=0.503x+133.63.
//因为AD数据为0-255的整数,所以公式简化为以下计算方式
void data_shout(uint ad_data)
{      
         float  temp;
         uint T;

if(ad_data<79)
               {
                   temp=614.422-7.811*ad_data;
 T=(uint)temp;
                 dat_AD[0]=10;
               }                     //负温度   dat_AD[0]中为温度符号数据
  else if(ad_data<=204)
               {
                   temp=7.990*ad_data-628.491;
         T=(uint)temp;
                 dat_AD[0]=T/1000;
               }                      //正温度

else if(ad_data>204)
               {
                 temp=8.124*ad_data-655.742;
         T=(uint)temp;
                 dat_AD[0]=T/1000;
               }                         //ad_data=T;

        dat_AD[1]=T%1000/100;              //温度值的十位
         dat_AD[2]=T%100/10;          //2温度值的个位
         dat_AD[3]=T%10;          //温度值的小数位

}
//显示函数
void disp(){

switch(i){
case 0: P0=0xfe;P3=led[dat_AD[0]];i++;break;  //显示符号位
case 1: P0=0xfd;P3=led[dat_AD[1]];i++;break;
case 2: P0=0xfb;P3=led[dat_AD[2]]|0x80;i++;break;
case 3: P0=0xf7;P3=led[dat_AD[3]];i=0;break;

}
}

//定时器初始化
//用作数码管显示的刷新
void t0init(){
TMOD=0x01;
TH0=(65535-2000)/256;    //定时20ms时间
TL0=(65535-2000)%256;
EA=1;
ET0=1;
TR0=1;
}
 //定时器中断函数,在中断中刷新数码管显示
 void Time0(  ) interrupt 1{
  TH0=(65535-2000)/256;
TL0=(65535-2000)%256;
disp();
 } 

//主函数
void main(void){ 
 t0init();   //初始化
     while(1){
        start_ad();             //开始AD
        data_shout(read_ad());   

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-06-05 23:38  keil\
     文件      118751  2014-06-09 15:10  keil\Last Loaded shuziwenduji.DBK
     文件        3411  2014-06-09 15:05  keil\main.c
     文件        6280  2019-06-05 23:35  keil\main.LST
     文件        6648  2019-06-05 23:35  keil\main.OBJ
     文件        7423  2019-06-05 23:35  keil\pt100
     文件        1054  2019-06-05 23:35  keil\pt100.build_log.htm
     文件        3992  2019-06-05 23:35  keil\pt100.hex
     文件          42  2019-06-05 23:35  keil\pt100.lnp
     文件       10256  2019-06-05 23:35  keil\pt100.M51
     文件         605  2014-06-09 15:08  keil\pt100.plg
     文件       90247  2019-06-05 23:38  keil\pt100.uvgui.20292
     文件        5741  2019-06-05 23:34  keil\pt100.uvopt
     文件       14027  2019-06-05 23:34  keil\pt100.uvproj
     文件           0  2014-06-09 15:07  keil\pt100_Uv2.Bak
     文件        6376  2005-03-22 15:22  keil\STARTUP.A51
     文件       14069  2019-06-05 23:35  keil\STARTUP.LST
     文件         749  2019-06-05 23:35  keil\STARTUP.OBJ
     目录           0  2019-06-05 23:37  proteus 仿真\
     文件     6885662  2014-06-09 15:48  proteus 仿真\shuziwenduji.BMP
     文件      118752  2014-06-09 18:10  proteus 仿真\shuziwenduji.DSN
     文件       21561  2019-06-05 23:37  proteus 仿真\shuziwenduji.pdsprj
     文件         873  2019-06-05 23:37  proteus 仿真\shuziwenduji.pdsprj.DESKTOP-7CGG286.20292.workspace
     文件         742  2014-06-09 18:10  proteus 仿真\shuziwenduji.PWI
     目录           0  2019-06-05 23:37  设计报告\
     文件       39424  2015-01-03 11:20  设计报告\基于热敏电阻的数字温度计的设计任务书.doc
     文件      605228  2015-01-03 11:19  设计报告\设计.doc

评论

共有 条评论