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

📄 main.bak

📁 有水位检测
💻 BAK
字号:
#include<reg51.h>
#include <intrins.h>
#include <MATH.H>

#define Nop()           _nop_();
typedef unsigned char   uchar;
typedef unsigned int    uint;

code uchar dispcode[11] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

//+++++++++++++++++++++++++++++++++++++++++++++++++++++
//+ 常变量申明区表
//+++++++++++++++++++++++++++++++++++++++++++++++++++++
const lowtemp = 24;
const highttemp = 50;
uchar temp;
bit   flag;
bit   store;
uchar *p;
uchar idata temp_buff[9];
uchar idata id_buff[8];
uint  Temperature;

sbit relay  = P3^0;    //继电器H
sbit TEMP_IO = P3^1;    //18b20
sbit key_up = P3^2;    //+key
sbit key_do = P3^3;    //-key
sbit led_r  = P3^4;    //red led
sbit led_g  = P3^5;    //green led

sbit ld     = P1^7;    //
sbit sw     = P1^4;    //water postion
sbit da     = P1^5;    //4069 da
sbit sck    = P1^6;    //4094 sck
sbit led1   = P1^1;    //L
sbit led2   = P1^0;    //L
sbit led3   = P3^7;    //L

#define led1on {led1 = 0; led2 = 1; led3 = 1;}
#define led2on {led1 = 1; led2 = 0; led3 = 1;}
#define led3on {led1 = 1; led2 = 1; led3 = 0;}
#define led1off {led1 = 1; led2 = 1; led3 = 1;}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++
//+ 18b20 CRC校验表
//+++++++++++++++++++++++++++++++++++++++++++++++++++++
uchar code CrcTable [256] = {
0,   94,  188, 226, 97,  63,  221, 131, 194, 156, 126, 32,  163, 253, 31,  65,
157, 195, 33,  127, 252, 162, 64,  30,  95,  1,   227, 189, 62,  96,  130, 220,
35,  125, 159, 193, 66,  28,  254, 160, 225, 191, 93,  3,   128, 222, 60,  98,
190, 224, 2,   92,  223, 129, 99,  61,  124, 34,  192, 158, 29,  67,  161, 255,
70,  24,  250, 164, 39,  121, 155, 197, 132, 218, 56,  102, 229, 187, 89,  7,
219, 133, 103, 57,  186, 228, 6,   88,  25,  71,  165, 251, 120, 38,  196, 154,
101, 59,  217, 135, 4,   90,  184, 230, 167, 249, 27,  69,  198, 152, 122, 36,
248, 166, 68,  26,  153, 199, 37,  123, 58,  100, 134, 216, 91,  5,   231, 185,
140, 210, 48,  110, 237, 179, 81,  15,  78,  16,  242, 172, 47,  113, 147, 205,
17,  79,  173, 243, 112, 46,  204, 146, 211, 141, 111, 49,  178, 236, 14,  80,
175, 241, 19,  77,  206, 144, 114, 44,  109, 51,  209, 143, 12,  82,  176, 238,
50,  108, 142, 208, 83,  13,  239, 177, 240, 174, 76,  18,  145, 207, 45,  115,
202, 148, 118, 40,  171, 245, 23,  73,  8,   86,  180, 234, 105, 55,  213, 139,
87,  9,   235, 181, 54,  104, 138, 212, 149, 203, 41,  119, 244, 170, 72,  22,
233, 183, 85,  11,  136, 214, 52,  106, 43,  117, 151, 201, 74,  20,  246, 168,
116, 42,  200, 150, 21,  75,  169, 247, 182, 232, 10,  84,  215, 137, 107, 53};

void delay(uchar x);
void Init18b20 (void);
void WriteByte (uchar wr);
void WriteByte (uchar wr);
uchar ReadByte (void);
void read_bytes (uchar j);
uchar CRC (uchar j);
void GemTemp (void);
void Config18b20 (void);
void ReadID (void);
void TemperatuerResult(void);

//+++++++++++++++++++++++++++++++++++++++++++++++++++++
//+函数:delay 
//+ 功能:共用延时
//+ 参数: x
//+ 返回: 无
//+++++++++++++++++++++++++++++++++++++++++++++++++++++
void delay(uchar x)
{
	while (x--);
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++
//+函数:Init18b20 
//+ 功能:18B20初始化
//+ 参数: wr
//+ 返回: 无
//+++++++++++++++++++++++++++++++++++++++++++++++++++++
void Init18b20 (void)
{
  TEMP_IO = 1;
  Nop();
  TEMP_IO = 0;
  delay(86);                //delay 530 uS//80
  Nop();
  TEMP_IO = 1;
  delay(14);                //delay 100 uS//14
  Nop(); Nop();	Nop();
  
  if(TEMP_IO == 0)
    flag = 1;                  //detect 1820 success!
  else
    flag = 0;                  //detect 1820 fail!
  delay(20);               //20
  Nop();		  
  Nop();
  TEMP_IO = 1;
}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++
//+ 函数: WriteByte
//+ 功能: 单字节写入
//+ 参数: wr
//+ 返回: 无
//+++++++++++++++++++++++++++++++++++++++++++++++++++++	
void WriteByte (uchar wr)     //单字节写入
{
  uchar i;
  for (i = 0; i < 8; i ++)
  {
    TEMP_IO = 0;
    Nop();
    TEMP_IO = wr & 0x01;
    delay(5);            //delay 45 uS //5
    Nop();
    Nop();
    TEMP_IO = 1;
    wr >>= 1;
  }
}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++
//+ 函数: ReadByte
//+ 功能: 读取单字节
//+ 参数: 无
//+ 返回: 无
//+++++++++++++++++++++++++++++++++++++++++++++++++++++	
uchar ReadByte (void)     //读取单字节
{
  uchar i,u = 0;
  for(i = 0; i < 8; i ++)
  {
    TEMP_IO = 0;
    u >>= 1;
    TEMP_IO = 1;
    if(TEMP_IO ==1 )
    u |= 0x80;
    delay (4);
    Nop();
 }
 return(u);
}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++
//+ 函数: Rread_bytes
//+ 功能: 读18B20
//+ 参数: j
//+ 返回: 无
//+++++++++++++++++++++++++++++++++++++++++++++++++++++	
void read_bytes (uchar j)
{
  uchar i;
  for(i = 0; i < j; i ++)
  {
    *p = ReadByte();
    p ++;
  }
}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++
//+ 函数: CRC
//+ 功能: 查表校验
//+ 参数: j
//+ 返回: 无
//+++++++++++++++++++++++++++++++++++++++++++++++++++++	
uchar CRC (uchar j)
{
  uchar i,crc_data = 0;
  for(i = 0; i < j; i ++)        //查表校验
     crc_data = CrcTable[crc_data^temp_buff[i]];
  return (crc_data);
}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++
//+ 函数: GemTemp
//+ 功能: 读取温度
//+ 参数: 无
//+ 返回: 无
//+++++++++++++++++++++++++++++++++++++++++++++++++++++	
void GemTemp (void)
{
  read_bytes (9);
  if (CRC(9) == 0)         //校验正确
  {
//    disdate[23] = 14;
    if (temp_buff[1] & 0xf0)
    {
      temp_buff[1] = ~temp_buff[1];
      temp_buff[0] = ~temp_buff[0];
      if (temp_buff[0] == 0xff)
      {
        temp_buff[1] ++;
        temp_buff[0] = 0;
      }
      else
      {
        temp_buff[0] ++;
      }
//      disdate[23] = 11;
    }
    Temperature = temp_buff[1]*0x100 + temp_buff[0];
//     Temperature *= 0.625;
    Temperature /= 16;
    delay(1);
    
//    disdate[14] = Temperature / 10;
//    disdate[15] = Temperature-disdate[14] * 10;
  }
}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++
//+ 函数: Config18b20
//+ 功能: 重新配置报警限定值和分辨率
//+ 参数: 无
//+ 返回: 无
//+++++++++++++++++++++++++++++++++++++++++++++++++++++	
void Config18b20 (void)  //重新配置报警限定值和分辨率
{
  Init18b20();
  WriteByte(0xcc);         //skip rom
  WriteByte(0x4e);         //write scratchpad
  WriteByte(0x19);         //上限
  WriteByte(0x1a);         //下限
  WriteByte(0x7f);         //set 11 bit (0.125)
  Init18b20();
  WriteByte(0xcc);         //skip rom
  WriteByte(0x48);         //保存设定值
  Init18b20();	    
  WriteByte(0xcc);         //skip rom
  WriteByte(0xb8);         //回调设定值
}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++
//+ 函数: ReadID
//+ 功能: 读取器件 id
//+ 参数: 无
//+ 返回: 无
//+++++++++++++++++++++++++++++++++++++++++++++++++++++	
void ReadID (void)
{
  Init18b20();
  WriteByte(0x33);         //read rom
  read_bytes(8);
}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++
//+ 函数: TemperatuerResult
//+ 功能: 18B20ID全处理
//+ 参数: 无
//+ 返回: 无
//+++++++++++++++++++++++++++++++++++++++++++++++++++++	
void TemperatuerResult(void)
{
  p = id_buff;
  ReadID();
  Config18b20();
  Init18b20 ();
  WriteByte(0xcc);         //skip rom
  WriteByte(0x44);         //Temperature convert
  Init18b20 ();            
  WriteByte(0xcc);         //skip rom
  WriteByte(0xbe);         //read Temperature
  p = temp_buff;
  GemTemp();
}


//+++++++++++++++++++++++++++++++++++++++++++++++++++++
//+ 函数: Timer1
//+ 功能: 定时中断1
//+ 输入: 无
//+ 返回: 无
//+++++++++++++++++++++++++++++++++++++++++++++++++++++
void Timer0() interrupt 1 using 2
{
} 

void main(void)
{
	led_r = 1;
	led_r = 0;
	led_g = 1;
	led_g = 0;
	
	while(1)
	{
		uchar i;
		sck = 0;
		led1on;
		for(i = 0; i < 8; i ++)
		{
			da = 0;
			Nop();Nop();Nop();Nop();
			sck = 0;
		}
		led1off;

		led2on;
		for(i = 0; i < 8; i ++)
		{
			da = 0;
			Nop();Nop();Nop();Nop();
			sck = 0;
		}
		led1off;

		led3on;
		for(i = 0; i < 8; i ++)
		{
			da = 1;
			Nop();Nop();Nop();Nop();
			sck = 0;
		}
	}	
}

⌨️ 快捷键说明

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