找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1674|回复: 0
收起左侧

找到的一些单片机sht11传感器温控代码

[复制链接]
ID:280173 发表于 2018-1-27 15:56 | 显示全部楼层 |阅读模式
基于51单片机   sht11传感器   

#include<reg52.h>     //包含单片机寄存器的头文件
#define uchar unsigned char
#define uint unsigned int  
sbit P10=P1^0;
sbit ADD=P1^1;
sbit SUB=P1^2;
sbit P13=P1^3;  
uint yatempnum=0aath=180tl=90;


//uchar aath=200tl=100;  
unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

sbit CS=P2^3;       //CS位定义为P3.4引脚
sbit CLK=P2^4;      //CLK位定义为P1.0引脚
sbit DIO=P2^5;       //DIO位定义为P1.1引脚
void delay(uint z);
void display(uint a);
void displayth(uint b);
void displaytl(uint c);  
void init()
{
TMOD=0x01;
TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; }
void key()
{
if(P10==0)   
{
        delay(5);        
if(P10==0)         
{
                       num++;
if(num==3)
{
num=0;  
}
}
  while(!P10)
display(temp);
delay(5);  
while(!P10) display(temp);     }  
if(num!=0)
    {
        if(ADD==0)
         {
            delay(5);
if(ADD==0)
{
                if(num==1)
{  
th++;  
if(th==250)
th=tl+10;
}
if(num==2)
{         
  if(tl<(th-10))
tl++;
Else

tl=90;
                }
}
while(!ADD)
display(th);

        }
        if(SUB==0)
         {
            delay(5);
             if(SUB==0)
            {
                if(num==1)
  {  
                   th--;
                  if(th==(tl+10))
                        th=250;
  }
                if(num==2)
                {
                     tl--;
                    if(tl==90)
                         tl=th-10;
                 }  
           }
            while(!SUB) display(tl);  
       }
    }
}  
void delay(uint z)
{
uint xy;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}  
void display(uint a)
{  

P2=0xfe;
P0=table[a/100];
delay(5);

P2=0xfd;
P0=table[a%100/10];
delay(5);  

P2=0xfb;
P0=table[a%100%10];
delay(5);
}  
void displayth(uint b)
{  

P2=0xfe;
P0=table[b/100];

delay(5);
P2=0xfb;
P0=table[c/100];
delay(5);
}
void display(uint c)
{

P2=0xfd;
P0=table[c%100/10];
delay(5);
P2=0xfb;
P0=table[c%100%10]; delay(5);
}  
unsigned char  A_D()
{

unsigned char idat;
   CS=1;       //一个转换周期开始
CLK=0;     //为第一个脉冲作准备
CS=0;      //CS置0,片选有效  
   DIO=1;        //DIO1,规定的起始信号
      CLK=1;       //第一个脉冲
   CLK=0;      //第一个脉冲的下降沿,此前DIO必须是高电平  
   DIO=1;       //DIO1 通道选择信号   
   CLK=1;        //第二个脉冲,第23个脉冲下沉之前,DI必须跟别输入两位数据用于选择通道,这里选通道CH0  
   CLK=0;      //第二个脉冲下降沿   
   DIO=0;      //DI0,选择通道0
CLK=1;        //第三个脉冲
CLK=0;       //第三个脉冲下降沿   
  DIO=1;       //第三个脉冲下沉之后,输入端DIO失去作用,应置1
CLK=1;      //第四个脉冲
   for(i=0;i<8;i++)     //高位在前
     {
      CLK=1;     //第四个脉冲
       CLK=0;  
      dat<<=1;       //将下面储存的低位数据向右移
dat|=(unsigned char)DIO;     //将输出数据DIO通过或运算储存在dat最低位
     }     

CS=1;            //片选无效  
return dat;        //将读书的数据返回
       }

/***************************************************** 函数功能:主函数
***************************************************/
main(void)
{
init();
while(1)
{  
key();
if((temp<tl)||(temp>th))
P13=0;
else
P13=1;
  if(num==0)
         {
             display(temp);
        }
        if(num==1)         {
            displayth(th);
        }
        if(num==2)  
       {
            displaytl(tl);
       }   
}
}  
void timer0()
interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256
aa++;
if(aa==20)
{
ya=A_D();
temp=(ya*100/51);//((ya*5)*100/255);
aa=0;
}

回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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