完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
现附上C语言程序。。。大体就是倒数第二位数码管显示有误。。已经进行十进制转换了
unsigned char fu_bit() { unsigned char ii; DATA=1; DATA_BIT=0; delay_ms(2); DATA=0; DATA_BIT=1; //主机IO口由输出转为输入 delay_us(30); if(DATA_ING==0) //判断是否有响应信号 { { while(DATA_ING==0); while(DATA_ING==1); } ii=1; } else ii=0; return ii; } void js_bit() { unsigned char j; //数组循环标志位 unsigned char clt; //数据位循环标志位 while(DATA_ING==1); for(j=0;j<5;j++) { for(clt=0;clt<8;clt++) { DHT_bit[j]<<=1; while(DATA_ING==0); delay_us(30); if(DATA_ING==1) { DHT_bit[j]+=1; //校验 delay_us(50); } else DHT_bit[j]+=0; } } } void DHT11() { unsigned char DHT_t; unsigned char DHT; DHT=fu_bit(); if(DHT==1) //判断是否有传感器存在 js_bit(); for(DHT_t=0;DHT_t<5;DHT_t++) { DHT_BIT[DHT_t]=(DHT_BIT[DHT_t]>>4)*16+(DHT_BIT[DHT_t]&0X0F); //将读取的数据进行十进制转换 } sdint=DHT_bit[0]; sdpoint=DHT_bit[1]; } void main() { unsigned char temp=0; unsigned char t; unsigned int tt; DDRA=0XFF; PORTA=0XFF; DDRB=0XFF; PORTB=0XFF; while(1) { DHT11(); temp_value[1]=sdpoint/10; temp_value[0]=sdpoint%10; temp_value[2]=sdint%10; temp_value[3]=sdint/10; for(tt=0;tt<100;tt++) for(t=0;t<4;t++) { PORTB=seg[temp_value[t]]; PORTA=pos[t]; delay_ms(2); } } } |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
AVR Atmega16 Bootloader程序与上位机LabView程序
5122 浏览 6 评论
#include <ioavr.h>这个头文件我应该下什么编译器
7767 浏览 0 评论
3026 浏览 2 评论
3103 浏览 1 评论
10053 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 08:02 , Processed in 0.543639 second(s), Total 45, Slave 35 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号