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

標題: 單片機數碼管有顯示按鍵就沒作用的問題 [打印本頁]

作者: law110    時間: 2019-5-17 16:24
標題: 單片機數碼管有顯示按鍵就沒作用的問題
以下的程序功能,當取消數碼管顯示后,按鍵就有作用了LED1會亮和滅,如一起執行按鍵就沒作用,本來想用按鍵調數碼管數字加減變化的。現在請各位高手指點下,看那里出問題了。thanks!

單片機源程序如下:
include"STC15W.H"
#include"intrins.h"
#define uchar unsigned char  
#define uint unsigned int
void digplay(uint hig);
void key();
sbit PWM=P1^7;
sbit LED1=P5^5;
sbit up=P1^4;
sbit down=P1^5;
sbit ba=P1^1;
sbit sh=P1^0;
sbit ge=P1^2;
sbit dn=P1^3;
uint hig=250;
uchar code LED[]={0xCF,0x81,0xEA,0xE3,0xA5,0x67,0x6F,0xC1,0xEF,0xE7,0x5e};
/************延時子程序*************/
void delayxms(uint z)
{
uint y,x;
for(y=z;x>0;x--)
   for(y=110;y>0;y--);
   }
void KeyScan(void)//按鍵掃描
{
  static uchar key1_lock=0;//自鎖標志
  static uint count1=0;//計數延時
  static uchar key2_lock=0;//
  static uint count2=0;//
if(up==0)
  {
   if((count1++>=5)&&(key1_lock==0))
     {
     key1_lock=1;
          LED1=~LED1;
        }
         }
  else
      {
           key1_lock=0;
           count1=0;
           }
        if(down==0)
        {
          if((count2++>=5)&&(key2_lock==0))
          {
            key2_lock=1;
                LED1=~LED1;
}
        }
        else
           {
            key2_lock=0;
                count2=0;
                }
          }
void Init2()//定時器2初始化
{
AUXR&=0x04;        //12T
   T2L=0x78;        //延時5MS
   T2H=0xec;        //
   
   IE2|=0x04;
   AUXR|=0x10;        //開始計時
   EA=1;
   }        

void digplay(uint hig)//數碼管動態掃描
{
  
          static uchar i=0;
         
          P3=0x00;
         switch(i)
         {
          case 0:
                P3=LED[hig/100];
                        P1=0x02;
                        P1=0x00;
                        i++;
                        break;
          case 1:
                P3=LED[hig/10%10];
                        P1=0x01;
                        P1=0x00;
                        i++;
                        break;
          case 2:
                P3=LED[hig%10];
                        P1=0x04;
                        P1=0x00;
                        i++;
                        break;
                case 3:
                    P3=0x5e;
                        P1=0x08;
                        P1=0x00;
                        i=0;
                        break;
                        }
                        delayxms(5);
             }
void main()//主程序
{
Init2();
P5M0=0xff;
  P5M1=0x00;
  P3M0=0xff;
  P3M1=0x00;
  P1M0=0xff;
  P1M1=0xf0;
while(1)
  {

    digplay(hig);
   }
}
void t2int() interrupt 12
{
   KeyScan();
}



作者: law110    時間: 2019-5-17 16:36
用最古老的按鍵程序(if(........==0)delay(10),都試過,還是沒作用。搞到頭暈了。
作者: yzwzfyz    時間: 2019-5-18 08:27
把你的程序畫成框圖,看看框圖上的邏輯是否混亂,你就明白了。
作者: law110    時間: 2019-5-18 09:31
多謝,已經找到原因了。
作者: wulin    時間: 2019-5-18 09:56
law110 發表于 2019-5-17 16:36
用最古老的按鍵程序(if(........==0)delay(10),都試過,還是沒作用。搞到頭暈了。

樓主定時器初始化設置不當
void Init2()                //5毫秒@12.000MHz
{
        AUXR &= 0xFB;        //12T模式16位自動重載
        T2L = 0x78;                //設置定時初值
        T2H = 0xEC;                //設置定時初值
//        IE2|=0x04;
        AUXR |= 0x10;               //定時器2開始計時
        EA=1;                        //開總中斷
        ET2=1;                        //開T2中斷
}




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