找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2038|回复: 5
打印 上一主题 下一主题
收起左侧

单片机 我在主函数加了一个子函数之后,我的按键函数就不能用了

[复制链接]
跳转到指定楼层
楼主
ID:725056 发表于 2020-5-1 16:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在主函数加了一个子函数之后,我的按键函数就不能用了,我去掉那个加的函数后,按键函数又可以用了。这是什么原因造成的,编译都没问题。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:624817 发表于 2020-5-1 17:31 | 只看该作者
编译器只会检测语法有没有错  编译通过只说明语法没问题  加的子函数里面有没有while循环 单片机是顺序执行的  这中情况一般是子函数里面有循环跳不出 导致无法执行下一步
还有问这种问题要把有问题的源码发一下 ,不然都是盲猜 ,这样你解决问题的效率就低了  
回复

使用道具 举报

板凳
ID:533011 发表于 2020-5-1 19:15 | 只看该作者
可能io口问题吧
回复

使用道具 举报

地板
ID:452950 发表于 2020-5-1 22:19 | 只看该作者
程序在你加的那个子函数里面跑不出来,按键函数就等于不存在了。
回复

使用道具 举报

5#
ID:725056 发表于 2020-5-2 10:21 | 只看该作者
Jiam 发表于 2020-5-1 17:31
编译器只会检测语法有没有错  编译通过只说明语法没问题  加的子函数里面有没有while循环 单片机是顺序执 ...

子函数涉及到的就这些,我把wendu()放到主函数就不行了。没放按键还是可以实现的

unsigned char ADC0832()//ad转换,返回结果,运用了I2c总线
{
        unsigned char i,data_c;
        data_c=0;

        ADC_CLK=0;
        ADC_DI=1;
        ADC_CS=0;//拉低cs端
        ADC_CLK=1;
        ADC_CLK=0;//拉低LCK端,形成下降沿1

        ADC_DI=1;//指定转换通道是CH1还是CH2。H
        ADC_CLK=1;
        ADC_CLK=0;//拉低CLK端,形成下降沿2

        ADC_DI=0;//指定值右移一位,再取最后一位的值。L
        ADC_CLK=1;
        ADC_CLK=0;//拉低CLK,形成下降沿3

        ADC_DI=1;
        for(i=0;i<8;i++)//采集一次
        {
                ADC_CLK=1;
                ADC_CLK=0;
                if(ADC_DI)
                        data_c|=0x80>>i;
                //data_c=(data_c<<1)|ADC_DO;//在每个脉冲的下降沿DO输出一位数据,最终ch为8位二进制数
        }

        /*for(i=0;i<8;i++)//采集第二次
        {
                if(ADC_DI)
                        data_c|=0x01<<i;
                ADC_CLK=1;
                ADC_CLK=0;
        }*/

        ADC_CS=1;//取消片选 一个转换周期结束
        ADC_CLK=1;//拉高数据端,回到初始状态
        ADC_DI=1;
        return(data_c);
}

void disp_TP(float f_data)
{
        uint tp;
        if(f_data<0)
        {
                Disp1Char(9,0,('-'));
                tp=f_data;
                tp=tp-1;
                f_data=~tp;
        }

        f_data=f_data*100;
        DispStr(7,0,"T=");
        Disp1Char(10,0,((int)f_data/1000+0x30));
        Disp1Char(11,0,((int)f_data%1000/100+0x30));
        Disp1Char(12,0,('.'));
        Disp1Char(13,0,((int)f_data%1000%100/10+0x30));
        Disp1Char(14,0,(0xdf));
        Disp1Char(15,0,('C'));
}

void wendu()
{
        v=ADC0832();
        temp=v;
        RV=BaseVol/256*temp;
        RT=RV*10/(BaseVol-RV);
        tmpp=1/(1/TN+(log(RT/RN)/B))-273.15;

        disp_TP(tmpp);
        if(tmpp>h)//当温度大于h时,蜂鸣器响
                {
                        beep();
                        DispStr(3,1,"Th");
                        delaynms(20);
                }

                if(tmpp<g)//当温度小于g时,蜂鸣器响
                {
                        beep();
                        DispStr(3,1,"Tl");
                        delaynms(20);
                }
               

}
回复

使用道具 举报

6#
ID:624817 发表于 2020-5-3 01:01 | 只看该作者
beep()这个函数可以发一下吗   你按键函数发的这些没问题 就算没现象 也不影响   看看beep()里面有没有死循环
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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