找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3575|回復: 0
打印 上一主題 下一主題
收起左側

[求助]一直不理解問題出在哪(關于中斷的)

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:37411 發(fā)表于 2012-4-5 01:18 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式

原本想實現(xiàn)的功能是:按按鍵1加一,按鍵2減一,按鍵三清零,按鍵4定時器定時一秒自動加一,按鍵5燈全亮,蜂鳴器響,再按就關了,按鍵6為P3.2口是中斷,中斷一次實行流水燈程序

可問題就出在當按了中斷后,燈沒有執(zhí)行流水燈程序,反而數(shù)碼管依次輪流閃亮,燈只亮了兩展,不知道問題出在哪

以下是本人的程序,求大俠指點。。!謝謝啊。。。!

 

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned int
#define led P2
uint code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};    //0,1,2,3,4,5,6,7,8,9
uint code btm[]={0xe7,0xc3,0x81,0x00} ;
uint code mtb[]={0x7e,0x3c,0x18,0x00} ;
sbit smg1=P1^0;
sbit smg2=P1^1;
sbit smg3=P1^2;
sbit smg4=P1^3;
sbit key1=P3^7;
sbit key2=P3^6;
sbit key3=P3^5;
sbit key4=P3^4;
sbit key5=P3^3;
sbit sb=P1^5;
uint ge,shi,bai,qian,num,tt;
uint count=0;
void dely(uint);
void display(uint);


 void ltr()
 {led=0x7f;
 for(count=0;count<8;count++)
 {
 led=led>>1;
    dely(500); 
 }
 return;
 }

 void rtl()
 {led=0xfe;
 for(count=0;count<8;count++)
 {
 led=led<<1;
 dely(500);
         }
   return;
 }

 void bothtomiddle()
 {led=0xff;
 for(count=0;count<5;count++)
 {led=btm[count];
 dely(500);

 }
 return;

 }
   
   void middletoboth()
   {led=0xff;
   for(count=0;count<5;count++)
   {led=mtb[count];
   dely(500);
   }
   return;
   }

 


  

void dely(uint t)
{   uint x,y;
   for(x=0;x<t;x--)
     for(y=0;y<110;y--)
      {}
         }

void init()         //初始化T0和INT0
{    EA=1;
    ET0=1;
     EX0=1;
    IT0=0;
     TMOD=0X01;
    TH0=(65536-45872)/256;
    TL0=(65536-45872)/256;
   
}

 

 

void keyscan()
{  
   if(key1==0)        //按鍵1加一
   {   
      dely(10);
      if(key1==0)
      {   num++;
       if(num==10000)
        {
         num=0;
         sb=0;
         dely(1000);
         sb=1;
         }
        while(!key1);
      }
   }
    
    
   if(key2==0)          //按鍵2減一 
   {   
      dely(10);
      if(key2==0)
      {   
       if(num==0)
        { 
         num=10000;
           sb=0;
         dely(1000);
         sb=1;
        }
         num--;
        while(!key2);
      }
   }

   if(key3==0)             //按鍵3清零作用
   { 
      dely(10);
      if(key3==0)
      {
       num=0;
      while(!key3);
         }
   }

   if(key4==0)
   {
        dely(10);
      if(key4==0)         //定時器工作
      {
           while(!key4);
           TR0=~TR0;
           }  
        
        }
   if(key5==0)            //按鍵5功能
   {      
      dely(10);
      if(key5==0)
      {
       while(!key5) ;
        dely(5);            //LED全亮,蜂鳴器響
        led=~led;
        sb=~sb;
        dely(100);
       
      }  
        
        }
}


void display(uint number)             //顯示數(shù)據(jù)函數(shù)
{      qian=number/1000;
     bai=number%1000/100;
     shi=number%100/10;
     ge=number%10;

     smg1=0;
     P0=table[qian];     
     dely(5);
     P0=0xff;
     smg1=1;

     smg2=0;
     P0=table[bai];
     dely(5);
     P0=0xff;
     smg2=1;

     smg3=0;
     P0=table[shi];     
     dely(5);
     P0=0xff;
     smg3=1;

     smg4=0;
     P0=table[ge];     
     dely(5);
     P0=0xff;
     smg4=1;


}

void zhongduan() interrupt 0        //中斷函數(shù)內(nèi)容
{   
   ltr();
   rtl();
   bothtomiddle();
   middletoboth();
   led=0xff;   
        }  

void main()               //主函數(shù)入口
{       num=0;
     init();           //初始化定時中斷函數(shù)
     while(1)
     {
         keyscan();
       display(num);
            }
}
            
void timet0() interrupt 1         //定義計數(shù)器功能
{ 
        TH0=(65536-45872)/256;
     TL0=(63336-45872)/256;
     tt++;
     if(tt==20)
     { 
       tt=0;
       num++;
       if(num==10000)
         {num=0;}
           }

}

 



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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表