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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

單片機程序問題 按一下顯示加一

查看數: 4298 | 評論數: 9 | 收藏 0
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2017-11-28 21:09

正文摘要:

為什么程序不能運行1,按一下顯示加一呢?? #include<reg52.h> char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; sbit y=P3^3; int num=0; int ge=0; int shi=0; void delay(){ ...

回復

ID:245521 發表于 2017-11-29 19:13
HC6800-ES-V2.0 發表于 2017-11-29 08:54
我運行了你的程序。
你的程序問題,在按鍵消抖上。
按鍵的抖動,時間至少10ms,你的消抖延時,只有0.15ms ...

100*1000比你的44*112大啊但是。。。。
ID:245521 發表于 2017-11-29 17:53
J木昜 發表于 2017-11-29 13:58
標志位keyFlag在程序中沒體現出來

是的!看不懂呢
ID:245521 發表于 2017-11-29 17:52
HC6800-ES-V2.0 發表于 2017-11-29 08:54
我運行了你的程序。
你的程序問題,在按鍵消抖上。
按鍵的抖動,時間至少10ms,你的消抖延時,只有0.15ms ...

謝謝!原來是軟件消抖的問題啊
ID:255156 發表于 2017-11-29 13:58
廖宇航 發表于 2017-11-29 12:25
不知道怎么回事,發表主題后格式亂了,樓主只有自己復制一下,自己排一下版了

標志位keyFlag在程序中沒體現出來
ID:255045 發表于 2017-11-29 12:25
廖宇航 發表于 2017-11-29 11:20
給樓主提個建議,將按鍵掃描和動態顯示分別做一個模塊,  #include   #define uchar unsigned char   sbi ...

不知道怎么回事,發表主題后格式亂了,樓主只有自己復制一下,自己排一下版了
ID:255045 發表于 2017-11-29 12:20
Afan的單片機 發表于 2017-11-28 21:13
請問是哪里出問題了呢?

給樓主提個建議,將按鍵掃描和動態顯示分別做一個模塊。采用分時的方法,在鍵盤掃描中定義一個標志位keyflag,當按鍵按下按下時,keyflag=1;按鍵彈起來時,keyflag置1,這樣就檢測標志位就不用一行一行的掃描鍵盤,消耗cpu的時間,同時也避免了按鍵掃描和動態顯示之間的時間沖突,比如,按一下按鍵,數碼管會閃一下。一個小段程序可能體現不出來,但如果是一個大型復雜的程序,問題就非常重要了,所以分時的思想在單片機中非常重要。當然也可以用中斷解決,但是單片機中斷源有限,能節約硬件資源就節約一下吧。
標志位的狀態,如果不清楚的話,可以自己寫一下,就會明白了。
  #include<reg51.h>
  #define uchar unsigned char
  sbit key=P3^3;
  bit keyflag;
  char counter=0;
  uchar code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
       
        //***********延時10ms*********//
  void delay()
  {
        uchar i,j=10;
        while(j--)
      {
           for(i=120;i>0;i--);
      }
   }
       
                  
  
  //**********動態掃描*********//
  void display(void)
  {
        P2=0xfd;
        P1=seg[counter/10];
        delay();
               
        P2=0xfe;
        P1=seg[counter%10];
        delay();       
  }
       
//***********按鍵掃描*********//
  void keyread(void)
  {
        if(!key)
      {
                               
          if(keyflag==0)//按鍵標志位
                               
         {
              delay();
              if(!key)
            {
                 keyflag=1;
                 counter++;
                 if(counter==100)//計滿100,清0
                 counter=0;
             }
          }               
      }
        else
              keyflag=0;
  }
                       
               

    void main(void)
  {
      while( 1 )
      {
          keyread();
          display();
      }  
  }  
               
ID:255045 發表于 2017-11-29 11:20
Afan的單片機 發表于 2017-11-28 21:13
請問是哪里出問題了呢?

給樓主提個建議,將按鍵掃描和動態顯示分別做一個模塊,  #include<reg51.h>   #define uchar unsigned char   sbit com1=P1^0;   sbit com2=P1^1;   sbit key=P3^0;         sbit key2=P3^1;         bit keyflag2;   bit keyflag;   char counter=0;   uchar code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共陽極                  //**********延時10ms*********//   void delay()   {                 uchar i,j=10;                 while(j--)                 {                         for(i=120;i>0;i--);                 }         }                                   //**********數碼管動態掃描*********//   void display(void)   {                  P1=0xfd;                  P0=seg[counter/10];                  delay();                             P1=0xfe;            P0=seg[counter%10];                  delay();           }                  //***********按鍵掃描*********//         void keyread(void)         {           if(!key)                 {                                 if(keyflag==0)                                 {                              delay();                                          if(!key)                                    {                                                 keyflag=1;                                           counter++;                                           if(counter==100)                                                 counter=0;                                   }                           }                         }                         else                                 keyflag=0; }  void main(void) {          for(   ;    ;   )         {          keyread();          display();         } } }
ID:164602 發表于 2017-11-29 08:54
我運行了你的程序。
你的程序問題,在按鍵消抖上。
按鍵的抖動,時間至少10ms,你的消抖延時,只有0.15ms左右,不能確實消抖,所以按一次會加很多。
我這里有一個延時10ms的程序,你試試看。
void Delay10ms(uc c)
{
    unsigned char a,b;
    for(c;c>0;c--)
                for(b=44;b>0;b--)
                        for (a=112;a>0;a--);
}
ID:245521 發表于 2017-11-28 21:13
請問是哪里出問題了呢?

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产免费一区二区 | 亚洲成人精品国产 | 特黄特色大片免费视频观看 | 亚洲精品一区二区三区丝袜 | 男女啪啪高潮无遮挡免费动态 | 综合久久国产 | 久久精品国产一区 | 国产高清在线观看 | 九九久久精品 | 综合在线视频 | 欧美456| 狼人伊人影院 | 四虎影院在线免费观看 | 色欧美片视频在线观看 | 狠狠色综合网站久久久久久久 | 亚洲91精品 | 色橹橹欧美在线观看视频高清 | 亚洲欧美一区二区三区国产精品 | 欧美自拍第一页 | 日韩欧美在 | 天天天操天天天干 | 狠狠操天天操 | 久久青| 欧美亚洲在线 | 欧美一区二区在线播放 | 中文字幕在线精品 | 1000部精品久久久久久久久 | 国产在线拍偷自揄拍视频 | 精品久久久久久亚洲精品 | 中文在线视频观看 | 人人种亚洲 | 日韩免费视频一区二区 | 亚洲精品一区在线观看 | 久草在线免费资源 | 在线激情视频 | 国产精品永久免费观看 | 一级毛片视频 | 精品1区| 美人の美乳で授乳プレイ | 国产传媒 | 日本a v在线播放 |