標題: 求大神指教,我想在計時器到10時讓燈光閃爍可是 [打印本頁]

作者: 學習者,成長中    時間: 2018-6-19 13:31
標題: 求大神指教,我想在計時器到10時讓燈光閃爍可是
#include <reg51.h>
#define uchar unsigned char //宏定義?
#define uint unsigned int
void delay (uchar n );
sfr p0 = 0x80;
sfr p2 = 0xA0;
sfr p1 = 0x90;
sbit dula = P2^6;  //段選,申明U1鎖存器的鎖存端,鎖存器使用的是74HC573?
sbit wela = P2^7;  //位選,申明U2鎖存器的鎖存端,鎖存器使用的是74HC573?
sbit beep = p2^3;
sbit led1=p1^0;
uchar DisBuf[4];
uchar Minute,Second,Counter;
uint Count=0;
int num=0;
int flag=1;
int frq;
int i,j ;
uchar code SegCode[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //數(shù)組,用于數(shù)碼管顯示數(shù)字的數(shù)字集,從0
uchar code BitCode[]=
{0xfe,0xfd,0xfb,0xf7};
void BufToSeg(void)
{
uchar i;
for(i=0;i<4;i++) {
if(i==2)
{
        dula = 1;
  P0 = SegCode[DisBuf[ i]];
  dula = 0;

}

dula = 1; //打開U1鎖存器,用于控制顯示的數(shù)據(jù)?
P0 = SegCode[DisBuf[ i]]; //送入數(shù)據(jù)到鎖存器U1,送入段選信號,顯示什么數(shù)字?
dula = 0; //關(guān)閉U1鎖存器?
P0 = 0xff; //消影,因為P0口任然保持上次的數(shù)據(jù)?
wela = 1; //打開U2鎖存器,用于控制哪個數(shù)碼管亮?
P0 = BitCode[ i];
wela = 0; //關(guān)閉U1鎖存器?
delay(3); //延時五個毫秒?
}
}
void delay (uchar n )
{
  uchar j;
while(n--)
{
  for(j=0;j<113;j++);
}
}
void NumToBuf(void)
{
DisBuf[0]=Minute/10;
DisBuf[1]=Minute%10;
DisBuf[2]=Second/10;
DisBuf[3]=Second%10;

}

void main()
{
if(flag==1)
{
TMOD = 0x01; //設(shè)置定時器0在工作方式1?
TH0 = (65536-45872)/256; //裝初值,50ms申請一次中斷?
TL0 = (65536-45872)%256;
EA  = 1; //開總中斷?
ET0 = 1; //開定時器0中斷?
TR0 = 1; //啟動定時器0?
}

while(1)

{        
        NumToBuf();
        BufToSeg();
                delay(1);
                led1=1;
                beep=1;
                if(Minute==10)
              {
                              
                                 TR0=0;
                                 delay(30);
                                 led1=~led1;  結(jié)果是燈和倒計時的前三位一起閃爍,希望大神可以指點,
                                                                           我想只讓燈閃,或者就讓燈和倒計時的四位一起閃,小白求指點
                                 delay(30);
                                 beep=~beep;
                                 
                      }
                           
                 

         
   }
}

void T0_time() interrupt 1  //1號中斷,定時器0的中斷號?
{
        
                TH0 = (65536-45872)/256; //裝初值,50ms申請一次中斷?
                TL0 = (65536-45872)%256;
                Counter++; //申請一次中斷num加1一次?
                if(Counter==1) //num加到20時,50*20=1000ms,說明一秒鐘到了?
                {
                Counter=0;
                Second++;
                if(Second==60)
                   {
                     Second=0;
                         Minute++;
                         num++;        
                        }
                  }
                 
                 
                 
                 
}
        

作者: hhhb    時間: 2018-6-19 17:59
程序?qū)懙貌粚?




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