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

📄 18b20.c

📁 18b20数字温度计设计
💻 C
字号:
#include<reg52.h>
#include<intrins.h>
#define unchar unsigned char
#define unint unsigned int;
unchar code table[]={0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xa3};
unchar buf[]={0,0,10,0};
sbit DQ=P3^2;
sbit rs=P2^0;
sbit rw=P2^1;
sbit en=P2^2;
sbit psb=P2^3;
sbit ret=P2^5;
unchar data0,com0,command; 
void lcd_int();
void lcd_gnset();
void clear_lcd();
void write_command(unchar com0);
void write_date(unchar date0);
void display();
void yingda();
void int18b20();
void wrone(unchar da);
readbyte();
chuli18b20();
void delay(unchar ms); 
void main()
{ 
 lcd_int();
 lcd_gnset();
 clear_lcd();
  while(1)
  {
    chuli18b20();
   	display();
  }
}
//lcd初始化
void lcd_int()
{ 
   ret=0;
   delay(10);
   ret=1;  
    _nop_();
   psb=1;//通信方式为串行
    _nop_();
	clear_lcd();

}
//lcd功能设置
void lcd_gnset()
{
   command=0x34;//扩展指令集
   write_command(command);
   command=0x30;//基本指令集
   write_command(command);
   command=0x01;//清屏 
   write_command(command);
   command=0x06;//地址计数器(AC)+1
   write_command(command);
   command=0x0c;//显示打开
   write_command(command);	 
}
//清屏程序
void clear_lcd()
{
 command=0x01;
 write_command(command);
 command=0x34;
 write_command(command);
 command=0x30;
 write_command(command);
}
//写命令
void write_command(unchar com0)
{ 
  delay(100);
  rs=0;
  rw=0;
  P0=com0;
  en=1;
   _nop_();
  _nop_();
  en=0;
}
//写数据
void write_date(unchar data0)
{
  delay(100);
  rs=1;
  rw=0;
  P0=data0;
   en=1;
   _nop_();
   _nop_();
  en=0;

}  
/*void display()
{
   command=com0; //	注意命令没写进去,要在后面用写命令指令!!!
   write_command(com0);
   date2=lcdbufl;
   date1=lcdbufh;
   write_date(date1);
   date1=date2;
   write_date(date2);
}  */
void display()
{
 write_command(0x82);
 write_date(0xbd);
 write_date(0xf1);
 write_date(0xcc);
 write_date(0xec);
 write_date(0xce);
 write_date(0xc2);
 write_date(0xb6);
 write_date(0xc8);
 write_date(0x89);
 write_date(0xca);
 write_date(0xc7);
 write_command(0x92);
 write_date(0xa3);
 write_date(table[buf[0]]);
 write_date(table[buf[1]]);
 write_date(table[buf[2]]);
 write_date(table[buf[3]]);
}
void int18b20()
{
 DQ=0;
 delay(600);
 DQ=1;
 delay(2);
}
void yingda()
{
 while(DQ);
 while(~DQ);
}
void wrone(unchar da)
{
   unchar i;
   for(i=0;i<8;i++)
   {
     DQ=0;
	 DQ=da&0x01;
	 delay(70);
	 DQ=1;
	 da=da<<1;
   }
}
readbyte()
{
   unchar i,j,m,f;
   for(i=0;i<8;i++)
   {
     DQ=0;
     m++;
	 DQ=1;
	 j=DQ;
	 delay(70);
	 f=j<<7&f>>1;
   }
   return(f);
}
chuli18b20()
{  
   unchar i,j;
   float x;
   int n,h;
  int18b20();
  yingda();
  wrone(0xcc);
  wrone(0x44);
  delay(10);
  int18b20();
  yingda();
  wrone(0xcc);
  wrone(0xbe);
  i=readbyte();
  j=readbyte();
  j<<8;
  j=j|i;
  x=j*0.0625;
  n=x;
  h=x*100;
  buf[0]=n/10;
  buf[1]=n%10;
  buf[2]=11;
  buf[3]=(h-j*100)/10;
}
void delay(unchar ms)
{
 while(--ms); 
 }			

⌨️ 快捷键说明

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