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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

大佬幫我看看,這單片機定時器掃描按鍵怎么不行啊?

[復制鏈接]
跳轉到指定樓層
樓主
ID:1020154 發表于 2022-5-15 15:02 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include <REGX52.H>
#include "Time0.H"
#include "Key.H"

unsigned char Number;

void main()
{
        Timer0Init();
        P2=0x00;
        while(1)
        {
                Number=Key_GetNum();
                if(Number)
                {
                        P2=0xF0;
                if(Number==1)
                        P2=~P2;
                }
        }
}

void Time0(void)                interrupt 1
{
        unsigned int count=0;
        TL0 = 0xA4;                //設置定時初值
        TH0 = 0xA4;                //設置定時重載值
        count++;
        if(count>=200)
        {
                count=0;
                Key_Loop();
        }
}
************************************************
#include <REGX52.H>

unsigned char KeyNumber;

unsigned char Key_Return()
{
        unsigned char Num=0;
        if(P3_1==0){Num=1;}
        return Num;
}

void Key_Loop()
{
        static unsigned char Before_Num;
        static unsigned char Now_Num;
        
        Before_Num=Now_Num;
        Now_Num=Key_Return();
        
        if(Before_Num==1 && Now_Num==0){KeyNumber=1;}
        if(Before_Num==2 && Now_Num==0){KeyNumber=2;}
        if(Before_Num==3 && Now_Num==0){KeyNumber=3;}
        if(Before_Num==4 && Now_Num==0){KeyNumber=4;}
}

unsigned char Key_GetNum()
{
        unsigned char tmp=0;
        tmp=KeyNumber;
        return tmp;
}
********************************************
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1020154 發表于 2022-5-15 15:13 | 只看該作者
測試發現main函數里的  P2=0xF0;就不能實現,不知道是不是Key_GetNum函數有問題
回復

使用道具 舉報

板凳
ID:491577 發表于 2022-5-15 18:54 | 只看該作者
沒有Timer0Init();函數。按鍵值使用后必須手動清零。
void Time0(void)                interrupt 1
{
        unsigned int count=0;改為:static unsigned int count=0;
回復

使用道具 舉報

地板
ID:1020154 發表于 2022-5-15 19:37 | 只看該作者
定時器沒有是寫了沒有粘貼過來,就是按鍵值沒有手動清零的緣故,已經搞定了,謝謝大佬!
回復

使用道具 舉報

5#
ID:1020154 發表于 2022-5-15 19:40 | 只看該作者
hhh402 發表于 2022-5-15 18:54
沒有Timer0Init();函數。按鍵值使用后必須手動清零。
void Time0(void)                interrupt 1
{

謝謝大佬!
回復

使用道具 舉報

6#
ID:1026496 發表于 2022-5-15 20:37 | 只看該作者
unsigned int count=0;這條語句加static
回復

使用道具 舉報

7#
ID:1012735 發表于 2022-5-16 05:01 | 只看該作者
count也可設成全局變量。

當P3_1高電平時,key_loop()中,Now_Num=Key_Return()返回值0,Before_Num=Now_Num,也是0

因聲明時沒有給KeyNumber賦初值,所以,此時調用Key_Loop()時,KeyNumber值是不定的,

主函數中Number=Key_GetNum(); Number中的值也是不定的,P2大概率的:P2=0xF0

當P3_1低電平后,再次高電平時,KeyNumber=1,

因Now_Num=Key_Return()返回值要么0要么1,Before_Num值也只能是0或1,

if中Before_Num==2/3/4值不知從何而來

所以,長時間運行,KeyNumber=1值應是不變的,主函數中Number=Key_GetNum();Number也一直是1,

P2=~P2一直定時翻轉下去,與P3_1引腳電平無關了

Key_GetNum()函數直接一句:return KeyNumber;即可。

如果把:Before_Num=Now_Num;
改成:   Before_Num += Now_Num;
然后加一句:if(Before>4) Before = 1;
這樣下面的if條件都能達成。


回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日日操夜夜操天天操 | 天天欧美| 日韩视频区 | 成人精品久久日伦片大全免费 | 精品视频一区在线 | 超碰操| 久久综合一区 | 天天爽夜夜骑 | 日日淫 | 性欧美hd| 国产不卡一区 | 日韩午夜| 日本欧美国产 | 天天草视频| 久久久www | 日本三级电影免费 | 中文字幕精品一区二区三区精品 | 国产精品国产a级 | 日韩一二区在线 | 精品1区 | 97在线播放| 久久免费大片 | 成人在线免费网站 | 麻豆精品国产免费 | av影音资源 | 久久国产精品99久久久大便 | 久久亚洲美女 | 91在线精品一区二区 | 中文字幕日韩欧美 | 免费看国产精品视频 | 本道综合精品 | 久久国产精品网站 | 国产精品一区三区 | 国产精品久久一区二区三区 | 国产精品一码二码三码在线 | 亚洲综合第一页 | 成人午夜电影在线观看 | 久久成人免费视频 | 国产成人久久久 | 欧美一区两区 | 草久在线视频 |