历史上的今天
今天是:2024年11月28日(星期四)
2020年11月28日 | 51单片机红外控制步进电机
2020-11-28 来源:51hei
单片机源程序如下:
#include #define uchar unsigned char /*********************************************************************************/ sbit IR=P3^2; //红外接口标志 uchar i; unsigned char irtime; //红外用全局变量 bit irpro_ok,irok; unsigned char IRcord[4]; unsigned char irdata[33]; /*********************************************************************************/ sbit A1=P1^0; //定义步进电机连接端口 P1^0-P1^3 sbit B1=P1^1; sbit C1=P1^2; sbit D1=P1^3; #define Coil_AB1 {A1=1;B1=1;C1=0;D1=0;}//AB相通电,其他相断电 #define Coil_BC1 {A1=0;B1=1;C1=1;D1=0;}//BC相通电,其他相断电 #define Coil_CD1 {A1=0;B1=0;C1=1;D1=1;}//CD相通电,其他相断电 #define Coil_DA1 {A1=1;B1=0;C1=0;D1=1;}//D相通电,其他相断电 #define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部断电 unsigned int o; unsigned char Speed; /*------------------------------------------------ uS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时 长度如下 T=tx2+5 uS ------------------------------------------------*/ void DelayUs2x(unsigned char t) { while(--t); } /*------------------------------------------------ mS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0~255 这里使用晶振12M,精确延时请使用汇编 ------------------------------------------------*/ void DelayMs(unsigned char t) { while(t--) { //大致延时1mS DelayUs2x(245); DelayUs2x(245); } } /*********************************************************************************/ void Ir_work(void); void Ircordpro(void); void tim0_isr (void) interrupt 1 using 1 { irtime++; //用于计数2个下降沿之间的时间 } void EX0_ISR (void) interrupt 0 //外部中断0服务函数 { static unsigned char i; //接收红外信号处理 static bit startflag; //是否开始处理标志位 if(startflag) { if(irtime<63&&irtime>=33)//引导码 TC9012的头码,9ms+4.5ms i=0; irdata[i]=irtime;//存储每个电平的持续时间,用于以后判断是0还是1 irtime=0; i++; if(i==33) { irok=1; i=0; } } else { irtime=0; startflag=1; } } void delay(uchar z) { uchar x,y; for(x=z;x>0;x--) for(y=120;y>0;y--); } void TIM0init(void)//定时器0初始化 { TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值 TH0=0x00; //重载值 TL0=0x00; //初始化值 ET0=1; //开中断 TR0=1; } void EX0init(void) { IT0 = 1; //指定外部中断0下降沿触发,INT0 (P3.2) EX0 = 1; //使能外部中断 EA = 1; //开总中断 } void Ir_work(void)//红外键值散转程序 { switch(IRcord[2])//判断第三个数码值 { case 0x44: Speed=2; //数字越小,转速越大,力矩越小 o=256;//旋转一周时间为512,这里改成红外按住才转动,所以是100 Coil_OFF //步进电机参数 while(o--) //正向 { Coil_AB1 //遇到Coil_AB1 用{A1=1;B1=1;C1=0;D1=0;}代替 DelayMs(Speed); //改变这个参数可以调整电机转速 , Coil_BC1 DelayMs(Speed); Coil_CD1 DelayMs(Speed); Coil_DA1 DelayMs(Speed); } break;//电源 显示相应的按键值 case 0x40: Speed=2; //数字越小,转速越大,力矩越小 o=256;//旋转一周时间为512,这里改成红外按住才转动,所以是100 Coil_OFF //步进电机参数 while(o--)//反向 { Coil_DA1 //遇到Coil_AB1 用{A1=1;B1=1;C1=0;D1=0;}代替 DelayMs(Speed); //改变这个参数可以调整电机转速 , Coil_CD1 DelayMs(Speed); Coil_BC1 DelayMs(Speed); Coil_AB1 DelayMs(Speed); } break;//电源 显示相应的按键值 case 0x07: Speed=2; //数字越小,转速越大,力矩越小 o=20;//旋转一周时间为512,这里改成红外按住才转动,所以是100 Coil_OFF //步进电机参数 while(o--) //正向 { Coil_AB1 //遇到Coil_AB1 用{A1=1;B1=1;C1=0;D1=0;}代替
史海拾趣
|
单片机又称单片微控制器]它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与 ...… 查看全部问答> |
|
如果我要在NDIS中间驱动层拦截网络数据包,那么,如果要把NDIS中间驱动层中截获的一个NDIS封包全部输出来,包括头还有数据部分,以二进制的形式全部显示出来,应如何实现呢?… 查看全部问答> |
|
我现在想开发一款USB驱动程序,我目前 的操作系统是Win2003,请问使用win2003DDK开发的驱动程序,能够在WIN2000及XP上使用吗?DDK有什么要求吗?谢谢,见笑了.… 查看全部问答> |
|
接到了二个offer,一个是作电子词典嵌入式开发,一个是作linux计费开发,现在不知去哪个好? 我以前的工作是在linux下的开发,但我有很想往嵌入式那边尝试,但现在不知道作电子词典开发有没有前途?因为那家公司的电子词典的操作系统不是linux,也不 ...… 查看全部问答> |
|
#include \"60S2_V3.h\" char bdata bittest ; sbit TIbit = bittest ^ 0 ; unsigned long i , sum = 0 , result = 0 , temp , ASC[] , count ; u8 T_COUNT , adc_hi , adc_low , a , sign ; void main(void) { / ...… 查看全部问答> |
|
下面一个问题,已经困扰我很久了,一直找不到罪魁祸首,希望有高手帮我解答,非常感谢! 问题背景: 1.此项目为BLDC电机供电,提供310V,15V,GND,电机的VSP与FG由其他控制板输出或接收 2.附件原理图只是电源部分的简要示意图,非完整原理图, ...… 查看全部问答> |




