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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4234|回復: 6
收起左側

長短按鍵使用程序出問題了

[復制鏈接]
ID:139821 發(fā)表于 2016-9-19 12:47 | 顯示全部樓層 |閱讀模式
#include<reg52.h>

sbit ADDR3=P1^3;
sbit ENLED=P1^4;
sbit KEYIN4=P2^7;
sbit KEYIN3=P2^6;
sbit KEYIN2=P2^5;
sbit KEYIN1=P2^4;
sbit KEYOUT1=P2^3;
sbit KEYOUT2=P2^2;
sbit KEYOUT3=P2^1;
sbit KEYOUT4=P2^0;

unsigned char code keymodel[4][4]={
{0x31,0x32,0x33,0x20},{0x34,0x35,0x36,0x22},{0x37,0x38,0x39,0x21},{0x30,0x24,0x25,0x23}
};//0x20表示上,0x22表示左,0x21表示下,0x24表示esc,0x25表示回車,0x23表示右
unsigned char code LedChar[] = {  //數碼管顯示字符轉換表
    0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
    0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
        };
unsigned char pdata keysta[4][4]={
{1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}
};//按鍵當前狀態(tài)。
unsigned char  ledbuf[7]={
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
};

unsigned char rh=0;
unsigned char rl=0;
unsigned char result=0;//最大只能設置100.
unsigned char keytime=0;
bit flagreturn=0;
unsigned int cnt=0;

void configtime(unsigned char ms);
void keydriver();
void retruntime();
void keyaction(unsigned char number);
void shownumber();
void main()
{        EA=1;
        ADDR3=1;
        ENLED=0;
        TMOD&=0xF0;
        TMOD|=0x01;
        configtime(1);

        while(1)
        {        keydriver();
                if((cnt>=2)&&(flagreturn==1))
                        {        retruntime();
                                cnt=0;
                        }
        }
}
void configtime(unsigned char ms)
{        unsigned long tmp;
        tmp=11059200/12*ms/1000;
        tmp=65536-tmp+18;
        rh=(unsigned char)(tmp>>8);
        rl=(unsigned char)tmp;
        TH0=rh;
        TL0=rl;
        TR0=1;
        ET0=1;
}
void keyaction(unsigned char number)
{         if(number==0x20)
                {       
                        if(result<99)
                                result++;
                }
        else if(number==0x21)
                        {        if(result>0)
                                        result--;
                        }
        else if(number==0x24)
                        {        result=0;
                                ledbuf[6]=0xFF;
                        }
        else if(number==0x25)
                {        flagreturn=1;
                }               
}
void retruntime()
{
         if(result==0)
                 {        ledbuf[6]=0x00;
                        flagreturn=0;
                }
        else
                 result--;
}
void shownumber()
{        static unsigned char i=0;
        ledbuf[0]=LedChar[result%10];
        ledbuf[1]=LedChar[result/10];
        P0=0xFF;
        P1=(P1&0xF8)|i;
        P0=ledbuf[i];
        i++;
        if(i>6)
                i=0;
}
void keydriver()
{        unsigned char i=0;
        unsigned char j=0;
        static unsigned  char  keyback[4][4]={
        {1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}
        };
        static unsigned int keytimemax[4][4]={
        {1000,1000,1000,1000},{1000,1000,1000,1000},{1000,1000,1000,1000},{1000,1000,1000,1000}
        };
        for(i=0;i<4;i++)
        {        for(j=0;j<4;j++)
                        {        if(keyback[i][j]!=keysta[i][j])
                                        {        if(keysta[i][j]==0)
                                                        {keyaction(keymodel[i][j]);}
                                                keyback[i][j]=keysta[i][j];
                                        }
                                else
                                        {        if((keysta[i][j]==0)&&(keytime>=keytimemax[i][j]))
                                                        {        keyaction(keymodel[i][j]);
                                                                keytimemax[i][j]+=200;
                                                        }
                                                else
                                                        {        keytimemax[i][j]=1000;
                                                                keytime=0;
                                                        }
                                        }
                        }
        }
       
}
void keyscan()
{         static unsigned char keybuf[4][4]={
          {0xFF,0xFF,0xFF,0xFF},{0xFF,0xFF,0xFF,0xFF},{0xFF,0xFF,0xFF,0xFF},{0xFF,0xFF,0xFF,0xFF}
         };
         static unsigned char keyout=0;
         unsigned char i=0;
         keybuf[keyout][0]=(keybuf[keyout][0]<<1)|KEYIN1;
         keybuf[keyout][1]=(keybuf[keyout][1]<<1)|KEYIN2;
         keybuf[keyout][2]=(keybuf[keyout][2]<<1)|KEYIN3;
         keybuf[keyout][3]=(keybuf[keyout][3]<<1)|KEYIN4;
         for(i=0;i<4;i++)
         {        if(keybuf[keyout][i]&0x0F==0x00)
                         {        keysta[keyout][i]=0;
                                keytime+=4;
                        }
                else if(keybuf[keyout][i]&0x0F==0x0F)
                        keysta[keyout][i]=1;
         }
         keyout++;
         keyout=keyout&0x03;
         switch(keyout)
         {        case 0:        KEYOUT4=1; KEYOUT1=0;break;
                 case 1:        KEYOUT1=1; KEYOUT2=0;break;
                case 2:        KEYOUT2=1; KEYOUT3=0;break;
                case 3:        KEYOUT3=1; KEYOUT4=0;break;
                default :break;
         }
}
void interrupttmie0()interrupt 1
{       
        TH0=rh;
        TL0=rl;
        cnt++;
        keyscan();
        shownumber();
}

不知道哪里有問題?大神能幫我調試下???

23.png
回復

使用道具 舉報

ID:139821 發(fā)表于 2016-9-19 12:48 | 顯示全部樓層
圖片是我在調試的時候發(fā)現(xiàn)了一個問題,就是146到149行不能添加斷點?這又是為什么?
回復

使用道具 舉報

ID:97438 發(fā)表于 2016-9-19 17:07 | 顯示全部樓層
因為146行到149行是不可能運行到的。。。你寫錯了。。。。
146和150行,你犯了錯誤,沒有注意運算符的優(yōu)先級。
146行 if(keybuf[keyout][i]&0x0F==0x00)應改為 if((keybuf[keyout][i]&0x0F)==0x00)
150行你自己改一下~
回復

使用道具 舉報

ID:111634 發(fā)表于 2016-9-20 09:02 | 顯示全部樓層
什么“長”“短”按鍵?提問都不會!
回復

使用道具 舉報

ID:139881 發(fā)表于 2016-9-20 09:19 | 顯示全部樓層
有點意思
回復

使用道具 舉報

ID:139821 發(fā)表于 2016-9-21 22:17 | 顯示全部樓層
我找到問題了。
回復

使用道具 舉報

ID:21069 發(fā)表于 2019-2-2 00:51 | 顯示全部樓層
18780380513 發(fā)表于 2016-9-20 09:19
**** 作者被禁止或刪除 內容自動屏蔽 ****

還真有長短按鍵,只是你沒見過

評分

參與人數 5黑幣 +126 收起 理由
嘉立創(chuàng)AAA + 6 很給力!
Sawardeakar + 15 很給力!
刀刀見紅 + 35 回帖助人的獎勵!
areyouok + 35 回帖助人的獎勵!
shuisheng + 35 絕世好帖!

查看全部評分

回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人av免费在线观看 | 国产一区免费视频 | 久久成人国产 | 一区二区三区亚洲精品国 | 久久高清免费视频 | 麻豆av在线免费观看 | 97起碰| 久草网址 | 亚洲一区精品在线 | 日本在线视 | 中国一级特黄真人毛片 | 一区二区三区国产好 | 亚洲毛片在线观看 | 欧美lesbianxxxxhd视频社区 | 精品视频一区二区三区 | 欧美中文字幕一区 | 欧美美女二区 | 日本中文字幕一区 | 超碰在线影院 | a级性视频 | 99视频免费 | 国产精品亚洲成在人线 | 亚洲最大的黄色网址 | 国产精品久久久久久影院8一贰佰 | 天天想天天干 | 8x国产精品视频一区二区 | 国产福利免费视频 | 一本一道久久a久久精品综合蜜臀 | 久热久| 国产一区不卡 | 精品国产aⅴ| 亚洲av毛片成人精品 | 国产精品三级久久久久久电影 | 9久久婷婷国产综合精品性色 | 国产精品国产精品国产专区不卡 | 久视频在线 | 欧美精品区 | 欧美国产91 | 成人一区二区电影 | 99热视| 91九色porny首页最多播放 |