📄 main.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 + -