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

网友投稿 684 2022-05-29

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

设备:

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

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

程序:

#include<8052.h>

#define LSA P1_5

#define LSB P1_6

#define LSC P1_7

#define Led P0

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

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;

}

}

单片机

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java的封装和继承
下一篇:谈一谈麦语言程序化模型编写
相关文章