找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1396|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)數(shù)碼管有顯示按鍵就沒(méi)作用的問(wèn)題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:348282 發(fā)表于 2019-5-17 16:24 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
以下的程序功能,當(dāng)取消數(shù)碼管顯示后,按鍵就有作用了LED1會(huì)亮和滅,如一起執(zhí)行按鍵就沒(méi)作用,本來(lái)想用按鍵調(diào)數(shù)碼管數(shù)字加減變化的,F(xiàn)在請(qǐng)各位高手指點(diǎn)下,看那里出問(wèn)題了。thanks!

單片機(jī)源程序如下:
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};
/************延時(shí)子程序*************/
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;//自鎖標(biāo)志
  static uint count1=0;//計(jì)數(shù)延時(shí)
  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()//定時(shí)器2初始化
{
AUXR&=0x04;        //12T
   T2L=0x78;        //延時(shí)5MS
   T2H=0xec;        //
   
   IE2|=0x04;
   AUXR|=0x10;        //開始計(jì)時(shí)
   EA=1;
   }        

void digplay(uint hig)//數(shù)碼管動(dòng)態(tài)掃描
{
  
          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();
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:348282 發(fā)表于 2019-5-17 16:36 | 只看該作者
用最古老的按鍵程序(if(........==0)delay(10),都試過(guò),還是沒(méi)作用。搞到頭暈了。
回復(fù)

使用道具 舉報(bào)

板凳
ID:123289 發(fā)表于 2019-5-18 08:27 | 只看該作者
把你的程序畫成框圖,看看框圖上的邏輯是否混亂,你就明白了。
回復(fù)

使用道具 舉報(bào)

地板
ID:348282 發(fā)表于 2019-5-18 09:31 | 只看該作者
多謝,已經(jīng)找到原因了。
回復(fù)

使用道具 舉報(bào)

5#
ID:213173 發(fā)表于 2019-5-18 09:56 | 只看該作者
law110 發(fā)表于 2019-5-17 16:36
用最古老的按鍵程序(if(........==0)delay(10),都試過(guò),還是沒(méi)作用。搞到頭暈了。

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

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表