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

📄 key_disp.c

📁 MCU51-JZ01单片机开发板实验例程
💻 C
📖 第 1 页 / 共 2 页
字号:
		             tmp1();						     // 读取温度
				     Temp = ((Temph&0x0F)<<4)|((Templ&0xF0)>>4);

                     UartSent(Temp/10);                  // 把接收到的十位上的数据发送到串口 
                     UartSent(Temp%10);                  // 把接收到的个位上的数据发送到串口
                     UartSent(Offset);                   // 把接收到的数据发送到串口 

                     write7279(DECODE1+1,Temp/10);// 在第2位显示键码高8位
                     write7279(DECODE1,Temp%10);  // 在第1位显示键码低8位
                 }
                 else 
  		         {
                      write7279(DECODE1+1,0x0F);         // 在第2位显示键码高8位
                      write7279(DECODE1,0x0F);           // 在第1位显示键码低8位
			     }
                 // 第二个通道输入
                 if(ReadRom2() == 0x28)                  // 检测DS18B20存在
                 {	             
                      UartSent(0x29);                    // 发送DS18B20家族码
		              tmp2change();						 // 开始温度转换
	                  delay1ms(250);					 // 读取延时
		              tmp2();						     // 读取温度
			          Temp = ((Temph&0x0F)<<4)|((Templ&0xF0)>>4);

                      UartSent(Temp/10);                  // 把接收到的十位上的数据发送到串口 
                      UartSent(Temp%10);                  // 把接收到的个位上的数据发送到串口
                      UartSent(Offset);                   // 把接收到的数据发送到串口
 
                      write7279(DECODE1+1,Temp/10);      // 在第2位显示键码高8位
                      write7279(DECODE1,Temp%10);        // 在第1位显示键码低8位
                 }
                 else                                    // 检测DS18B20不存在,显示0xFF
  	    	     {
                      write7279(DECODE1+1,0x0F);         // 在第2位显示键码高8位
                      write7279(DECODE1,0x0F);           // 在第1位显示键码低8位
	             }
                 if (!key)  break;

            }
 
            break;
            
       case 13:  
            send_byte(CMD_RESET);                    //清除显示 
            break;   

       default :
       //若出错,则显示"FF"
            write7279(DECODE1+1,0x0F);         // 在第2位显示键码高8位
            write7279(DECODE1,0x0F);           // 在第1位显示键码低8位

            break;
        
    }
 
}
void ini_uart(void)
{
    SCON = 0x50;                                //串口方式1,允许接受
    TMOD = 0x20;                                //定时器1,定时方式2
    TH1  = 0xfd;                                //11.0592Hz,Baud Rate 9600
    TL1  = 0xfd;
    TI   = 0;
    RI   = 0;
    TR1  = 1;                                   //启动定时器
}

//查询方式,向串口发送一个字符 
void UartSent(uchar byte)  
{
    SBUF=byte;
    while(TI==0);
    TI=0;
}

void tm1reset (void)								 // 发送复位和初始化
{
	unsigned int i;
	DQ1 = 0;	
	i = 103;
	while (i>0) i--;         						// 延时
	DQ1 = 1;	
	i = 4;	
	while (i>0) i--;	
}
void tm2reset (void)								 // 发送复位和初始化
{
	unsigned int i;
	DQ2 = 0;	
	i = 103;
	while (i>0) i--;         						// 延时
	DQ2 = 1;	
	i = 4;	
	while (i>0) i--;	
}
bit tmp1read (void)								// 读取数据的一位
{ 
	unsigned int i;
	bit dat;
	DQ1 = 0; i++;	
	DQ1 = 1; i++; i++;							//延时	
	dat = DQ1;	
	i = 8; while (i>0) i--;							// 延时
	return (dat);
}	
bit tmp2read (void)								// 读取数据的一位
{ 
	unsigned int i;
	bit dat;
	DQ2 = 0; i++;	
	DQ2 = 1; i++; i++;							//延时	
	dat = DQ2;	
	i = 8; while (i>0) i--;							// 延时
	return (dat);
}
unsigned char tmp1read2 (void) 			 			//读一个字节
{
	unsigned char i,j,dat;	
	dat = 0;	
	for (i=1;i<=8;i++)
	{
		j = tmp1read ();	
		dat = (j << 7) | (dat >> 1);	
	}
	return (dat);
}	
unsigned char tmp2read2 (void) 			 			//读一个字节
{
	unsigned char i,j,dat;	
	dat = 0;	
	for (i=1;i<=8;i++)
	{
		j = tmp2read ();	
		dat = (j << 7) | (dat >> 1);	
	}
	return (dat);
}
void tmp1write (unsigned char dat)					//写一个字节
{   
	unsigned int i;
	unsigned char j;
	bit testb;	
	for (j=1;j<=8;j++)
	{	
		testb = dat & 0x01;
		dat = dat >> 1;	
		if (testb)
		{	
			DQ1 = 0; 						// 写0 
			i++; i++;  
			DQ1 = 1;	
			i = 8; while (i>0) i--; 
		}
		else	
		{
			DQ1 = 0; 						// 写0 
			i = 8; while (i>0) i--; 
			DQ1 = 1;
			i++; i++;  
		}
	}
}
void tmp2write (unsigned char dat)					//写一个字节
{   
	unsigned int i;
	unsigned char j;
	bit testb;	
	for (j=1;j<=8;j++)
	{	
		testb = dat & 0x01;
		dat = dat >> 1;	
		if (testb)
		{	
			DQ2 = 0; 						// 写0 
			i++; i++;  
			DQ2 = 1;	
			i = 8; while (i>0) i--; 
		}
		else	
		{
			DQ2 = 0; 						// 写0 
			i = 8; while (i>0) i--; 
			DQ2 = 1;
			i++; i++;  
		}
	}
}

void tmp1change(void)						// ds1820 开始转换
{  
	tm1reset ();							// 复位
	
	delay1ms (1);							// 延时
	tmp1write (0xcc);						// 跳过序列号命令
	tmp1write (0x44); 						// 发转换命令 44H,	
}
void tmp2change(void)						// ds1820 开始转换
{  
	tm2reset ();							// 复位
	
	delay1ms (1);						    // 延时
	tmp2write (0xcc);						// 跳过序列号命令
	tmp2write (0x44); 						// 发转换命令 44H,	
}

void tmp1 (void)								// 读取温度
{ 

	unsigned int temp;
	unsigned char Tl,Th;
	tm1reset ();								// 复位
	delay1ms (1);								// 延时
	tmp1write (0xcc); 						// 跳过序列号命令
	tmp1write (0xbe); 						// 发送读取命令
	Tl = tmp1read2 ();					    // 读取低位温度	
	Th = tmp1read2 ();  					    // 读取高位温度	
    Temph = Th;
	if(flag)
	{
		Templ = ~Tl+1;					    // 如果为负温则去除其补码
		Temph = ~Th;
	}
	else	
	{
		Templ = Tl;
	    Temph = Th;
	}
	temp = Temph;
	Offset = (unsigned int)((Templ&0x0F)*0.625);

}
void tmp2 (void)								// 读取温度
{ 

	unsigned char Tl,Th;
	tm2reset ();								// 复位
	delay1ms (1);								// 延时
	tmp2write (0xcc); 						// 跳过序列号命令
	tmp2write (0xbe); 						// 发送读取命令
	Tl = tmp2read2 ();					    // 读取低位温度	
	Th = tmp2read2 ();  					    // 读取高位温度	
    Temph = Th;
	if(flag)
	{
		Templ = ~Tl+1;					    // 如果为负温则去除其补码
		Temph = ~Th;
	}
	else	
	{
		Templ = Tl;
	    Temph = Th;
	}
	Offset = (unsigned int)((Templ&0x0F)*0.625);

}
unsigned char ReadRom1()	            	    // 读取器件序列号子程序
{

	tm1reset ();								// 复位
	delay1ms (1);								// 延时
	tmp1write(0x33);							// 发送读序列号子程序
    Family_Code = tmp1read2 ();				    // 读取DS18B20家族码	
    return Family_Code;
    
} 
unsigned char ReadRom2()	            	    // 读取器件序列号子程序
{

	tm2reset ();								// 复位
	delay1ms (1);								// 延时
	tmp2write(0x33);							// 发送读序列号子程序
    Family_Code = tmp2read2 ();				    // 读取DS18B20家族码	
    return Family_Code;
    
}     
/*===========================================================================
                          End of files
===========================================================================*/

⌨️ 快捷键说明

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