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

📄 shujucaiji.txt

📁 此程序可以对多路(最多可以达到8路)数据进行采集
💻 TXT
字号:
#include <AT89X51.H>
#include <intrins.h>
#include <18b20.h>
#define Ddata P0
sbit DQ=P2^0;
sbit bj=P1^0;
sbit RS=P2^5;
sbit RW=P2^6;
sbit LCDE=P2^7;
sbit key1=P2^2;
sbit key2=P2^1;  
float volt=0;
unsigned char line1[16]={"A0.00B0.00 C0.00"};
unsigned char line2[16]={"D0.00E0.00 F0.00"};
unsigned char code zhimu[]={'N','o','w','D','i','a','n','y','A','B','C','D','E','0','.',' ','M','m','r','y','1','2'};
unsigned char code xshi[]={'N','o','w','e','n','d','u','k',' ',':','.'};unsigned char tab[]={'0','1','2','3','4','5','6','7','8','9'}; 
unsigned char code dotcode[32]={0,3,6,9,12,16,19,22,   //定义小数部分数组
                           25,28,31,34,38,41,44,48,
                           50,53,56,59,63,66,69,72,
                           75,78,81,84,88,91,94,97};

//1PIN--GND  2PIN--VCC  3PIN--VO  4PIN--RS  5PIN--RW  6PIN--E  7-14PIN--DB0-DB7  15PIN--A  16PIN--K
unsigned char displaybuf[5]={16,16,16,16,16};
unsigned char outcode=0,baocun=0;
unsigned char timecount=0;
unsigned char baiwei=0,shiwei=0,gewei=0,moshi=0,time=0;
unsigned int  voltcode=0;
sbit START=P1^1;sbit EOC=P2^4;sbit OE=P2^3;sbit A=P1^2;sbit BB=P1^3;sbit C=P1^4;
unsigned int  cunchu[4]={0};
unsigned int baocun1[4]={0}; 
unsigned int baocun2[4]={0};
//unsigned int baocun3[4]={0};         
unsigned char readdata[2];
unsigned int sec=0;
bit sflag;

 void delay1()
{unsigned char m,n;
for(m=255;m>0;m--)
for(n=255;n>0;n--);}

void delay(unsigned int useconds)
{
for(;useconds>0;useconds--);
}
void delay5ms()
{unsigned  int i;
for (i=0;i<1000;i++);
}

void delay50us()
{register int i;
for (i=0;i<20;i++);
}
wr_com(unsigned char comm)//********写控制字符程序 E=1 RS=0 RW=0**********//
{                         
		LCDE=0;
		RS=0;             //********RS寄存器选择输入端,当RS=0;当进行写模块操作,指向指令寄存器。
		RW=0;             //********当RS=1,无论是读操作还是写操作,都是指向数据寄存器。
		LCDE=1;
		Ddata=comm;
		RS=0;
		RW=0;
		LCDE=0;
}

wr_data(unsigned char dat)//*****当前位置写字符子程序:E=1 RS=1 RW=0
{
		LCDE=0;
		RS=0;             //********RS寄存器选择输入端,当RS=0;当进行写模块操作,指向指令寄存器。
		RW=0;             //********当RS=1,无论是读操作还是写操作,都是指向数据寄存器。
		RS=1;
		RW=0;
		LCDE=1;
		Ddata=dat;
  		LCDE=0;
		RS=0;
		RW=0;
}


unsigned char busycheck()//*****忙状态检查*******//
{
		unsigned char i;
		LCDE=0;
		RS=0;
		RW=0;
		RS=0;
		RW=1;
		LCDE=1;
		i=Ddata;
  		LCDE=0;
		return(i);
}
	
void init()//**********初始化程序,必须按照产品的资料介绍的过程进行********//
{ 
	wr_com(0x38);   //*****显示模式设置必须三次,不用检测忙信号
	delay5ms();
	wr_com(0x38);
	delay5ms();
	wr_com(0x38);
	delay5ms();
	wr_com(0x01);   ///***清屏****
	delay5ms();
	busycheck();
	delay5ms();
	wr_com(0x06);   ///****光标移动设置***
	delay5ms();
	busycheck();
	delay50us();
	wr_com(0x38);   ////***显示模式设置****
	delay50us();
	busycheck();
	delay50us();
	wr_com(0x0c);   /////***显示开***
	delay50us();
	busycheck();
	delay50us();
	wr_com(0x40);		//set cgram address
	delay50us();
	                 //***这些延时可用可不用***//
}


void display()
{		unsigned char i;
		wr_com(0x80);		//set ram address
		delay50us();
		busycheck();
		delay50us();
		for(i=0;i<16;i++)
       {wr_data(line1[i]);	//display 
		delay50us();
		busycheck();}
		busycheck();
		delay50us();
		wr_com(0xc0);
		delay50us();
		busycheck();
		delay50us();
		for(i=0;i<16;i++)
		{
			wr_data(line2[i]);		//display 
			delay50us();
			busycheck();
		}
}


//复位
unsigned char resetpulse(void)
{
unsigned char presence;
DQ = 0; 
delay(29); 
DQ = 1;
delay(3); 
presence = DQ; 
delay(25); 
return(presence); 
} 


unsigned char readdatafromds18b20(void)     //读一个字节
{
unsigned char i;
unsigned char value = 0;
for (i=8;i>0;i--)
{
value>>=1;
DQ = 0; 
DQ = 1;
delay(1); 
if(DQ)value|=0x80;
delay(6); 
}
return(value);
}


void writecommandtods18b20(char val)       //写一个字节
{
unsigned char i;
for (i=8; i>0; i--)
{
DQ = 0; 
DQ = val&0x01;
delay(5); 
DQ = 1;
val=val/2;
}
delay(5);
}

//读取温度
char Read_Temperature(void)
{
union{
unsigned char c[2];
int x;
}temp;


resetpulse();
writecommandtods18b20(0xCC); 
writecommandtods18b20(0x44); 
resetpulse();
writecommandtods18b20(0xCC); 
writecommandtods18b20(0xBE); 
temp.c[1]=readdatafromds18b20();
temp.c[0]=readdatafromds18b20();
delay(100);
return temp.x/2;
}

main()
{ unsigned char m=0,n=0,minite=0,hour=12,near=8,week=6,tt=0;
  unsigned int dajia[4]={0};
  
  TMOD=0x01;
  TH0=(65536-4000)/256;
  TL0=(65536-4000)%256;
  A=0;BB=0;C=0;
  bj=0;
  ET0=1;
  EA=1;
  while(resetpulse());
  writecommandtods18b20(0xcc);
  writecommandtods18b20(0x44);
  TR0=1;
  init();
  while(1)
    {  	 if(time==10)
	  { if(moshi==0)	   
      {for(m=0;m<4;m++) 
      {START=0; START=1;START=0; delay50us(); //启动转换
	  while(EOC==0)	;  //等待转换结束
	  OE=1; 
     outcode=P3;volt=(outcode/255.0)*5.0;
	voltcode=(int)(volt*100);cunchu[m]=voltcode;OE=0;n++;
	 if(n==1) {A=1;BB=0;C=0;}
	 if(n==2) {A=0;BB=1;C=0;}
 	 if(n==3) {A=1;BB=1;C=0;} 
	/*if(n==4) { A=0;BB=0;C=1;} 
	if(n==5) { A=1;BB=0;C=1;}
	if(n==6) { A=0;BB=1;C=1;}
	if(n==7) { A=1;BB=1;C=1;}*/	}	 
	if(n==4) {n=0; A=0;BB=0;C=0;}
	dajia[0]=cunchu[0];	dajia[1]=cunchu[1];
	dajia[2]=cunchu[2];	dajia[3]=cunchu[3];
 	  
	 if(baocun==0)
	 {line1[0]=zhimu[0];line1[1]=zhimu[1];line1[2]=zhimu[2];
	  line1[3]=zhimu[15];line1[4]=zhimu[3];line1[5]=zhimu[4];
	  line1[6]=zhimu[5];line1[7]=zhimu[6];line1[8]=zhimu[7];
	  line1[9]=zhimu[5];line1[10]=zhimu[15];}
	 if(baocun==1) {baocun1[0]=cunchu[0];baocun1[1]=cunchu[1];
	               baocun1[2]=cunchu[2];baocun1[3]=cunchu[3];}
	 if(baocun==2) {baocun2[0]=cunchu[0];baocun2[1]=cunchu[1];
	               baocun2[2]=cunchu[2];baocun2[3]=cunchu[3];}
    	if(baocun==3)
	 { dajia[0]=baocun1[0];dajia[1]=baocun1[1];
	   dajia[2]=baocun1[2];dajia[3]=baocun1[3];
	  line1[0]=zhimu[16];line1[1]=zhimu[1];line1[2]=zhimu[17];
	  line1[3]=zhimu[1];line1[4]=zhimu[18];line1[5]=zhimu[19];
	  line1[6]=zhimu[15];line1[7]=zhimu[20];line1[8]=zhimu[15];
	  line1[9]=zhimu[15];line1[10]=zhimu[15];}
    if(baocun==4)
	 { dajia[0]=baocun2[0];dajia[1]=baocun2[1];
	   dajia[2]=baocun2[2];dajia[3]=baocun2[3];
	  line1[0]=zhimu[16];line1[1]=zhimu[1];line1[2]=zhimu[17];
	  line1[3]=zhimu[1];line1[4]=zhimu[18];line1[5]=zhimu[19];
	  line1[6]=zhimu[15];line1[7]=zhimu[21];line1[8]=zhimu[15];
	  line1[9]=zhimu[15];line1[10]=zhimu[15];}
	if(key2==0) {delay1();delay1();if(key2==0) {baocun++;
	if(baocun==5) {baocun=0;}}}	
		           
	  line1[13]=zhimu[14];line2[0]=zhimu[9];line2[5]=zhimu[10];
	  line2[2]=zhimu[14];line2[7]=zhimu[14];line2[10]=zhimu[15];
	  line2[11]=zhimu[11];line2[13]=zhimu[14];line1[11]=zhimu[8];
	  baiwei=dajia[0]/100;
      shiwei=dajia[0]%100/10;	 
      gewei=dajia[0]%10; 
      line1[15]=tab[gewei];line1[14]=tab[shiwei];
      line1[12]=tab[baiwei] ;display();
     	 
	  baiwei=dajia[1]/100;
      shiwei=dajia[1]%100/10;
      gewei=dajia[1]%10; 
      line2[4]=tab[gewei];line2[3]=tab[shiwei];
      line2[1]=tab[baiwei];display();
     
	  baiwei=dajia[2]/100;
      shiwei=dajia[2]%100/10;
      gewei=dajia[2]%10; 
      line2[9]=tab[gewei];line2[8]=tab[shiwei];
      line2[6]=tab[baiwei] ;display();
  
	  baiwei=dajia[3]/100;
      shiwei=dajia[3]%100/10;
      gewei=dajia[3]%10; 
      line2[15]=tab[gewei];line2[14]=tab[shiwei];
      line2[12]=tab[baiwei] ;display(); }
   
	 /* baiwei=cunchu[4]/100;
      shiwei=cunchu[4]%100/10;
      gewei=cunchu[4]%10; 
      line2[9]=tab[gewei];line2[8]=tab[shiwei];
      line2[6]=tab[baiwei];display(); */
     
  	  if(dajia[0]>=500|dajia[1]>=500|dajia[2]>=500|dajia[3]>=500)
	  {bj=1;delay1();delay1();delay1();}
        else {bj=0;} 
  if(cunchu[0]>=500) { line1[15]=zhimu[15];line1[14]=zhimu[15];
                        line1[12]=zhimu[15] ;display(); }
  if(cunchu[1]>=500) { line2[4]=zhimu[15];line2[3]=zhimu[15];
                      line2[1]=zhimu[15] ;display(); }
  if(cunchu[2]>=500) { line2[9]=zhimu[15];line2[8]=zhimu[15];
                      line2[6]=zhimu[15] ;display(); }
  if(cunchu[3]>=500) { line2[15]=zhimu[15];line2[14]=zhimu[15];
                       line2[12]=zhimu[15] ;display(); } 
	 	if(sec==60) {sec=0;minite++;}
		if(minite==60) {minite=0;hour++;}
	    if(hour==25) {hour=0;week++;}
	    if(week==8) {week=1;}  
	 
	      if (moshi==1) 
	 { line1[0]=tab[near/10];line1[1]=tab[near%10];line1[2]=xshi[2];
	   line1[3]=xshi[3];line1[4]=xshi[3];line1[5]=xshi[7];
	   line1[6]=xshi[week%10];line1[7]=xshi[8];line1[8]=tab[hour/10];
	   line1[9]=tab[hour%10];line1[10]=xshi[9];line1[11]=tab[minite/10];
	   line1[12]=tab[minite%10];line1[13]=xshi[9];line1[14]=tab[sec/10];
	   line1[15]=tab[sec%10];display();
	   line2[0]=xshi[0]; line2[1]=xshi[1]; line2[2]=xshi[2];
	   line2[3]=xshi[8];line2[4]=xshi[2]; line2[5]=xshi[3];
	   line2[6]=xshi[4];line2[7]=xshi[5];line2[8]=xshi[6];line2[9]=xshi[8];   
	   line2[15]=tab[displaybuf[0]];line2[14]=tab[displaybuf[1]];
       line2[12]=tab[displaybuf[2]];line2[11]=tab[displaybuf[3]];
	   line2[10]=tab[displaybuf[4]];line2[13]=xshi[10];display();}
	   if(key1==0) {delay1();delay1();if(key1==0){moshi++;
		if(moshi==2) {moshi=0;}}}
		}}}

void t0(void) interrupt 1 using 0
{ unsigned char x; 
  unsigned int result;
  TH0=(65536-4000)/256;
  TL0=(65536-4000)%256;
  timecount++;time++ ;
  if(time==12) {time=0;}
  if(timecount==250) {timecount=0;sec++;}   
  if(timecount==150)
  { 
     while(resetpulse());
      writecommandtods18b20(0xcc);
      writecommandtods18b20(0xbe);
      readdata[0]=readdatafromds18b20();
      readdata[1]=readdatafromds18b20();
      sflag=0;
      if((readdata[1] & 0xf8)!=0x00)
        { sflag=1;
          readdata[1]=~readdata[1];
          readdata[0]=~readdata[0];
          result=readdata[0]+1;
          readdata[0]=result;
          if(result>255){readdata[1]++;}
        }  
      readdata[1]=readdata[1]<<4;
      readdata[1]=readdata[1] & 0x70;
      x=readdata[0];
      x=x>>4;
      x=x & 0x0f;
      readdata[1]=readdata[1] | x;
      x=2;
      result=readdata[1];
	  
         while(result/10)
        { displaybuf[x]=result%10;
          result=result/10;
          x++;}
     displaybuf[x]=result;
     x=readdata[0] & 0x0f;
     x=x<<1;
	 displaybuf[0]=(dotcode[x])%10;//显示小数部分低.高位
     displaybuf[1]=(dotcode[x])/10;
     while(resetpulse());
     writecommandtods18b20(0xcc);
     writecommandtods18b20(0x44);}}	  	   






⌨️ 快捷键说明

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