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

举报
zhangrelay 发表于 2021/07/15 02:51:39 2021/07/15
1.8k+ 0 0
【摘要】 说明:使用中断测速,速度快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

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

    全部回复

    上滑加载中

    设置昵称

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

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

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