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)); //高位和低位合成实际温度,temp2为PO口的高四位 return (temp); //还回转换结果,右移四位是因为temp2为P0口的高四位} /** * 写数据*/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 分
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
多谢楼主
一周热门 更多>