热敏电阻测温度(程序+仿真)

2019-07-18 08:37发布

times New Roman">#include<reg52.h>          #include<intrins.h> #include<math.h> typedef unsignedchar uchar;typedef unsignedint  uint;                        sbit CE = P1^1;sbit STS=P1^0;sbit RC=P1^4;sbit A0=P1^3;sbit CS=P1^2; sbit RS = P1^5 ;sbit RW = P1^6 ;sbit EN = P1^7 ;      void delay_ms(uintz){       uint x,y;       for(x=z;x>0;x--)              for(y=110;y>0;y--);}uintAD1674_Read(void){       uint temp;       uchar temp1,temp2;       CS=1;     //片选信号       CE=0;     //初始化,关闭数据采集       CS=0;       A0=0;       RC=0;       CE=1;//CE=1,CS=0,RC=0,A0=0启动12位温度转换       _nop_();       while(STS==1);      //等待数据采集结束       CE=0;     //芯片使能关闭       RC=1;       A0=0;       CE=1;//CE=1,CS=0,RC=1,12/8=1,A0=0 允许高八位数据并行输出       _nop_();       temp1=P0; //读取转换结果的高八位       CE=0; //芯片使能关闭       RC=1;       A0=1;       CE=1;//CE=1,CS=0,RC=1,12/8=0,A0=1 允许低四位数据 并行输出       _nop_();       temp2=P0;      //读取转换结果的第四位       temp=((temp1<<4)|(temp2&0X0F));      //高位和低位合成实际温度,temp2PO口的高四位       return (temp);    //还回转换结果,右移四位是因为temp2P0口的高四位}                      /** * 写数据*/voidw_dat(unsigned char dat){       RS = 1;       //EN = 0;       P2 = dat;       delay_ms(5);       RW = 0;       EN = 1;       EN = 0;} /** * 写命令*/voidw_cmd(unsigned char cmd){       RS = 0;//     EN = 0;       P2 = cmd;       delay_ms(5);       RW = 0;       EN = 1;       EN = 0;}                   /** * 发送字符串到LCD*/voidw_string(unsigned char addr_start, unsigned char *p){       unsigned char *pp;              pp = p;       w_cmd(addr_start);       while (*pp != '')       {              w_dat(*pp++);       }}         /** * 初始化1602*/voidInit_LCD1602(void){       EN = 0;       w_cmd(0x38);  // 16*2显示,5*7点阵,8位数据接口       w_cmd(0x0C);  // 显示器开、光标开、光标允许闪烁       w_cmd(0x06);  // 文字不动,光标自动右移       w_cmd(0x01);  // 清屏}void process(uintdate,uchar add){       uchar A[7];       A[0]=date/1000%10+'0';       A[1]=date/100%10+'0';        A[2]='.';         A[3]=date/10%10+'0';       A[4]=date%10+'0';       A[5]='C';                    w_string(add,A);}       void main(){       uintVOL[25]={343,339,332,328,320,316,312,304,300,292,289,285,277,273,265,261,257,250,246,242,234,230,226,222,218};       uintTemper[25]={100,200,300,400,500,600,700,800,900,1000,1100,1200,1300,1400,1500,1600,1700,1800,1900,2000,2100,2200,2300,2400,2500};       uchar i,flag=0;       uint result,temp1,temp2;       float res;        Init_LCD1602();               w_string(0x80,"Temper:");//     w_string(0xC0,word2);              while (1)       {               res=(float)(AD1674_Read());               result=(uint)((res/2048.0-1.0)*500.0);                              temp1=abs(result-VOL[0]);               for(i=1;i<25;i++)               {                    temp2=abs(result-VOL);                     if(temp1>=temp2)                     {                            temp1=temp2;                            flag=i;                     }                                           }                      process(Temper[flag],0x80+7);               //process(result,0xc0);               //delay_ms(1000);       }}






热敏电阻测温.zip 下载积分: 积分 -1 分
259.77 KB, 下载次数: 1779, 下载积分: 积分 -1 分
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。