永发信息网

为什么51单片机定时器控制数码管和流水灯流动和时流水灯动数码管不懂,分开时数码管可以走动

答案:2  悬赏:20  手机版
解决时间 2021-08-18 03:20
  • 提问者网友:星軌
  • 2021-08-17 03:41

 #include<reg52.h>
 #include <intrins.h>
 #define uint unsigned int
 #define uchar unsigned char
 sbit led0=P1^0;
 sbit led1=P1^1;
 sbit led2=P1^2;
 sbit led3=P1^3;
 uint num;
 uchar bai,shi,ge,xiao,count,temp,t;
  uchar code table[]={
 0x3f,0x06,0x5b,0x4f,0x66,
 0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7C,0x39,0x5E,0x79,0x71};

 void delay(int k);
 void display(uchar bai,uchar shi,uchar ge,uchar xiao);


 void main()
 {
   temp=0xfe;
   t=0;
 P3=temp;
           TMOD=0x11;
     count=0;

  TH0=(65536-45872)/256;
  TL0=(65536-45872)%256;
  TH1=(65536-45872)/256;
  TL1=(65536-45872)%256;
          EA=1;
    ET0=1;
    ET1=1;
    TR0=1;
    TR0=1;
    P0=table[0];
    num=5666;
    count=0;
 
        while(1)
       {
 display(bai,shi,ge,xiao); 
    }
}

 void T1_time() interrupt 3
 {
  TH1=(65536-45872)/256;
  TL1=(65536-45872)%256;
  count++;

  if(count==2)

  {
     count=0;
        num--;
      if(num==5555)
      TR1=0;
      TR0=0;
  }
 
 }


void delay(int k)

{

       while(k--);
}
void T0_time() interrupt 1
 {
  TH1=(65536-45872)/256;
  TL1=(65536-45872)%256;
  t++;
  if(t==10)
  {
   t=0;
   temp=_crol_(temp,1);
   P3=temp;
  }
 
 }

void display(uchar bai,uchar shi,uchar ge,uchar xiao)
 {
 bai=num/1000;
  
  shi=num%1000/100;
  
  ge=num%100/10;
  
  xiao=num%10;

  
  P0=table[bai];
  
  led0=0;
  
  delay(200);
  
  led0=1;
  
  P0=table[shi];
  
  led1=0;
  
  delay(200);

  led1=1;
  
  
  P0=table[ge];
  
  led2=0;
  
  delay(200);
  
  led2=1;
  
  P0=table[xiao];
  
  led3=0;
  
  delay(200);
  
  led3=1;

 
 }

最佳答案
  • 五星知识达人网友:玩世
  • 2021-08-17 04:08

用一个定时器足以,不需要两个定时器。思路如下


在主程序中显示数码管,在定时器中断函数中显示LED。里面的软件延时完全可以不要,浪费CPU的资源。让CPU在哪里等待还不如让它去干别的事。


void main( void )
{
 uchar temp = 0x1;  //LED显示的初始值
 ......//一些初始化的东西
 
 while(1)
 {
  Display();//数码管显示函数
 }
}


void Timer0( void ) interrupt 1
{
 uchar i;  //循环变量
 ......//重装定时器初值,50ms中断一次
 p++;
 if( p >= 20 ) //一秒钟改变一次状态
 {
  for( i = 0; i < 8; i ++ )
  {
   P1 = temp;
   temp <<= 1;  //左移一位,流水灯
  }
  p = 0;  
 }
}


呵呵,这就是简单的后台任务处理思想

全部回答
  • 1楼网友:夜风逐马
  • 2021-08-17 05:17
真正的爱不是用言语可以表达的,是发自内心的,爱上一个人你的整颗心都会被你爱的人所吸引,为他(她)着迷,为他(她)牵挂,但愿每一分钟都可以见到他(她), 见不到的时候时时刻刻都会想着他(她),见到的时候你会兴奋,心跳加快,在一起的时候你会感觉很温暖很安全,与他(她)相濡以沫,你会期待用你的全部爱心来带给他(她)最大的幸福, 而你也在这种过程中得到了另一种幸福!时常想到他(她)就开心,很介意他(她),很在乎他(她),有了他(她)就拥有了快乐. 相信自己~只要有爱,幸福就一定会存在~
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯