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

📄 t.c

📁 ds18b20多点测温,单片机为AT89s52,液晶显示,实时时钟显示.
💻 C
📖 第 1 页 / 共 4 页
字号:
#include"intrins.h"
#include<reg51.h>
#define uchar unsigned char
sbit dq=P1^5; 
sbit key_clk=P3^2;
sbit key_data=P3^7;
uchar key=0; 
uchar keycounter=0;
uchar counter1=0;

uchar xdata alarmflag[3][11]={0};
sbit D_I = P2^0;
sbit R_W = P2^1;
sbit E = P2^6;
sbit CS1 = P2^4;
sbit CS2 = P2^3;
sbit RST = P2^2;
uchar ROMnumber[3][8]={0};
uchar THL[2][3]={
                 25,50,60,
                 8, 30,25,};
uchar temper[2][3]={0};
uchar temper1[2][3]={0};
uchar rodcounter=0;
uchar flag[3]={1};
sbit t_clk=P2^5;
sbit t_io=P2^6;
sbit t_rst=P3^7;
sbit bit7=ACC^7;
sbit bit0=ACC^0;
uchar time[14];
uchar settime[7]={0x30,0x12,0x12,0x21,0x02,0x01,0x05};

uchar code number[10][16]={
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//-----0
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//------1
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//------2
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//------3
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//------4
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//-------5
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//-------6
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//-------7
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//-------8
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//-------9
};//-------------------------------------------0~9 10个数字
uchar code number2[10][16]={
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x80,0x8F,0x90,0xA0,0xA0,0x90,0x8F,0x80,
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x80,0xA0,0xA0,0xBF,0xA0,0xA0,0x80,0x80,
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x80,0xB0,0xA8,0xA4,0xA2,0xA1,0xB0,0x80,
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x80,0x98,0xA0,0xA0,0xA0,0x91,0x8E,0x80,
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x80,0x87,0x84,0xA4,0xA4,0xBF,0xA4,0x80,
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x80,0x99,0xA1,0xA0,0xA0,0x91,0x8E,0x80,
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x80,0x8F,0x91,0xA0,0xA0,0x91,0x8E,0x80,
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x80,0x80,0x80,0xBF,0x80,0x80,0x80,0x80,
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x80,0x9C,0xA2,0xA1,0xA1,0xA2,0x9C,0x80,
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x80,0x80,0xB1,0xA2,0xA2,0x91,0x8F,0x80,
};// 带下划线的0--9//

uchar code set[34][16]={
0x40,0x41,0xCE,0x04,0x00,0x80,0x40,0xBE,0x82,0x82,0x82,0xBE,0xC0,0x40,0x40,0x00,
0x00,0x00,0x7F,0x20,0x90,0x80,0x40,0x43,0x2C,0x10,0x10,0x2C,0x43,0xC0,0x40,0x00,//设
0x00,0x20,0x2F,0xA9,0xA9,0xAF,0xE9,0xB9,0xA9,0xAF,0xA9,0xA9,0x2F,0x20,0x00,0x00,
0x80,0x80,0x80,0xFF,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xFF,0x80,0x80,0x80,0x00,//置
0x00,0xFC,0x44,0x44,0x44,0xFC,0x10,0x90,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x00,
0x00,0x07,0x04,0x04,0x04,0x07,0x00,0x00,0x03,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,//时
0x00,0xF8,0x01,0x06,0x00,0xF0,0x92,0x92,0x92,0x92,0xF2,0x02,0x02,0xFE,0x00,0x00,
0x00,0xFF,0x00,0x00,0x00,0x07,0x04,0x04,0x04,0x04,0x07,0x40,0x80,0x7F,0x00,0x00,//间
0x00,0x00,0x00,0xBE,0x2A,0x2A,0x2A,0xEA,0x2A,0x2A,0x2A,0x2A,0x3E,0x00,0x00,0x00,
0x00,0x48,0x46,0x41,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x49,0x49,0x41,0x40,0x00,//星
0x00,0x04,0xFF,0x54,0x54,0x54,0xFF,0x04,0x00,0xFE,0x22,0x22,0x22,0xFE,0x00,0x00,
0x42,0x22,0x1B,0x02,0x02,0x0A,0x33,0x62,0x18,0x07,0x02,0x22,0x42,0x3F,0x00,0x00,//期
0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0x80,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//一
0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x06,0x04,0x00,0x00,0x00,
0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x18,0x10,0x00,//二
0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x04,0x00,0x00,
0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,//三
0x00,0xFE,0x02,0x02,0x02,0xFE,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0xFE,0x00,0x00,
0x00,0x7F,0x28,0x24,0x23,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x22,0x7F,0x00,0x00,//四
0x00,0x02,0x82,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0xC2,0x82,0x02,0x00,0x00,0x00,
0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x30,0x20,0x00,//五
0x10,0x10,0x10,0x10,0x10,0x91,0x12,0x1E,0x94,0x10,0x10,0x10,0x10,0x10,0x10,0x00,
0x00,0x40,0x20,0x10,0x0C,0x03,0x01,0x00,0x00,0x01,0x02,0x0C,0x78,0x30,0x00,0x00,//六
0x00,0x00,0x00,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0xFE,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x3F,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x00,//日
0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T
0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H
0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L
0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,//?
0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,//+
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//-							   ∴
0x08,0x14,0xC8,0x20,0x10,0x10,0x30,0x00,0x00,0x00,0x07,0x08,0x10,0x10,0x18,0x08,//℃
0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//:
};
uchar code flag_HL[3][16]={
0x00,0x10,0x18,0xFC,0x18,0x10,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,//上
0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x04,0x0C,0x1F,0x0C,0x04,0x00,0x00,//下
0x00,0x00,0x00,0x00,0xC0,0x80,0x00,0x00,0x01,0x01,0x01,0x01,0x07,0x03,0x01,0x00,//左 
};

uchar code NO[3][16]={
0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,
0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,
};

uchar code temperw[19][16]={
0x10,0x21,0x86,0x70,0x00,0x7E,0x4A,0x4A,0x4A,0x4A,0x4A,0x7E,0x00,0x00,0x00,0x00,
0x02,0xFE,0x01,0x40,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x40,0x00,//温
0x00,0x00,0xFC,0x04,0x24,0x24,0xFC,0xA5,0xA6,0xA4,0xFC,0x24,0x24,0x24,0x04,0x00,
0x80,0x60,0x1F,0x80,0x80,0x42,0x46,0x2A,0x12,0x12,0x2A,0x26,0x42,0xC0,0x40,0x00,//度
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,
0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x60,0x40,0x00,//上
0x00,0x02,0x02,0x02,0x02,0x02,0x02,0xFE,0x22,0x62,0xC2,0x82,0x02,0x03,0x02,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,//下
0xFE,0x02,0x32,0x4E,0x82,0x00,0xFE,0x4A,0xCA,0x4A,0x4A,0x4A,0x7E,0x00,0x00,0x00,
0xFF,0x00,0x02,0x04,0x03,0x00,0xFF,0x40,0x20,0x03,0x0C,0x12,0x21,0x60,0x20,0x00,//限
0x44,0xF4,0x4F,0xE4,0x44,0x64,0x90,0x98,0x94,0x93,0x14,0x98,0x08,0xD0,0x10,0x00,
0x04,0x04,0x04,0xFF,0x02,0x02,0xFF,0x4A,0x8A,0x7F,0x00,0x3F,0x80,0xFF,0x00,0x00,//输
0x00,0x00,0x00,0x00,0x01,0x83,0x76,0x18,0x60,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
0x40,0x20,0x10,0x08,0x06,0x01,0x00,0x00,0x00,0x00,0x03,0x04,0x18,0x30,0x10,0x00,//入
0x00,0x7E,0x22,0xE2,0x3E,0x20,0x10,0x08,0x0F,0xB4,0x44,0xA4,0x9C,0x04,0x00,0x00,
0x20,0x3F,0x20,0x1F,0x11,0x11,0x02,0x7F,0x23,0x22,0x22,0x22,0x7E,0x03,0x01,0x00,//路
0x10,0x92,0x54,0x38,0xFF,0x38,0x54,0x52,0x80,0xF0,0x1F,0x12,0x10,0xF0,0x10,0x00,
0x42,0x42,0x2A,0x2E,0x13,0x1A,0x26,0x02,0x40,0x20,0x13,0x0C,0x33,0x60,0x20,0x00,//数
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,//_
};

uchar code alarmw[][16]={
/*--  文字:  无  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x40,0x42,0x42,0x42,0x42,0x42,0xFE,0xC2,0x42,0x42,0x42,0x42,0x42,0x40,0x00,
0x40,0x40,0x20,0x10,0x08,0x04,0x03,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x70,0x00,

/*--  文字:  记  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x40,0x41,0x4E,0xC4,0x00,0x00,0x00,0xC2,0x42,0x42,0x42,0x42,0x42,0x7E,0x00,0x00,
0x00,0x00,0x00,0x7F,0x20,0x10,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x78,0x20,0x00,

/*--  文字:  录  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x20,0x20,0x22,0xAA,0x2A,0x2A,0x2A,0xEA,0x2A,0x2A,0xAA,0xFE,0x20,0x20,0x20,0x00,
0x00,0x10,0x30,0x10,0x09,0x4A,0x84,0x7F,0x02,0x05,0x08,0x18,0x30,0x10,0x00,0x00,
/*--  文字:  !  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,
};







void delay(void)//延时函数
{unsigned char k=0x0f;unsigned char l=0x0f;
while(l>0)
{l--;while(k>0)k--;
}
}

void delay1(void)//延时函数
{unsigned char k=0xff;unsigned char l=0xff;
while(l>0)
{l--;while(k>0)k--;
}
k=0xff;	 l=0xff;
while(l>0)
{l--;while(k>0)k--;
}
}

void lcdwrite_cmd(unsigned char cmd)
{D_I=0;R_W=0;delay();P0=cmd;E=0;delay();E=1;delay();E=0;delay();}
void lcdwrite_dat(unsigned char dat)
{D_I=1;R_W=0;delay();P0=dat;E=0;delay();E=1;delay();E=0;delay();}
void lcddispon(void)
{delay();CS1=0;CS2=1;lcdwrite_cmd(0x3f);
delay();CS1=1;CS2=0;lcdwrite_cmd(0x3f);}
 void lcdclrall(void)    // 清屏 全
{unsigned char i,j;
for(i=0;i<8;i++)
{CS1=0;CS2=1;lcdwrite_cmd(0xb8+i);lcdwrite_cmd(0x40);for(j=64;j>0;j--)lcdwrite_dat(0x00);
 CS1=1;CS2=0;lcdwrite_cmd(0xb8+i);lcdwrite_cmd(0x40);for(j=64;j>0;j--)lcdwrite_dat(0x00);
}}
 void lcdclrlift(void)  // 清屏  左
{uchar i,j;
for(i=0;i<8;i++)
{CS1=0;CS2=1;lcdwrite_cmd(0xb8+i);lcdwrite_cmd(0x40);for(j=64;j>0;j--)lcdwrite_dat(0x00);
}}
 void lcdclrright(void)    // 清屏  右
{uchar i,j;
for(i=0;i<8;i++)
{CS1=1;CS2=0;lcdwrite_cmd(0xb8+i);lcdwrite_cmd(0x40);for(j=64;j>0;j--)lcdwrite_dat(0x00);
}}

void lcdinit(void)
{
CS1=0;CS2=1;lcdwrite_cmd(0xc0);//从0行开始显示
 CS1=1;CS2=0;lcdwrite_cmd(0xc0);
}


void display(uchar *p)

{uchar i;uchar ch;
for(i=0;i<8;i++)
{ch=*p;p++;lcdwrite_dat(ch);}
}

//*************************************************18b20程序***************************************************//
void delay750ms()
 {
  uchar i,j,k;
  for(i=0;i<6;i++){ 
    for(j=0;j<250;j++){
	  for(k=0;k<250;k++);
  }}}

void delay100ms()
 {
  uchar i,j,k;
   for(i=0;i<8;i++){
    for(j=0;j<25;j++){
	  for(k=0;k<250;k++);
  }}}
void delay15us()
 {
  uchar i;
  for(i=0;i<8;i++){};
  }
  
void delay60us()
{
  uchar i;
  for(i=0;i<30;i++){};
 }	  



 void reset()    //复位//
 {
   uchar  i;
   dq=1;
   dq=0;
   for(i=0;i<9;i++)
   delay60us();
   dq=1;
   while(dq){};
   for(i=0;i<8;i++)
   delay60us();
  }

void write0()
{
 dq=1;
 dq=0;
 delay60us();
 dq=1;
}

void write1()
{
 dq=1;
 dq=0;
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 dq=1;
_nop_();
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 delay15us();
 delay15us();
 delay15us();
}

bit read()
{
 bit b;
 dq=1;
 dq=0;
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 dq=1;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  b=dq;
 delay15us();
 delay15us();
 delay15us();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
 return(b);
 }
 
void writeB(uchar byte)
{
 uchar i;
 for(i=0;i<8;i++)
 {
   if(byte&0x01)
     write1();
   else
     write0();
   byte=byte>>1;
  }
 }
 
uchar readB()
{ 
 uchar i,j;
 bit b;
 j=0;
 for(i=0;i<8;i++)
  {
   b=read();
   if(b)
   j+=1;
   j=_cror_(j,1);
  }
 return j;
}

                     
void searchROM()     //search ROM 
 {               
  uchar i,k=0,h;
  char j;
  bit m,n;
   
  for(counter1=0;counter1<3;counter1++ )
  {	
    reset();
    writeB(0xf0);
    for(j=7;j>=0;j--)
    {	 
     for(i=8;i>0;i--)
      {
       m=read();
       n=read();
       if(m!=n)
        { 
         ROMnumber[counter1][j]=ROMnumber[counter1][j]>>1;
         if(m){ROMnumber[counter1][j]=ROMnumber[counter1][j]|0x80;write1();}
         else write0();
         }
       else 
        { 	
          ROMnumber[counter1][j]=ROMnumber[counter1][j]>>1;
          if (k==0){write1();ROMnumber[counter1][j]=ROMnumber[counter1][j]|0x80;}
          else if(k==1)write0();
          else if(k==2)write0();
          else if(k==3){if(h==1)write0();else {write1();ROMnumber[counter1][j]=ROMnumber[counter1][j]|0x80;}}
          else if(k==4){write1();ROMnumber[counter1][j]=ROMnumber[counter1][j]|0x80;}
          k++;
         } 
       } 
     } 
     if(counter1==0)h=k;
    }
  
  }

 void martchROM(uchar i)
 {
  char j;
  writeB(0x55);

  for( j=7;j>=0;j--)
  writeB(ROMnumber[i][j]); 
 }
  
  
void  init()//初始化//
{ 
  uchar i;
for(i=0;i<3;i++)
  {  reset();
  martchROM(i);
  //writeB(0xcc);
  writeB(0x4e);
  writeB(THL[0][i]);
  writeB(THL[1][i]);
  writeB(0x7f);
  writeB(0x48);
  }
}

  void gettemper(uchar i)  //读取温度//
  {	key_clk=0;
    reset();
    martchROM(i);
	//writeB(0xcc);
    writeB(0x44);
    delay750ms();
    reset();
    martchROM(i);

⌨️ 快捷键说明

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