欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2600|回復(fù): 12
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)關(guān)于按鍵切換兩個函數(shù)的問題

[復(fù)制鏈接]
回帖獎勵 80 黑幣 回復(fù)本帖可獲得 8 黑幣獎勵! 每人限 2 次
跳轉(zhuǎn)到指定樓層
樓主
ID:922892 發(fā)表于 2022-5-6 18:07 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
void main()
{
        init_eeprom();  //開始初始化保存的數(shù)據(jù)
        Init_LCD1602();        //初始化LCD1602
        EA = 0;                        //關(guān)閉中斷總開關(guān)
        Timer0_Init();        //初中始化完成,開斷
        EA = 1;                        //打開中斷總開關(guān)
        while(1)
                {
                if(K1==0)
                delay(1000);
                        {
                        while(K1==0)
                        qiehuan=~qiehuan;
                        }
               
                if(qiehuan)
                        {
                        init_eeprom();  //開始初始化保存的數(shù)據(jù)
                        Init_LCD1602();        //初始化LCD1602
                        EA = 0;                        //關(guān)閉中斷總開關(guān)
                        Timer0_Init();        //初中始化完成,開斷
                        EA = 1;                        //打開中斷總開關(guān)
                        chushi();
                                if (FlagTest==1)   //每0.5秒稱重一次
                                {
                                Get_Weight();  //讀取一次重量
                                FlagTest = 0;  //讀取變量清零
                                }         
                                KeyPress();                   //掃描按鍵
                        }
                else
                        {
                         ck();
                         Init_LCD1602();        //初始化LCD1602
                         zf();
                 LcdDisplay(Ds18b20ReadTemp());
                        }
                        delay(10000);
                }
       
}

為什么這里我用按鍵切換,不能穩(wěn)定切換,而且當(dāng)運(yùn)行稱重程序時不能稱重了?

溫度與重量.rar

232.6 KB, 下載次數(shù): 8

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:860840 發(fā)表于 2022-5-6 19:33 | 只看該作者
本帖最后由 lxh0587 于 2022-5-6 19:39 編輯

你這個可能是    if(K1==0)  delay(1000); 按鍵消抖的時間太短了,我看delay是用while循環(huán)減,獨立按鍵消抖一般在10ms,你這個應(yīng)該只有1ms左右吧應(yīng)該,我看最下面有個ms的延時函數(shù),咋不用那個,另外我看Get_Weight()函數(shù)在主函數(shù)后面,我沒在主函數(shù)前面找到聲明
回復(fù)

使用道具 舉報

板凳
ID:860840 發(fā)表于 2022-5-6 19:38 | 只看該作者
本帖最后由 lxh0587 于 2022-5-6 19:53 編輯

我看Get_Weight()在主函數(shù)后面,主函數(shù)前面也沒有聲明,雖然編譯不知道為啥沒錯,但是應(yīng)該是不行的吧。if(K1==0) delay(1000); 按鍵消抖的時間可能太短了,應(yīng)該只有1ms,一般要10ms,所以會不穩(wěn)定吧
回復(fù)

使用道具 舉報

地板
ID:213173 發(fā)表于 2022-5-6 21:52 | 只看該作者
這種寫法是依據(jù)有什么理由?
        if(K1==0)
        delay(1000);
        {
                while(K1==0)
                qiehuan=~qiehuan;
        }
回復(fù)

使用道具 舉報

5#
ID:922892 發(fā)表于 2022-5-6 22:00 | 只看該作者
wulin 發(fā)表于 2022-5-6 21:52
這種寫法是依據(jù)有什么理由?
        if(K1==0)
        delay(1000);

一種標(biāo)志,因為一開始寫的是qiehuan=0,如果按鍵沒按下就取反,運(yùn)行稱重程序
回復(fù)

使用道具 舉報

6#
ID:213173 發(fā)表于 2022-5-7 08:11 | 只看該作者
xuxiaopang11 發(fā)表于 2022-5-6 22:00
一種標(biāo)志,因為一開始寫的是qiehuan=0,如果按鍵沒按下就取反,運(yùn)行稱重程序

錯誤
                if(K1==0)//無效
                delay(1000);//延時
                {//無效
                while(K1==0)//等待按鍵松手,沒有分號分隔則無限循環(huán)執(zhí)行下一條語句
                        qiehuan=~qiehuan;//等待按鍵松手期間不停取反
                }//無效

正確
                if(K1==0)//按鍵按下
                {
                        delay(1000);//延時去抖
                        if(K1==0)//延時后再次確認(rèn)按鍵按下
                        {
                                while(K1==0);//等待按鍵松手
                                qiehuan=~qiehuan;//取反
                        }
                }
回復(fù)

使用道具 舉報

7#
ID:61261 發(fā)表于 2022-5-7 08:21 | 只看該作者
首先就要考慮按鍵抖動,然后做好去抖,可以結(jié)合串口功能去進(jìn)行調(diào)試
回復(fù)

使用道具 舉報

8#
ID:922892 發(fā)表于 2022-5-7 10:54 | 只看該作者
wulin 發(fā)表于 2022-5-7 08:11
錯誤
                if(K1==0)//無效
                delay(1000);//延時

已經(jīng)改完了,但是LCD屏幕依然會不停地閃,不能穩(wěn)定的執(zhí)行溫度或者測重函數(shù)。        while(1)
                {
                if(K1==0)
                Delay_ms(10);
                        {
                        while(K1==0);
                        qiehuan=~qiehuan;
                        }
               
                if(qiehuan)
                        {
                        Init_LCD1602();        //初始化LCD1602

                        LCD1602_write_com(0x80);                                //第一行地址
                        LCD1602_write_word("The Weight:     ");        //顯示第一行內(nèi)容
                        LCD1602_write_com(0x80+0x40);                        //第二行地址
                        LCD1602_write_word("         0.000kg");        //第二行顯示內(nèi)容
               
                                          
                                                if (FlagTest==1)   //每0.5秒稱重一次
                                                {
                                                Get_Weight();  //讀取一次重量
                                                FlagTest = 0;  //讀取變量清零
                                                }         
                                                KeyPress();                   //掃描按鍵
                                          
                                Delay_ms(100);       
                                }
                       
                else
                        {
                         ck();
                         Init_LCD1602();        //初始化LCD1602
                         zf();

                         LcdDisplay(Ds18b20ReadTemp());         
               
                        }
                        Delay_ms(100);
                }

回復(fù)

使用道具 舉報

9#
ID:451718 發(fā)表于 2022-5-7 17:39 | 只看該作者
你數(shù)一下,你程序里面用了幾次 Init_LCD1602()函數(shù), 不閃才怪。  要注意程序運(yùn)行的效率, 如果需要清屏,可以在有數(shù)據(jù)變化的時候,調(diào)用Init_LCD1602()函數(shù)。
回復(fù)

使用道具 舉報

10#
ID:213173 發(fā)表于 2022-5-7 21:25 | 只看該作者
xuxiaopang11 發(fā)表于 2022-5-7 10:54
已經(jīng)改完了,但是LCD屏幕依然會不停地閃,不能穩(wěn)定的執(zhí)行溫度或者測重函數(shù)。        while(1)
                {
                if(K1==0) ...

為什么給你示例還看不懂,繼續(xù)犯相同錯誤?
回復(fù)

使用道具 舉報

11#
ID:922892 發(fā)表于 2022-5-8 09:29 | 只看該作者
robinsonlin 發(fā)表于 2022-5-7 17:39
你數(shù)一下,你程序里面用了幾次 Init_LCD1602()函數(shù), 不閃才怪。  要注意程序運(yùn)行的效率, 如果需要清屏 ...

哦哦,明白了,我去修改一下,初學(xué)這些東西,搞的還不是太明白
回復(fù)

使用道具 舉報

12#
ID:61261 發(fā)表于 2022-5-8 09:43 | 只看該作者
除去抖以外還要考慮是否進(jìn)入了死循環(huán)
回復(fù)

使用道具 舉報

13#
ID:922892 發(fā)表于 2022-5-8 10:33 | 只看該作者
wulin 發(fā)表于 2022-5-7 21:25
為什么給你示例還看不懂,繼續(xù)犯相同錯誤?

抱歉,沒有仔細(xì)看,少了個if,已經(jīng)改了,可以成功切換了,謝謝
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表