内容发布更新时间 : 2024/12/24 20:59:42星期一 下面是文章的全部内容请认真阅读。
AVR单片机系统开发板
PQ-1A
速度:1MIPS/s 16K FLASH
512字节EEPROM 1K SRAM
JTAG接口、UART接口、SPI接口 I/O直接驱动数码管、LED、继电器等 功耗低、具有加密功能
5 选择DS18B20同时选择ICCAVR及AVR STUDIO进行编程及下载 关于程序设计:
#include
/******************************************* 函数名称: B20_init 功 能: 复位DS18B20 参 数: 无 返回值 : 无
/********************************************/ void B20_init(void) {
DDRA|=BIT(DS18B20); //配置为输出 PORTA&=~BIT(DS18B20); //拉低 Delayus(600); //等待600微秒 PORTA|=BIT(DS18B20); //释放总线 Delayus(60); //等待60微秒 DDRA&=~BIT(DS18B20); //配置为输入 while((PINA&(BIT(DS18B20)))); //等待DS18B20拉低
while(!(PINA&(BIT(DS18B20)))); //等待DS18B20释放总线 }
/******************************************* 函数名称: B20_readB
功 能: 读取一个字节的数据 参 数: 无
返回值 : retd--返回的一个字节数据
/********************************************/ uchar B20_readB(void) {
uchar i,retd=0;
for(i=0;i<8;i++) //位计数值 {
retd>>=1; //右移,准备接受新的数据位 DDRA|=BIT(DS18B20); //配置为输出 PORTA&=~BIT(DS18B20); //拉低,启动读数据位
6
PORTA|=BIT(DS18B20); //释放总线 Delayus(5); //等待5微秒 DDRA&=~BIT(DS18B20); //配置为输入,开始读取数据位 if(PINA&BIT(DS18B20)) //该位是否为高 {
retd|=0x80; //是就将此位置高 }
Delayus(50); //等待50微秒 }
return retd; //将读到的一个字节返回 }
/******************************************* 函数名称: B20_writeB
功 能: 写入一个字节的数据 参 数: wrd--要写入的数据 返回值 : 无
/********************************************/ void B20_writeB(uchar wrd) {
uchar i;
for(i=0;i<8;i++) //位计数值 {
DDRA|=BIT(DS18B20); //配置为输出 PORTA&=~BIT(DS18B20); //拉低,启动写数据位 Delayus(1); //等待1微秒 if(wrd&0x01) //此位数据是否为高 {
PORTA|=BIT(DS18B20); //是高则将单总线拉高 } else {
PORTA&=~BIT(DS18B20); //是低则将单总线拉低 }
Delayus(50); //等待50微秒 PORTA|=BIT(DS18B20); //释放总线 wrd>>=1; //右移,为写入新的数据位做准备 }
Delayus(50); //等待50微秒 }
/******************************************* 函数名称: Read_temp 功 能: 读取温度值 参 数: 无
返回值 : rettemp--返回的温度值
/********************************************/ uint Read_temp(void) {
uchar templ,temph; uint temp; B20_init(); //初始化,每次写命令都从初始化开始 B20_writeB(0xcc); //跳过ROM
B20_writeB(0x44); //启动温度转换 B20_init(); //初始化,每次写命令都从初始化开始 B20_writeB(0xcc); //跳过ROM B20_writeB(0xbe); //读寄存器 templ=B20_readB(); //读温度低字节 temph=B20_readB(); //读温度高字节
temp=templ+temph*256;//将温度整理成16位变量 return temp; //返回16位变量 }
/******************************************* 函数名称: Num_BCD 7
功 能: 将一个字节的整数转换成三位BCD码 参 数: num--需要转换的整数 返回值 : chr--三位BCD码数组指针
/********************************************/ uchar* Num_BCD(uint num) {
uchar i,chr[3]; uchar *rept; rept=&(chr[0]); //返回指针指向BCD码数组 for(i=0;i<3;i++) {
chr[2-i]=num; //对10取余数(其实是求模,但是对于正数,取余与求模是相等的) num/=10; //除以10,为取出下一位做准备 }
return rept; //返回指针 }
/******************************************* 函数名称: main
功 能: 完成温度的读取与显示 参 数: 无 返回值 : 无
/********************************************/ void main(void) {
uint t;
uchar *temppt; uchar i,temp[3]; Board_init( ); //初始化开发板 while(1) {
t=Read_temp(); //读取温度值 t*=0.625; //转换成实际温度的10倍 temppt=Num_BCD(t);//将实际温度的10倍转换成BCD码 for(i=0;i<3;i++) //将转换后的BCD码存入显示数组 {
temp[i]=*(temppt+i); }
for(i=0;i<3;i++) //显示温度 {
if(i==1) {
temp[1]+=16; //如果是各位,则加上小数点(数码管的译码数组有所改变,读者可以看10_DS18B20文件夹下的SMG.C文件) }
One_smg_display(temp[i],i+1); Delayms(5); } } }
大致流程图:
8
6 进行软硬件调试及数据采集:
运用AVR STUDIO及DS18B20温度传感器部分实验图:
(测量室温图) (测量体温升温过程) (四)结题预期目标:
1.加强C语言基础从而自行编译控制程序,并熟练应用AVR STUDIO软件。 2.熟练应用DHT11湿度传感器并增加测量湿度试验。
9
3.进行数据采集并进行分析处理 (五)经费使用情况 书费 100元 其他费用 100元
附件:DHT11温湿度传感器C语言程序
10