单片机补充案例--速度反馈控制LED亮度

举报
zhangrelay 发表于 2021/07/15 02:51:39 2021/07/15
【摘要】 说明:使用中断测速,速度快LED亮,速度慢LED暗。 设备: 码盘 接口 使用外部中断和定时器中断,实现里程计测速,从S到dS(V)的过程。 结合高等数学和离散时间系统,理解机器人车轮转速系统的积分和导数等概念。 程序: #include<8052.h> #define LSA P1_5#define LSB P1...

说明:使用中断测速,速度快LED亮,速度慢LED暗。

设备:

使用外部中断和定时器中断,实现里程计测速,从S到dS(V)的过程。

结合高等数学和离散时间系统,理解机器人车轮转速系统的积分和导数等概念。

程序:


  
   
    
     
    
    
     
      #include<8052.h>
     
    
   
    
     
    
    
      
     
    
   
    
     
    
    
     
      #define LSA P1_5
     
    
   
    
     
    
    
     
      #define LSB P1_6
     
    
   
    
     
    
    
     
      #define LSC P1_7
     
    
   
    
     
    
    
     
      #define Led P0
     
    
   
    
     
    
    
      
     
    
   
    
     
    
    
     
      unsigned char speed = 0;
     
    
   
    
     
    
    
     
      unsigned char cnt = 0;
     
    
   
    
     
    
    
     
      char a=0;
     
    
   
    
     
    
    
     
      void EXint_Init(void);
     
    
   
    
     
    
    
     
      void Delayms(unsigned int); 
     
    
   
    
     
    
    
     
      void EXINT0() __interrupt 0;
     
    
   
    
     
    
    
     
      void Timer0() __interrupt 1;
     
    
   
    
     
    
    
      
     
    
   
    
     
    
    
     
      void main()
     
    
   
    
     
    
    
     
      {
     
    
   
    
     
    
    
     
      	EXint_Init();	
     
    
   
    
     
    
    
     
      	LSA=0;
     
    
   
    
     
    
    
     
      	LSB=0;
     
    
   
    
     
    
    
     
      	LSC=0; 
     
    
   
    
     
    
    
     	while(1) 
     
    
   
    
     
    
    
     
      	{
     
    
   
    
     
    
    
     
      		;			
     
    
   
    
     
    
    
     
      	} 
     
    
   
    
     
    
    
     
      }
     
    
   
    
     
    
    
      
     
    
   
    
     
    
    
     
      void EXint_Init() 
     
    
   
    
     
    
    
     
      {
     
    
   
    
     
    
    
     
      	IT0=1; 
     
    
   
    
     
    
    
     
      	IT1=0; 
     
    
   
    
     
    
    
     
      // IPH=0x40; 
     
    
   
    
     
    
    
     
      	PX1=1; 
     
    
   
    
     
    
    
     
      	EA=1; 
     
    
   
    
     
    
    
     
      	EX0=1;
     
    
   
    
     
    
    
     
      	TMOD = 0x01;//设置定时器T0工作方式1
     
    
   
    
     
    
    
     
      	TL0  = 47104%256;//计数器初值
     
    
   
    
     
    
    
     
      	TH0  = 47104/256;
     
    
   
    
     
    
    
     
      	TR0  = 1;//启动定时器
     
    
   
    
     
    
    
     
      	ET0  = 1;//开中断 
     
    
   
    
     
    
    
     
      	EX1=1; 
     
    
   
    
     
    
    
     
      }
     
    
   
    
     
    
    
      
     
    
   
    
     
    
    
      
     
    
   
    
     
    
    
     
      void Delayms(unsigned int xms)
     
    
   
    
     
    
    
     
      {
     
    
   
    
     
    
    
     	unsigned int i,j;
     
    
   
    
     
    
    
     	for(i = xms;i > 0;i--)
     
    
   
    
     
    
    
     
      	{
     
    
   
    
     
    
    
     		for (j = 110;j > 0;j--);
     
    
   
    
     
    
    
     
      	}
     
    
   
    
     
    
    
     
      }
     
    
   
    
     
    
    
      
     
    
   
    
     
    
    
     
      void EXINT0() __interrupt 0 
     
    
   
    
     
    
    
     
      {
     
    
   
    
     
    
    
     
      	speed++; 
     
    
   
    
     
    
    
     
      }
     
    
   
    
     
    
    
      
     
    
   
    
     
    
    
     
      void Timer0() __interrupt 1 //定时器 T0 中断响应
     
    
   
    
     
    
    
     
      {
     
    
   
    
     
    
    
     
       	TL0  = 47104%256;			//计数器初值
     
    
   
    
     
    
    
     
      	TH0  = 47104/256;
     
    
   
    
     
    
    
     
      	cnt++; //计数值自加 1
     
    
   
    
     
    
    
      	if (cnt > 4) //判断 T0 溢出是否达到 5 次
     
    
   
    
     
    
    
     
       	{
     
    
   
    
     
    
    
      switch(speed)
     
    
   
    
     
    
    
     
       {
     
    
   
    
     
    
    
      case 0: {P0=0xff;} break;
     
    
   
    
     
    
    
      case 1: { Led = 0x00;
     
    
   
    
     
    
    
     
      		a=2;
     
    
   
    
     
    
    
     		while(a--); 		
     
    
   
    
     
    
    
     
      	 	Led = 0xff; 
     
    
   
    
     
    
    
     
      		a=255;
     
    
   
    
     
    
    
     		while(a--);} break;
     
    
   
    
     
    
    
      case 2: { Led = 0x00;
     
    
   
    
     
    
    
     
      		a=4;
     
    
   
    
     
    
    
     		while(a--); 		
     
    
   
    
     
    
    
     
      	 	Led = 0xff; 
     
    
   
    
     
    
    
     
      		a=255;
     
    
   
    
     
    
    
     		while(a--);} break;
     
    
   
    
     
    
    
      case 3: { Led = 0x00;
     
    
   
    
     
    
    
     
      		a=8;
     
    
   
    
     
    
    
     		while(a--); 		
     
    
   
    
     
    
    
     
      	 	Led = 0xff; 
     
    
   
    
     
    
    
     
      		a=255;
     
    
   
    
     
    
    
     		while(a--);} break;
     
    
   
    
     
    
    
      case 4: { Led = 0x00;
     
    
   
    
     
    
    
     
      		a=16;
     
    
   
    
     
    
    
     		while(a--); 		
     
    
   
    
     
    
    
     
      	 	Led = 0xff; 
     
    
   
    
     
    
    
     
      		a=255;
     
    
   
    
     
    
    
     		while(a--);} break;
     
    
   
    
     
    
    
      case 5: { Led = 0x00;
     
    
   
    
     
    
    
     
      		a=32;
     
    
   
    
     
    
    
     		while(a--); 		
     
    
   
    
     
    
    
     
      	 	Led = 0xff; 
     
    
   
    
     
    
    
     
      		a=255;
     
    
   
    
     
    
    
     		while(a--);} break;
     
    
   
    
     
    
    
      case 6: { Led = 0x00;
     
    
   
    
     
    
    
     
      		a=64;
     
    
   
    
     
    
    
     		while(a--); 		
     
    
   
    
     
    
    
     
      	 	Led = 0xff; 
     
    
   
    
     
    
    
     
      		a=255;
     
    
   
    
     
    
    
     		while(a--);} break;
     
    
   
    
     
    
    
      case 7: { Led = 0x00;
     
    
   
    
     
    
    
     
      		a=128;
     
    
   
    
     
    
    
     		while(a--); 		
     
    
   
    
     
    
    
     
      	 	Led = 0xff; 
     
    
   
    
     
    
    
     
      		a=255;
     
    
   
    
     
    
    
     		while(a--);} break;
     
    
   
    
     
    
    
      default:{P0=0x00;}
     
    
   
    
     
    
    
      
     
    
   
    
     
    
    
     
       }
     
    
   
    
     
    
    
     
       Delayms(1);
     
    
   
    
     
    
    
     
       cnt=0;
     
    
   
    
     
    
    
     
       speed=0;
     
    
   
    
     
    
    
     
       	}
     
    
   
    
     
    
    
     
      }
     
    
   
    
     
    
    
      
     
    
  
 

 

文章来源: zhangrelay.blog.csdn.net,作者:zhangrelay,版权归原作者所有,如需转载,请联系作者。

原文链接:zhangrelay.blog.csdn.net/article/details/109667034

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。