⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 123.c

📁 C51的温度检测河控制系统代码
💻 C
字号:
#include <reg51.h> 
sbit bj1=P2^0;   //喇叭报警
sbit ge=P2^7;    
sbit shi=P2^6;
sbit DQ =P2^3;   //定义通信端口
unsigned char buf;
//********************************************
unsigned code tab[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x40};
                    //0,    1,   2   3    4    5    6    7    8    9 
void delay(unsigned int i);
void delayms(); 
void fasong();
//*****************************
/*********************************************************/
void delayms() 

{   unsigned char ms;
    unsigned char i ;
    while(ms--)
     {
        for(i=0;i<90;i++);
     }
}
//初始化函数
Init_DS18B20(void)
{
unsigned char x=0;
  DQ = 1;    //DQ复位
  delay(8);  //稍做延时
  DQ = 0;    //单片机将DQ拉低
  delay(80); //精确延时 大于 480us
  DQ = 1;    //拉高总线12
  delay(14);
  x=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
  delay(20);
}
//读一个字节
ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
 {
  DQ = 0; // 给脉冲信号
  dat>>=1;
  DQ = 1; // 给脉冲信号
  if(DQ)
  dat|=0x80;
  delay(4);
 }
  return(dat);
}
//写一个字节
WriteOneChar(unsigned char dat)
{
unsigned char i=0;
  for (i=8; i>0; i--)
 {
  DQ = 0;
  DQ = dat&0x01;
  delay(5);
  DQ = 1;
  dat>>=1;
 }
  delay(4);
}
//读取温度
ReadTemperature(void)                                                
{
  unsigned char a=0;
  unsigned char b=0;
  unsigned char t=0;
  Init_DS18B20();
  WriteOneChar(0xCC); // 跳过读序号列号的操作
  WriteOneChar(0x44); // 启动温度转换
  Init_DS18B20();
  WriteOneChar(0xCC); //跳过读序号列号的操作
  WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
  a=ReadOneChar();   //读取温度值低位
  b=ReadOneChar();   //读取温度值高位
  a=a>>4;            //低位右移4位,舍弃小数部分
  t=b<<4;            //高位左移4位,舍弃符号位
  t=t|a;             
  return(t);
}
void delay(unsigned int i)
  {
     while(i--);
    
  }
void display_tempmain(unsigned char i)             //主程序温度显示函数
{  P0=tab[i%10];
   shi=1;
   ge=0;  
   delay(1000);
   P0=tab[i/10];
   shi=0;
   ge=1;
}
//*************************************************

void intcom(void) interrupt 4
{
ES=0;//关闭串口中断
RI=0;//清除串行接收标志
buf=SBUF;
ES=1;//开串口中断
}
//*************************************************
void InitSerial(void)
{
  	SCON = 0x50;    // setup serial port control 
  	TMOD = 0x20;    // hardware (300 BAUD @12MHZ) 
  	TH1  = 0x98;    // TH1
	TR1	 = 1;  		// Timer 1 on
	EA=1;
        ES=1; 
}
//***********************************************
void main()
{unsigned int temp;
      
  while(1)                         //主循环
 {
    temp=ReadTemperature();
    display_tempmain(temp);
	
	//fasong();

 }
}

  void fasong()
  {
  InitSerial();
  while(1)
  {SBUF=(shi);
  delay(10);
  SBUF=(ge); 
  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -