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

本文介绍了一个使用外部中断和定时器中断的码盘测速系统,通过测量从S到dS(V)的过程实现机器人车轮转速的计算。程序中,当速度加快时,LED亮度增加,速度减慢则LED变暗。通过高等数学和离散时间系统,阐述了积分和导数在车轮转速系统中的应用。
摘要由CSDN通过智能技术生成

说明:使用中断测速,速度快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;
 	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangrelay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值