专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

51hei单片机开发板数码管与流水灯分时控制

作者:佚名   来源:本站原创   点击数:  更新时间:2009年11月03日   【字体:

/************************************************
跳线设置:默认跳线位
晶振:12M
本站的51hei单片机开发板的数码管和发光管,都是用P0控制的,那么有没有办法,让数码管和led发光管同时显示我们所设置的值呢,答案是肯定的,用定时器分时控制,显示数码管的时候,关掉发光管显示发光管的时候 关掉数码管,这是基本思路
下面这个程序就可以让数码管显示数字变化,同时发光二极管做流水灯的实验
************************************************/
#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);
 
}
这个程序是一个会员编写的,已经在我们的板子上调试成功了,数码管一边倒计时,流水灯同时,其实是分时的,只是我们的眼睛有视觉暂留效应,看起来是同时进行的.进行我觉得这个程序很有参考价值所以给大家共享出来.
 

关闭窗口

相关文章