完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
仿真时只显示后面的单位 度(C),数字显示不出来,求大佬看看错在哪了,直接在display函数中输入数的话显示是正常的
#include #define uint unsigned int #define uchar unsigned char ***it DQ=P2^5;// 接温度传感器 ***it dula=P2^6;// 数码管段选 ***it wela=P2^7; // 数码管位选 ***it led=P2^1; unsigned char code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; unsigned char code table1[] = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; void delay0(uint z) { uchar x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void delay(uint z) { while(z--); } void delay1(unsigned char i) { while(--i); } void reset_ds18b20(void) { uchar reset=1; while(reset) { DQ=1; delay1(1); DQ=0; // RESET 拉低ds18b20单总线 delay1(0); // 拉低500us DQ=1; // 释放总线,等待DS18B20的存在脉冲 delay1(20); // 等待45us delay1(20); //等待45us if(DQ==0) {reset=0;led=0;} //复位成功 delay1(200); //452us DQ=1; } /* uchar stat=0; DQ=1; delay(8); DQ=0; delay(80); //600us/12mhz DQ=1; delay(8); stat=DQ; // 高电平为存在,低电平为不存在( stat 应该为 0) delay(4); // while(!DQ); //return stat; */ } void write_byte(uchar dat) { uchar i; DQ=1; // 先拉高电平,为写作准备 for(i=0;i<8;i++) {DQ=0; DQ=dat&0x01; delay(4);//DS18B20 采样单片机写给 DQ 线上的数据( 45us) *************** DQ=1; dat>>=1; } delay(4); } uchar read_byte() { uchar vaul,i; DQ=1; // 先拉高电平,为读作准备 for(i=0;i<8;i++) { DQ=0; vaul>>=1; DQ=1; if(DQ) vaul|=0x80; delay(4); } return vaul; } int read_temper() { uchar templ,temph; int temp; float tt; reset_ds18b20();// 复位操作 write_byte(0xcc);// 跳过 ROM write_byte(0x44);// 温度转换 delay(300);//*************************** reset_ds18b20();// 复位操作 write_byte(0xcc);// 跳过 ROM write_byte(0xbe);// 读内部 RAM 内容 templ=read_byte(); temph=read_byte(); temp=temph; temp<<=8; temp=temp|templ; tt=temp*0.0625; temp=tt*10+0.5; return temp; } void display(uint temp) //显示程序 { uint ge=0,shi=0,bai=0; bai = temp/100; shi = temp%100/10; ge = temp%10; if(temp<=99) { wela=1; P1=0xfe; wela=0; dula=1; P0=table[0]; dula=0; delay(0); delay(0); P1=0xff; P0=0x00; wela=1; P1=0xfd; wela=0; dula=1; P0=table1[shi];//显示十位,使用的是有小数点的数组(因为temp值扩大了10倍,虽然是十位,实际为个位) dula=0; delay(0); delay(0); P1=0xff; P0=0x00; wela=1; P1=0xfb; wela=0; dula=1; P0=table[ge]; //显示个位 dula=0; delay(0); delay(0); P1=0xff; P0=0x00; wela=1; P1=0xf7; wela=0; dula=1; P0=table[12]; dula=0; delay(0); delay(0); P1=0xff; P0=0x00; } else { wela=1; P1=0xfe; wela=0; dula=1; P0=table[bai]; //显示百位 dula=0; delay(0); delay(0); P1=0xff; P0=0x00; wela=1; P1=0xfd; wela=0; dula=1; P0=table1[shi]; //显示十位,使用的是有小数点的数组(因为temp值扩大了10倍,虽然是十位,实际为个位) dula=0; delay(0); delay(0); P1=0xff; P0=0x00; wela=1; P1=0xfb; wela=0; dula=1; P0=table[ge]; //显示个位 dula=0; delay(0); delay(0); P1=0xff; P0=0x00; wela=1; P1=0xf7; wela=0; dula=1; P0=table[12]; dula=0; delay(0); delay(0); P1=0xff; P0=0x00; } } /****************** 主函数 ****************/ void main() { while(1) { display(read_temper()); } }
|
|
相关推荐
6个回答
|
|
温度采集是否正常?
|
|
|
|
|
|
|
|
就是你得确保你的程序能够正常采集到温度啊,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
6347 浏览 3 评论
7613 浏览 1 评论
7853 浏览 0 评论
Protues中自己封装的芯片元件无Program File、Clock Frequency选项怎么解决,求求大神了!
9670 浏览 1 评论
基于51单片机的车辆倒车雷达报警系统,HC-SR04超声波测距,全套资料
1285 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-28 12:39 , Processed in 0.712834 second(s), Total 85, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号