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

📄 text1.c

📁 51写的18B20加1602的程序!!共同学习!
💻 C
字号:
#include<reg52.h>                ///////////////////////////////
          
#define	uchar unsigned char      ///////////////////////////////
#define	uint  unsigned int
         /// 1	 2	 3	 4	 5	 6   7   8	 9  10  11  12  13  14  15  16
char d[32]={' ','K','a','o',' ','Y','a','n',' ','X','i','a','n','g',' ',' ',

		////17   18  19  20  21   22  23  24  25  26  27  28   29   30  31  32
            'T','1',0x3d,' ',' ',0xdf,'C',' ',' ','T','2',0x3d,' ',' ',0xdf,'C'};

char s[10]={'0','1','2','3','4','5','6','7','8','9'};                   
char q[10]={'0','1','2','3','4','5','6','7','8','9'}; 
#define	 data_IO P2
sbit    rs=P3^7;//指令和数据寄存器 “1是数据,” “0是指令”
sbit	rw=P3^6;//读写控制,“1读” “0写”
sbit	 e=P3^5; //片选信号

sbit   laotie=P3^4;///加热控制的端口
sbit   baojing=P1^0 ; ///响音乐的端口
sbit   qing=P1^1 ; ///清除报警键
sbit   jian=P1^2 ; ///温度减
sbit    jia=P1^3 ; ///温度加
sbit    DQ=P1^4;

void delay(uint n)  ////////////////延时///////// 
 {
  uint i;
  for(i=0;i<n;i++);
 }
 /////////////////////复位函数/////////////////////////
 uchar reset(void)
 {uchar ready,j;
  DQ=0;
  delay(100); //480~960
  DQ=1;
  for(j=0;j<6;j++); /*delay(3); *///15~60
  ready=DQ;
  delay(80);
  return(ready);
 }
 ///////////////////读(传字节)///////////////////////
 uchar read_bit(void) 
{
 uchar i;
 DQ=0;
 for(i=0;i<2;i++);
 DQ=1;
 return(DQ);
}
//////////////////读数据////////////////////
 uchar read_byte(void)
 {
   uchar i,m=1,shuju=0;
   for(i=0;i<8;i++)
   {
    if(read_bit()) {shuju=shuju+(m<<i);}
    delay(2);
    }
   return(shuju);
 }

 //////////////////传字节////////////////////////////
 void chuan_bit(uchar i)
 {
  DQ=0;
  if(i==1) DQ=1;
  delay(6);
  DQ=1;
 }
 /////////////////////写数据//////////////////////////////
 void write(uchar xie)
 {
   uchar i,shuju ;
   for(i=0;i<8;i++)
   {
    shuju=xie>>i;
    shuju=shuju&0x01;
    chuan_bit(shuju);
    delay(2);
   }
 }
///////////////*写指令*///////////////////////
void xiezl(uint shuju) 
{ 
 delay(1000) ;
 data_IO=shuju;
 rs=0; //写指令       
 rw=0; //表示写状态    
 e=1;  //下降延//    
 e=0;  ///////// 
}
//////////////////写数据//////////////////////////
void w_dat(uint n)
{
 delay(1000) ;
  data_IO=n;
   rs=1; //写数据     
   rw=0; //表示写状态   
   e=1;  //下降延//      
   e=0;  /////////       
  return;
}
//////////////////显示函数//////////////////////////
void xianshi(uchar n) 
{
  uchar j,i;
  xiezl(0x80); // DDRAM地址的设置          
 for(j=0;j<n-16;j++)                        
   {w_dat(d[j]);  ///n表示有写几位数据        
    delay(100) ;                               
   }                                          
  xiezl(0xc0);//换行                          
 for(i=(n-16);i<n;i++)                          
   {w_dat(d[i]);  ///n表示有写几位数据          
    delay(100) ;
   }  
}
///////////////////*液晶模块初始化*//////////////
void chushihua(void)
 { uchar i;
   rs=0; //写指令
   rw=0; //表示写状态
   e=0;  //使能
  for(i=0;i<3;i++)
   {  
    xiezl(0x38);  //功能设置,8位,一行显示,5*7点阵
    delay(1000) ;
   }    
    xiezl(0x38); //两行显示
    xiezl(0x0f); //显示开关控制位
    xiezl(0x18); //移位控制,光标和显示一起左移
    xiezl(0x06); //设置输入模式
    xiezl(0x01); //清屏显示
    xiezl(0x80); // DDRAM地址的设置
 }

 void main(void)
 { 
  uchar fuhaowei,wenduzhi,z,x,a,b,i=3,j=2;////////////////温度值
  chushihua();/////////液晶初始化
  while(1)
  {	
    reset();
   write(0xcc); ///发出跳过ROM的命令////  
   write(0X44);/////////开始转换温度/////
    reset();
   write(0xcc); 
   write(0xbe); ///////////读温度值////
    wenduzhi= read_byte(); //////////读低八位温度值//
    fuhaowei=read_byte(); //////////读高八位温度值//
    wenduzhi=((fuhaowei&0x07)<<4)|(wenduzhi>>4);
    z=wenduzhi/10;////////十位上的数//
    x=wenduzhi%10;////////个位上的数////
	 
    d[19]=s[z];d[20]=s[x]; //实际温度   
	
    xianshi(32);//显示函数
 
  }
}

⌨️ 快捷键说明

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