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

📄 main.c

📁 基于AT91SAM7S64的温度计
💻 C
字号:
#include "AT91SAM7S64.H" 	   // AT91SAM7S64处理器的寄存器头文件
#include "lib_AT91SAM7S64.h"
#include "18B20.h"
#include "Board.h"

unsigned char a,b,temp; 
unsigned char t,m; 

int main(void)
{ 
  char Buf[100];
  int h;
  Init_Debug();
   
  *AT91C_PMC_SCER=AT91C_CKGR_MOSCEN;//使能系统时钟寄存器的处理器时钟
  *AT91C_PMC_PCER=1<<AT91C_ID_PIOA;//使能PIOA外围时钟

  AT91F_PIO_CfgOutput(AT91C_BASE_PIOA,LED_MASK);    
  AT91F_PIO_Enable(AT91C_BASE_PIOA,LED_MASK);
  AT91F_PIO_CfgOutput(AT91C_BASE_PIOA,DQ_18B20);
  AT91F_PIO_Enable(AT91C_BASE_PIOA,DQ_18B20);
  AT91F_PIO_SetOutput(AT91C_BASE_PIOA,LED_MASK);

  while(1)
   {
  	ds18b20_reset();    
	convert_T( );               //转换温度
	for(h=0;h<700;h++) 
        {delay_us(1000);}
	if(ds18b20_reset()==1) // 如果复位成功  
	{           
        ds18b20_write(0xcc);     // 跳过多器件识别  
        ds18b20_write(0xbe);     // 读暂存器  
        a = ds18b20_read();           //读取温度值低位
		m=a; 
        b = ds18b20_read();           //读取温度值高位 
    //前5位符号,温度大于0,这5位为0,值乘0.0625即得实际温度 
           //温度小于0,这5位为1,数值取反加1再乘0.0625即得实际温度 
        temp = b & 0x80; 
    if(temp == 0) 
        { 
                t = b << 4; 
				a=a>>4;
                t = t + a; 
        } 
        else 
        { 
                b = b & 0x07; 
                t = b << 8; 
                t = t + a; 
                t = ~t + 1; 
        } 
	m&=0x0f;
	m=(m*6)/10;
	sprintf(Buf,"当前温度:%d.",t);
	AT91F_DBGU_Printk(Buf);
	sprintf(Buf,"%d℃\r\n",m);
	AT91F_DBGU_Printk(Buf);

	AT91F_PIO_SetOutput(AT91C_BASE_PIOA,LED_MASK);
		delay_us(100000);
        }  
   }
}

⌨️ 快捷键说明

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