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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2600|回復: 12
打印 上一主題 下一主題
收起左側

51單片機關于按鍵切換兩個函數的問題

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

為什么這里我用按鍵切換,不能穩定切換,而且當運行稱重程序時不能稱重了?

溫度與重量.rar

232.6 KB, 下載次數: 8

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

使用道具 舉報

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

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

使用道具 舉報

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

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

使用道具 舉報

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

使用道具 舉報

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

一種標志,因為一開始寫的是qiehuan=0,如果按鍵沒按下就取反,運行稱重程序
回復

使用道具 舉報

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

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

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

使用道具 舉報

7#
ID:61261 發表于 2022-5-7 08:21 | 只看該作者
首先就要考慮按鍵抖動,然后做好去抖,可以結合串口功能去進行調試
回復

使用道具 舉報

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

已經改完了,但是LCD屏幕依然會不停地閃,不能穩定的執行溫度或者測重函數。        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:     ");        //顯示第一行內容
                        LCD1602_write_com(0x80+0x40);                        //第二行地址
                        LCD1602_write_word("         0.000kg");        //第二行顯示內容
               
                                          
                                                if (FlagTest==1)   //每0.5秒稱重一次
                                                {
                                                Get_Weight();  //讀取一次重量
                                                FlagTest = 0;  //讀取變量清零
                                                }         
                                                KeyPress();                   //掃描按鍵
                                          
                                Delay_ms(100);       
                                }
                       
                else
                        {
                         ck();
                         Init_LCD1602();        //初始化LCD1602
                         zf();

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

回復

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

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

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

使用道具 舉報

12#
ID:61261 發表于 2022-5-8 09:43 | 只看該作者
除去抖以外還要考慮是否進入了死循環
回復

使用道具 舉報

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

抱歉,沒有仔細看,少了個if,已經改了,可以成功切換了,謝謝
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表