铁心的船长 2021-01-22 15:56 采纳率: 0%
浏览 36

求大佬帮忙解答如何定时器控制led闪烁时的一些问题

 

 

第一种方法;
#include"reg51.h"
unsigned int i=0,j=1,h=0;
sbit aj1=P3^0;
sbit aj2=P3^1;
sbit led=P2^0;
void timer()
{
TMOD=0x01; 
TH1=(65536-10000)/256;
TL1=(65536-10000)%256;
EA=1;
ET1=1;
TR1=1;
}
void delay(unsigned int n)
{   unsigned int k,u;
 for(k=0;n<5;k++){
             for(u=0;u<120;u++)
                 ;
                  }
}
void x()//P3^0
{
IT0=1;
EX0=1;
EA=1;
aj1=1;
}
void y()//P3^1
{
IT0=1;
EX1=1;
EA=1;
aj2=1;
}

int main()
{ 
 x();/*interrupt 0*/
 y();/*interrupt 1*/
 timer();
 while(1);
 
}
void time1()interrupt 3
{
 if(j<=0) {j=1;}
TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
    i++;
 if(i==(100*j))
   { i=0;led=~led; }
 
 }
 
void timer2() interrupt 0
{
 if(aj1==0)
 {j=j+1;
 delay(5);
 }
}
void timer3() interrupt 2
{
  if(aj2==0)
 {j=j-1;}
 delay(5);
}
第二种方法;
#include"reg51.h"
unsigned int w=1,flag=0,fla=0,i,j;
char s[]={0x3f,0x06,0x5B,0x4f,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
sbit aj1=P3^2;
sbit aj2=P3^3;
sbit led=P3^4;
void scan1()
{if(aj1==0&&flag==0){flag=1;}
 if(aj1==1&&flag==1){w++;flag=0;}
}
void scan2()
{if(aj2==0&&fla==0){fla=1;}
 if(aj2==1&&fla==1){w--;fla=0;}
}
void timer()
{
TMOD=0x01; 
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
EA=1;
ET0=1;
TR0=1;
}
void display()
{
P0=s[w];
 if(w==10){w=1;}
 if(w==0){w=9;}
 
}
int main()
{
 while(1)
 {
 scan1();
 scan2();
 display();
  j=100*w;
  for(i=1;i!=(j+1);i++)
       {  timer();
    }
  i=1;  
 }
 
}
void time()interrupt 1
{
TH0=(65536-10000)/256;
 TL0=(65536-10000)%256;
 if(j==i)
   { led=~led; i=i-1;}
 
 }

       第一种方法;anj2所控制的数码管能正常显示,但是控制led闪烁却有时失灵(特别是在快速点击按键时);anj1一旦按下数码管的数值立刻变为1,且led只能闪烁一秒钟。

第二种第一种方法;数码管上 的数字能够准确地被两个按键控制,但是led却一直亮没有延时;我认为第一种方法可能时延时函数出现了问题,于是就用另一种方法(添加标志位)将延时函数替换掉,但是此时两个按键所控制的定时器却又失灵。无奈只能将两个按键的定时器去掉,直接用函数来判断两个按键是否发生了变化。但是此时数码管上 的数字能够准确地被两个按键控制,但是led却一直亮没有延时

 

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-07 16:54
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料