标题:
求助,根据at90s8515写的温度检测,一直检测出了的是-1.5,不知道哪里出了问题
[打印本页]
作者:
简单_生活
时间:
2018-10-19 10:32
标题:
求助,根据at90s8515写的温度检测,一直检测出了的是-1.5,不知道哪里出了问题
程序如下,芯片频率是12M
#include<90s8515.h>
#include<delay.h>
unsigned int temp;
unsigned char dis[4]={0,0,0,0};
unsigned char led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0xff,0xbf};//共阳极数显管显示0,1,2,3,4,5,6,7,8,9,不显示,负号
unsigned char led1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//带小数点显示
unsigned char init(void) //ds18b20初始化
{
unsigned char flag;
DDRD=1;//端口设为输出,发送低电平
delay_us(550);//延时550us
DDRD=0;//端口设为输入,释放总线,等待ds18b20响应
delay_us(68);//延时68us
while(PIND);
while(!PIND);
if(PIND)
{flag=0;}
else
{flag=1;}
delay_us(500);
return flag;
}
void write(unsigned char dat) //写字节
{
unsigned char i=0;
for(i=8;i>0;i--)
{
DDRD=1;//拉低总线
delay_us(2);
if(dat&1)
{DDRD=1;}
else
{DDRD=0;}
dat>>=1;
delay_us(60);//主机延时60us,等待ds18b20进行采样
DDRD=0;//释放总线
//delay_us(2);
}
}
unsigned char read(void) //读字节
{
unsigned char i=0;
unsigned char dat=0;
for(i=8;i>0;i--)
{ DDRD=1; //定义为输出,拉低总线
delay_us(1);
DDRD=0;//定义为输入,释放总线
delay_us(9);
dat>>=1;
if(PIND)
dat|=0x80; //按位或然后赋值给dat,读取数据最高位为1
delay_us(65);
}
return(dat);
}
void Display(unsigned int temp) //显示函数
{
if(temp<=0x0800)//进行温度转换
{
temp>>=4;//二进制转换成十进制
temp*=10;
dis[0]=temp/1000;
dis[1]=temp%1000/100;
dis[2]=temp%1000%100/10;
dis[3]=temp%1000%100%10;
}
else
{
temp=~temp;
temp+=1;
temp>>=4;
dis[0]=0x0c;
dis[1]=temp%100/10;
dis[2]=temp%100%10;
dis[3]=0;
}
DDRC=0X0F;
DDRA=0XFF;
PORTC=0x01;
PORTA=led[dis[0]];
delay_us(400);
PORTC=0x02;
PORTA=led1[dis[1]];
delay_us(400);
PORTC=0x04;
PORTA=led[dis[2]];
delay_us(400);
PORTC=0x08;
PORTA=led[dis[3]];
delay_us(400);
}
void main()
{
unsigned char th,tl;
while(1)
{
init();
write(0xcc);//跳过ROM的操作
write(0x44);//进行温度变换
delay_ms(10);
init();
write(0xcc);//跳过ROM的操作
write(0xbe);//发出读取RAM的命令
th=read();
tl=read();
temp=th<<8;
temp|=tl;
Display(temp);
}
}
作者:
zhanghoub
时间:
2018-10-19 12:09
temp=th<<8;会不会有问题呀!th是8位变量,左移8位后给temp会不会出错,应该temp=th;temp=temp<<8;
作者:
简单_生活
时间:
2018-10-19 12:22
已经解决了
作者:
简单_生活
时间:
2018-10-19 13:00
已经解决了,就是不知道为什么数显管不显示“-”号
作者:
wxyz
时间:
2018-11-7 13:02
楼主,请问你的问题是怎么解决的?
另外,恳求能不能上传一份完整的程序,包括头文件。
作者:
1095754445
时间:
2019-12-16 14:54
你是不是显示程序没写对。。。我就经常数码管程序写错细节,你仔细检查一下啊
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1