完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include “reg52.h” //此文件中定义了单片机的一些特殊功能寄存器
#include“temp.h” //这里面有个温度的函数 u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //code的作用是告诉单片机,我定义的数据要放在ROM(程序存储区)里面,其实是相当与汇编里面的寻址MOVX(好像是),因为C语言中没办法详细描述存入的是ROM还是RAM(寄存器),所以在软件中添加了这一个语句起到代替汇编指令的作用,对应的还有data是存入RAM的意思 void main() { while(1) { datapros(Ds18b20ReadTemp()); //数据处理函数 DigDisplay();//数码管显示函数 } } //Ds18b20ReadTemp()这个函数 就是头文件里的 应该是省略了一些物理的计算 类似于电流的大小电压在根据产品的材料算出温度的值传给你 void datapros(int temp) { float tp; if(temp《 0) //当温度值为负数 { DisplayData[0] = 0x40; // - //因为读取的温度是实际温度的补码,所以减1,再取反求出原码 temp=temp-1; temp=~temp; tp=temp; temp=tp*0.0625*100+0.5; //留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点 //后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就 //算加上0.5,还是在小数点后面。 } else { DisplayData[0] = 0x00; tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量 //如果温度是正的那么,那么正数的原码就是补码它本身 temp=tp*0.0625*100+0.5; //留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点 //后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就 //算加上0.5,还是在小数点后面。 } DisplayData[1] = smgduan[temp / 10000]; DisplayData[2] = smgduan[temp % 10000 / 1000]; DisplayData[3] = smgduan[temp % 1000 / 100] | 0x80; DisplayData[4] = smgduan[temp % 100 / 10]; DisplayData[5] = smgduan[temp % 10]; } 这个值还是要处理一下 逻辑不必去思考 毕竟这是人家算好给出来的值 既然它让我们去这么处理 我们就这么处理 //留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点 //后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就 //算加上0.5,还是在小数点后面。 这句话 其实有点重要 c语言会自动帮你做类型转化 所以四舍五入就没有用函数 我记得js还要MATH函数处理 下次我也这么写四舍五入 会不会出问题不太清楚 void DigDisplay() { u8 i; for(i=0;i《6;i++) { switch(i) //位选,选择点亮的数码管, { case(0): LSA=0;LSB=0;LSC=0; break;//显示第0位 case(1): LSA=1;LSB=0;LSC=0; break;//显示第1位 case(2): LSA=0;LSB=1;LSC=0; break;//显示第2位 case(3): LSA=1;LSB=1;LSC=0; break;//显示第3位 case(4): LSA=0;LSB=0;LSC=1; break;//显示第4位 case(5): LSA=1;LSB=0;LSC=1; break;//显示第5位 } P0=DisplayData[5-i];//发送数据 delay(100); //间隔一段时间扫描 P0=0x00;//消隐 } } 这个函数 就是一秒执行几百次 然后 你就能看到多个数组 像我这种动态视力优秀的人 看着 就是一堆闪烁的灯 花里胡哨的 人类的动态视力真弱 这就被欺骗了; ***it LSA=P2^2; ***it LSB=P2^3; ***it LSC=P2^4; 这三个 只要用到了数码管 三个数字 就是2的三次方 就是 有八种情况 然后这八种情况对应一个数字 一个数字有八个二极管 所以就是 P0=DisplayData[5-i];就是 1111 1110 ,随便写的 控制八个灯的亮的方式 就是用三个开关控制8个灯的开关 ; u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; 所以这里是设计好的10个亮灯的方式 ; DisplayData[1] = smgduan[temp / 10000];DisplayData[2] = smgduan[temp % 10000 / 1000];DisplayData[3] = smgduan[temp % 1000 / 100] | 0x80;DisplayData[4] = smgduan[temp % 100 / 10];DisplayData[5] = smgduan[temp % 10]; 这个可以看出温度给出的是个四位数字 再把这个四位数字拆出来 放到led里面显示 P0=0x00;//消隐 这个我不太了解 他是加我就加吧 |
|
|
|
只有小组成员才能发言,加入小组>>
2563 浏览 0 评论
762浏览 1评论
521浏览 0评论
275浏览 0评论
455浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-29 06:58 , Processed in 1.636652 second(s), Total 78, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号