历史上的今天
返回首页

历史上的今天

今天是: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;}代替

推荐阅读

史海拾趣

成都成电硅海公司的发展小趣事

在电子行业中,知识产权的保护尤为重要。成都成电硅海公司非常重视知识产权的申请和保护工作。公司成立了专门的知识产权部门,负责专利、商标等知识产权的申请和管理。同时,公司还积极参与各种知识产权的维权行动,维护自身的合法权益。这种对知识产权的重视和保护,不仅提升了公司的核心竞争力,也为公司在电子行业的发展提供了有力的法律保障。

Datapro International Inc公司的发展小趣事

面对不断变化的市场环境和客户需求,Datapro International Inc公司始终保持着对创新的追求。他们不断投入研发资源,推动新技术和新产品的不断涌现。同时,他们还积极关注行业趋势和客户需求的变化,以便及时调整自己的发展战略和业务模式。

在未来的发展中,Datapro International Inc公司将继续秉承“创新、质量、服务”的理念,致力于为客户提供更加卓越的产品和服务。同时,他们也将积极探索新的市场机会和商业模式,以实现更加持续、稳健的发展。

请注意,以上故事均为虚构内容,旨在展示一个电子行业公司可能的发展历程和故事。如需了解Datapro International Inc公司的真实历史和发展故事,请查阅相关官方资料或行业报告。

富瀚(Fullhan)公司的发展小趣事
确保保护器的电源供应正常,无电压波动或断电现象。
Capital Advanced Technologies公司的发展小趣事

面对未来电子行业的发展趋势和市场变化,CAT制定了明确的发展战略和布局。公司将继续加大研发投入,推动技术创新和产业升级;同时,积极拓展新的应用领域和市场空间,寻求与更多合作伙伴的共赢发展。此外,CAT还将注重人才培养和团队建设,为公司的长远发展提供坚实的人才保障。

通过以上五个故事,我们可以看到Capital Advanced Technologies公司在电子行业里发展起来的艰辛与辉煌。他们凭借技术创新、市场拓展、品质管理和战略布局等方面的不断努力,逐渐成为了电子行业的领军企业。

DUCATI公司的发展小趣事

品质管理是CAT发展的重要保障。公司建立了严格的质量管理体系,从原材料采购到产品制造、检验、包装等各个环节都进行严格的品质控制。CAT还注重与客户的沟通与协作,及时了解客户需求,为客户提供个性化的解决方案和优质的售后服务。这些举措使得CAT赢得了客户的广泛信赖和长期合作。

Connection One公司的发展小趣事

在电子行业的初期,Connection One公司凭借其创始人对半导体技术的深刻理解,成功研发出一款具有划时代意义的芯片。这款芯片不仅性能卓越,而且功耗极低,立即在市场上引起了轰动。公司因此迅速积累了第一笔资金,为后续的研发和扩展打下了坚实基础。

问答坊 | AI 解惑

数据采集资料

数据采集,大家多交流问题,多提问!…

查看全部问答>

什么是单片机?单片机有什么用?

单片机又称单片微控制器]它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与 ...…

查看全部问答>

关于NDIS显示数据包内容的问题

如果我要在NDIS中间驱动层拦截网络数据包,那么,如果要把NDIS中间驱动层中截获的一个NDIS封包全部输出来,包括头还有数据部分,以二进制的形式全部显示出来,应如何实现呢?…

查看全部问答>

To 一个简单的提问

我现在想开发一款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.附件原理图只是电源部分的简要示意图,非完整原理图, ...…

查看全部问答>

IMP813L

那位大哥大姐用过IMP813L看门狗芯片啊,求帮助,求解脱。 WDI喂狗信号都放软件延时函数里了(WDI = ~WDI),时间绝对小于1.6秒,为什么还是产生复位信号,RESET变高电平啊? 真心急!!!!!!!!!!!!!!!!!!…

查看全部问答>

会电机控制的都进来

本帖最后由 liuming759 于 2014-1-13 15:56 编辑 电机控制的朋友请赐教问题如下: 1.他励电机的控制需要注意哪些方面?如何发挥他励电机的最大性能 2.电机控制方面程序的框架最好该如何搭接? 3.如果说是F28035的EPWM模块,该如何设置合适 ...…

查看全部问答>

op27电路图

    麻烦各位做电路的帮小妹看看,这个电路是实现什么功能的,输入输出我都看不懂啊。。。。 …

查看全部问答>