欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 大家好!請教大家關于定時器自己改的的問題 [打印本頁]

作者: 一個杰    時間: 2019-11-6 22:07
標題: 大家好!請教大家關于定時器自己改的的問題
大家好!小萌新想請教大家關于我自己改的定時器外部脈沖處的問題。題目大概是對T0引腳輸入的外部脈沖進行計數,并在數碼管上顯示結果。外部脈沖由獨立按鍵KEY2產生,要求KEY2每按一次,產生一個脈沖,數碼管顯示的數字加一。這個沒有問題,主要是(第二個問:實現每當外部脈沖技術達到5個時,數碼管顯示的數字加一)自己改的不對。
以下是書上的代碼,沒有問題。大家可以忽略。
#include<reg52.h>
sbit KEY2=P3^4;
sbit LSA=P1^5;
sbit LSB=P1^6;
sbit LSC=P1^7;
unsigned char code smgduan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void Delayms(unsigned int );
void main(void)
{
bit keybuf=1;  //按鍵值暫存
bit backup=1;  //按鍵值備份
unsigned char cnt=0;   //按鍵計數
LSA=1;
LSB=0;
LSC=0;
P0=smgduan[cnt];
while(1)
{
  keybuf=KEY2;
  if(keybuf!=backup)
  {
   Delayms(10);
   if(keybuf == KEY2)
   {
    if(backup==0)
        {
         cnt++;
         if(cnt>=10)
         {
          cnt=0;
          }
          P0=smgduan[cnt];
          }
          backup=keybuf;
          }
         }
        }
   }


void Delayms(unsigned int xms)
{
  unsigned int i,j;
  for(i=xms;i>0;i--)
  {
   for(j=110;j>0;j--);
   }
   }

第二個問
是自己改的,但是感覺自己基礎很薄弱,這個最后也沒有跑出來。題目說是外部脈沖技術達到5個時,數碼管顯示數字加一,我自己認為是cnt>=0&&cnt<5的時候P0處的賦值不變,5<cnt<10的時候,P0處賦值加一,但是我這樣的不對,沒有什么基礎,還想問問看啥書?

   if(keybuf==KEY2)
   {
    if(backup==0)
        {
         cnt++;
         if(cnt>=0&&cnt<5)
         {
      P0=smgduan[cnt];
          }
          if(cnt>=5&&cnt<10)
          {
          P0=smgduan[cnt+1];
          }
          if(cnt>=10)
          {
           cnt=0;
           }
想請教大家這里出現什么問題了?是if不可以這樣用嗎?

         
          
       


作者: wulin    時間: 2019-11-6 22:07
一個杰 發表于 2019-11-7 17:38
每5個外部脈沖計數,數碼管顯示的數字加1,是按5次,數字加1,是我理解錯了

按5次數字加1。

  1. #include<reg52.h>
  2. sbit KEY2=P3^4;
  3. unsigned char code smgduan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  4. void Delayms(unsigned int );

  5. void main(void)
  6. {
  7.         bit keybuf=1;  //按鍵值暫存
  8.         bit backup=1;  //按鍵值備份
  9.         unsigned char cnt=0;   //按鍵計數
  10.         unsigned char cnt1=0;
  11.         P0=smgduan[cnt];
  12.         while(1)
  13.         {
  14.                 keybuf=KEY2;
  15.                 if(keybuf!=backup)
  16.                 {
  17.                         Delayms(10);
  18.                         if(keybuf == KEY2)
  19.                         {
  20.                                 if(backup==0)
  21.                                 {
  22.                                         cnt1++;
  23.                                         if(cnt1>=5)
  24.                                         {
  25.                                                 cnt1=0;
  26.                                                 cnt++;
  27.                                                 if(cnt>=10)
  28.                                                         cnt=0;
  29.                                         }
  30.                                         P0=smgduan[cnt];
  31.                                 }
  32.                                 backup=keybuf;
  33.                         }
  34.                 }
  35.         }
  36. }


  37. void Delayms(unsigned int xms)
  38. {
  39.         unsigned int i,j;
  40.         for(i=xms;i>0;i--)
  41.                 for(j=110;j>0;j--);
  42. }
復制代碼

作者: man1234567    時間: 2019-11-7 12:27
掃一眼看就少2個右半邊括號
作者: 一個杰    時間: 2019-11-7 15:42
man1234567 發表于 2019-11-7 12:27
掃一眼看就少2個右半邊括號

那個是省略的,主要的是代碼
作者: 一個杰    時間: 2019-11-7 17:38
每5個外部脈沖計數,數碼管顯示的數字加1,是按5次,數字加1,是我理解錯了




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1