專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

51hei單片機(jī)開發(fā)板數(shù)碼管與流水燈分時(shí)控制

作者:佚名   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2009年11月03日   【字體:

/************************************************
跳線設(shè)置:默認(rèn)跳線位
晶振:12M
本站的51hei單片機(jī)開發(fā)板的數(shù)碼管和發(fā)光管,都是用P0控制的,那么有沒有辦法,讓數(shù)碼管和led發(fā)光管同時(shí)顯示我們所設(shè)置的值呢,答案是肯定的,用定時(shí)器分時(shí)控制,顯示數(shù)碼管的時(shí)候,關(guān)掉發(fā)光管顯示發(fā)光管的時(shí)候 關(guān)掉數(shù)碼管,這是基本思路
下面這個(gè)程序就可以讓數(shù)碼管顯示數(shù)字變化,同時(shí)發(fā)光二極管做流水燈的實(shí)驗(yàn)
************************************************/
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned int
sbit duan=P2^6;
sbit wei=P2^7;
sbit P14=P1^4;
unsigned long disnum0;
uchar temp;
uint count,num1;
uchar c;
unsigned long disnum0=765432;
uchar code tabduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
display(uchar,uchar,uchar,uchar,uchar,uchar,uchar);
void delay(uint);
void main()
{
    EA=1;
    ET1=1;
   TMOD=0X11;
   TH1=(65536-50000)/256;
   TL1=(65536-50000)%256;
   TR1=1;
   ET0=1;
   TH0=(65536-50000)/256;
   TL0=(65536-50000)%256;
    TR0=1;
    P14=0;
    wei=0;
    c=0xfe;

   while(1)
  {    
         if(count==20)
       {    P14=1;
            wei=0;
         count=0;
            disnum0--;
          
            if(disnum0==765380)
            TR1=0;
           
        }
        
       display(disnum0/100000,disnum0%100000/10000,disnum0%10000/1000,disnum0%1000/100,disnum0%100/10,disnum0%10);
      
      if(num1==10)
      {
       wei=0;
       P14=0;
      
       num1=0;
       P0=c;
       c=_crol_(c,1);
       delay(5);
      
      }
     
      
        
          
      
   }
  
}
void tim1() interrupt 3
{
    TH1=(65536-50000)/256;
    TL1=(65536-50000)%256;
    count++;
}
void tim0() interrupt 1
{
   
    TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
   num1++; 
 }

void delay(uint x)
{
 uint a,b;
   for(a=x;a>0;a--)
      for(b=100;b>0;b--);
}
display(uchar shiwan,uchar wan,uchar qian,uchar bai,uchar shi,uchar ge)
{P14=1;
P0=0xff;
wei=1;
wei=0;
P0=tabduan[shiwan];
duan=1;
duan=0;
P0=0xfb;
wei=1;
wei=0;
delay(1);

P0=0xff;
wei=1;
wei=0;
P0=tabduan[wan];
duan=1;
duan=0;
P0=0xf7;
wei=1;
wei=0;
delay(1);
 
P0=0xff;
wei=1;
wei=0;
P0=tabduan[qian];
duan=1;
duan=0;
P0=0xef;
wei=1;
wei=0;
delay(1);
   
P0=0xff;
wei=1;
wei=0;
P0=tabduan[bai];
duan=1;
duan=0;
P0=0xdf;
wei=1;
wei=0;
delay(3);
P0=0xff;
wei=1;
wei=0;
P0=tabduan[shi];
duan=1;
duan=0;
P0=0xbf;
wei=1;
wei=0;
delay(1);
   
P0=0xff;
wei=1;
wei=0;
P0=tabduan[ge];
duan=1;
duan=0;
P0=0x7f;
wei=1;
wei=0;
delay(1);
 
}
這個(gè)程序是一個(gè)會(huì)員編寫的,已經(jīng)在我們的板子上調(diào)試成功了,數(shù)碼管一邊倒計(jì)時(shí),流水燈同時(shí),其實(shí)是分時(shí)的,只是我們的眼睛有視覺暫留效應(yīng),看起來是同時(shí)進(jìn)行的.進(jìn)行我覺得這個(gè)程序很有參考價(jià)值所以給大家共享出來.
 

關(guān)閉窗口

相關(guān)文章