#include <iom16v.h> //包含型号头文件
#include <macros.h> //包含"位"操作头文件
#include <stdio.h>
#include "DS18B20.h"
#define uchar unsigned char
#define uint unsigned int
#define dataled PORTA //数码管段选锁存器控制端
//7段数码管段码表共阳
unsigned char const tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//unsigned char str[3];
/*******************************************
函数名称: Delayms
功 能: 延时指定毫秒(8M晶振)
参 数: MS--延时的毫秒数
返回值 : 无
********************************************/
void Delayms(uint MS)
{
uint i,j;
for( i=0;i<MS;i++)
for(j=0;j<1141;j++); //1141是在8MHz晶振下,通过软件仿真反复实验得到的数值
}
/*******************************************
函数名称: Board_init
功 能: 初始化实验板,关闭全部功能
参 数: 无
返回值 : 无
/********************************************/
void Board_init(void)
{
DDRA=0xFF; //将四个IO口全部配置为输出
DDRB=0xFF;
PORTB=0XFF;
DDRC=0xFF;
PORTC=0XFF;
DDRD=0xFF;
SPCR=0x00; //还原SPI口,使其为正常端口
}
/********************************************/
void uart0_init(void)
{
UCSRB = 0x00; //禁止发送
UCSRA = 0x02; //倍速
UCSRC = 0x06; //8位数据位,1个停止位
UBRRL = 0x67; //波特率为9600
UBRRH = 0x00;
UCSRB = 0x18; //允许发送
}
/********************************************************/
void uart0_send(uchar i) //发送一个字符
{
while(!(UCSRA&(1<<UDRE))); //等待发送缓冲区为空
UDR=i; //发送数据
while(!(UCSRA&(1<<TXC))); //等待发送完毕
UCSRA|=1<<TXC; //清除发送完毕状态位
}
/*******************************************/
void str_send(char *s) //发送一串字符
{
while(*s)
{
uart0_send(*s); //字符串未结束则继续发送
s++;
}
}
/*********************************************/
uchar uart0_receive(void) //接收一个字符
{
while(!(UCSRA&(1<<RXC)));//等待接收数据
return UDR; //返回数据
}
/*******************************************
函数名称: main
功 能: 6个数码管循环滚动显示指定的内容
参 数: 无
返回值 : 无
/********************************************/
void main(void)
{ uint t=0;
uchar temh_d,teml_d,temm_d;
//uchar RDATA[3];
uart0_init();
Board_init(); //初始化开发板
while(1)
{
t=Read_temp()*0.625;//得到转换温度值
Delayms(2);
temh_d=t/100;
temm_d=(t/10)%10;
teml_d=t%10;
//uart0_send(temh_d+48);
//Delayms(1);
// uart0_send(temm_d+48);
//Delayms(1);
uart0_send(temh_d+48);
uart0_send(temm_d+48);
str_send(".");
uart0_send(teml_d+48);
uart0_send(32);
uart0_send(32);
uart0_send(32);
//Delayms(1);
//str_send(" ");
if(!t)
{
PORTC=0xf7;
dataled=tab[temh_d];//数码管扫描
Delayms(4);
PORTC=0xfb;
dataled=tab[temm_d]&0x7f;
Delayms(4);
PORTC=0xfd;
dataled=tab[teml_d];
Delayms(4);
}
PORTC=0xfe;
dataled=0xc6;
}
}