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

📄 guding.c

📁 程序功能: 用温度传感器DS18B20读取外界温度,然后用单片机读取传感器里面的两个装 有温度值的寄存器温度.最后用单片机处理,将数值显示在数码管上.
💻 C
字号:
/*======缩写说明=========
PB---判别
SF---是否
ZL---指令
SJ---数据
QD---确定
WZ---位置	
========================*/
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int

void Delay5Ms(void);

sbit 	RS = P1^0;            // P10口接4脚,1-数据寄存器,0-指令寄存器
sbit 	RW = P1^1;            // P11口接5脚,1-读操作,0-写操作
sbit 	E  = P1^2;            // P12口接6脚,使能


extern uchar m,n,k,l;
void ReadTemperature(); 

uchar lcd_show_date[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};


/*=========================
  读忙子程序 RS=0 RW=1 E=1
  =========================*/
 bit  PB_busy(void)
{  
 uchar temp ;
 bit  busy=1;
 RS=0;
 RW=1;
 E=1;	
 while(busy)
	{
		E = 0 ;
		temp = P2 ;
		E = 1 ;                  	//读忙
		temp = temp & 0x80;
		if(temp)    busy=1;         //当检测到忙,则一直检测,程序进入循环
          	else    busy=0;         //等待不忙
	}
    return busy;                 	//返回忙标志,可能有用
	   
}


 /*==========================
 写指令子程序 RS=0 RW=0 E=1
 ============================*/
void  Write_ZL(uchar ZL)
{   
 if(  !PB_busy()  )             	//判断不忙则写指令
	{ 
		RS=0; RW=0;
		P2 = ZL ;
		E=1;
		E=0;
	}

}


/*==========================
 写单个数据 RS=1 RW=0 E=1
============================*/
void  Write_SJ(uchar SJ)
{   
 if(  !PB_busy()  ) 
	{ 
		RS=1; RW=0;
		P2 = SJ ;
		E = 1 ;
		E = 0 ;
	}
}


/*===============================
确定字符位置字程序 x---列  y---行
================================*/
void QD_WZ(uchar x,uchar y)
{
	uchar address;
	if(y==0)  address = 0x80 + x ;		//x,y都从0计起
	else      address = 0xc0 + x ;
	Write_ZL(address);
}


/*==========================================
初试化:
===========================================*/
void Reset(void)
{   
 uchar n;
 for(n=0;n<3;n++)               	//3次,不检测忙信号(故未直接用函数)
	{
		RS=0;RW=0;E=1;
		P2=0x38;                  	//八位总线,双行显示,显示5X10的点阵字符
		E=1;E=0;
		Delay5Ms();
	};
 Write_ZL(0x38); 			  		//需要检测忙信号
 Write_ZL(0x0e);
 Write_ZL(0x0d);               		//关显示
 Write_ZL(0x01); 
 Delay5Ms();
 Write_ZL(0x06);				 	//光标设置,光标右移,文字不移动
 Delay5Ms();
 Write_ZL(0x0c);				  	//开显示,设置光标
    								/*未用到指令5*/	
}


// 短延时
void Delay5Ms(void)
{
	uint c=5552;
	while(c--);
}



void main(void)
{	
    Reset();
	while(1)
		{
		 ReadTemperature(); 
		 Delay5Ms();
		 QD_WZ(1,0);
		 Write_SJ(lcd_show_date[m]);
		 QD_WZ(2,0);
		 Write_SJ(lcd_show_date[n]);
		 QD_WZ(3,0);
		 Write_SJ(0x2e);
		 QD_WZ(4,0);
		 Write_SJ(lcd_show_date[k]);
		 QD_WZ(5,0);
		 Write_SJ(lcd_show_date[l]);
		}
 

}

⌨️ 快捷键说明

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