找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1108|回复: 3
收起左侧

请问大佬怎么把下面这段单片机程序简化

[复制链接]
ID:405098 发表于 2020-2-20 14:13 | 显示全部楼层 |阅读模式
个人写的温湿度读取程序,采集16次,每次采集到1或者0。我程序底子差,写了a到p16个变量存放,之后再合并成一个数处理。但这样太占空间了,知道可以用for循环加按位与或操作,但是不知道怎么改,求大佬帮忙
                while(!dht);
                Delay45us();
                if(!dht){
                a=0;}
                else{a=1;Delay45us();}
               
                while(!dht);
                Delay45us();
                if(!dht){
                b=0;}
                else{b=1;Delay45us();}
               
                while(!dht);
                Delay45us();
                if(!dht){
                c=0;}
                else{c=1;Delay45us();}
               
                while(!dht);
                Delay45us();
                if(!dht){
                d=0;}
                else{d=1;Delay45us();}
               
                while(!dht);
                Delay45us();
                if(!dht){
                e=0;}
                else{e=1;Delay45us();}
               
                while(!dht);
                Delay45us();
                if(!dht){
                f=0;}
                else{f=1;Delay45us();}
               
                while(!dht);
                Delay45us();
                if(!dht){
                g=0;}
                else{g=1;Delay45us();}
               
                while(!dht);
                Delay45us();
                if(!dht){
                h=0;}
                else{h=1;Delay45us();}
               
                                while(!dht);
                Delay45us();
                if(!dht){
                i=0;}
                else{i=1;Delay45us();}
               
                while(!dht);
                Delay45us();
                if(!dht){
                j=0;}
                else{j=1;Delay45us();}
               
                while(!dht);
                Delay45us();
                if(!dht){
                k=0;}
                else{k=1;Delay45us();}
               
                while(!dht);
                Delay45us();
                if(!dht){
                l=0;}
                else{l=1;Delay45us();}
               
                while(!dht);
                Delay45us();
                if(!dht){
                m=0;}
                else{m=1;Delay45us();}
               
                while(!dht);
                Delay45us();
                if(!dht){
                n=0;}
                else{n=1;Delay45us();}
               
                while(!dht);
                Delay45us();
                if(!dht){
                o=0;}
                else{o=1;Delay45us();}
               
                while(!dht);
                Delay45us();
                if(!dht){
                p=0;}
                else{p=1;Delay45us();}

回复

使用道具 举报

ID:686839 发表于 2020-2-20 15:10 | 显示全部楼层
unsigned char i;
unsigned short vlaue = 0;
for(i=0;i<16;i++)
{
        while(!dht);
        Delay45us();
        if(!dht)
        {
                vlaue &= ~(1<<i);
        }
        else
        {
                vlaue |= (1<<i);
                Delay45us();
        }       
       
}
回复

使用道具 举报

ID:235200 发表于 2020-2-20 15:11 | 显示全部楼层
unsigned int value;
value=0;
for (i=0;i<16;i++)
if (dht)
value=(value<<1)+1;
else
value<<=1;
回复

使用道具 举报

ID:405098 发表于 2020-2-20 20:35 | 显示全部楼层
zalelife 发表于 2020-2-20 15:10
unsigned char i;
unsigned short vlaue = 0;
for(i=0;i

谢谢。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表