久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2342|回復: 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

回復

使用道具 舉報

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;
        }
回復

使用道具 舉報

ID:922892 發表于 2022-5-6 22:00 | 顯示全部樓層
wulin 發表于 2022-5-6 21:52
這種寫法是依據有什么理由?
        if(K1==0)
        delay(1000);

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

使用道具 舉報

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;//取反
                        }
                }
回復

使用道具 舉報

ID:61261 發表于 2022-5-7 08:21 | 顯示全部樓層
首先就要考慮按鍵抖動,然后做好去抖,可以結合串口功能去進行調試
回復

使用道具 舉報

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);
                }

回復

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

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

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

使用道具 舉報

ID:61261 發表于 2022-5-8 09:43 | 顯示全部樓層
除去抖以外還要考慮是否進入了死循環
回復

使用道具 舉報

ID:922892 發表于 2022-5-8 10:33 | 顯示全部樓層
wulin 發表于 2022-5-7 21:25
為什么給你示例還看不懂,繼續犯相同錯誤?

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品一 | 中文字幕一区二区三区精彩视频 | 国产成人精品区一区二区不卡 | 天天看天天摸天天操 | 亚洲三区视频 | 精品久久久一区二区 | 欧洲毛片 | 成人蜜桃av | 中文字幕一区二区三区日韩精品 | 一区二区在线不卡 | 欧美国产视频 | 免费在线性爱视频 | 亚洲在线观看视频 | 欧美一区二区三区在线播放 | 日本精品久久久久久久 | 国产黄色大片在线观看 | 国产高清视频 | 精品国产欧美 | 午夜免费观看体验区 | 国产一区二区三区在线看 | 国产精品亚洲一区 | 自拍视频在线观看 | 久视频在线观看 | 精品1区 | 亚洲视频中文字幕 | 超碰在线久 | 99精品一区二区三区 | 中文字幕高清 | 亚洲五码在线 | av国产精品 | 亚洲免费在线播放 | 一区二区三区四区av | 国产韩国精品一区二区三区 | 一区二区三区视频在线观看 | 国产亚洲精品精品国产亚洲综合 | 久久久这里都是精品 | 放个毛片看看 | 九九在线视频 | 亚洲一区二区三区在线 | 久久久精品一区二区三区 | 欧美亚洲国产一区 |