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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2196|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一级特黄网站 | 精品国产精品国产偷麻豆 | 欧美黄色一级毛片 | 日韩高清中文字幕 | 久久久久久久久久久久91 | 日日碰狠狠躁久久躁婷婷 | 免费国产网站 | 国产在线中文字幕 | 九九热精品免费 | a在线观看 | 久久精品中文 | 99久久婷婷国产综合精品电影 | 99久久国产综合精品麻豆 | 男女视频91 | 日韩不卡视频在线 | 天天射色综合 | 日韩在线一区二区三区 | 国产成人区| 国产成人一区二区三区久久久 | 色婷婷综合成人av | 日本成人片在线观看 | 丝袜 亚洲 另类 欧美 综合 | 自拍偷拍欧美 | 久久国产精品一区二区三区 | 国产中文在线 | 欧美一级电影免费 | 国产欧美日韩 | 亚洲成av人片在线观看 | 91天堂网| 欧美三级视频在线观看 | 日本黄色一级片视频 | 欧美激情综合五月色丁香小说 | 超碰3 | 99re热精品视频 | 99久久精品国产一区二区三区 | 亚洲午夜视频 | 日美女逼逼 | 成人h视频在线 | 久久精品国产亚洲一区二区三区 | 三级黄色片在线观看 | www.日本在线 |