历史上的今天
返回首页

历史上的今天

今天是:2024年12月17日(星期二)

正在发生

2019年12月17日 | 按钮 温度 红外三种方式控制电机转速的单片机程序

2019-12-17 来源:elecfans

电路原理图如下:
 

单片机源程序如下:

#include

#include

unsigned int times;

unsigned int controlway;

unsigned int flag=0;

unsigned int flaghongwai=0;

//电机控制

sbit out3=P2^2;

sbit out1=P2^0;

sbit out2=P2^1;

//按钮控制

sbit button=P1^0;

sbit buttonup=P1^6;

sbit buttondown=P1^7;

//温度控制

sbit DQ=P3^7;

sbit temp=P1^1;

//红外控制

sbit hongwai=P1^2;

sbit        IR    = P3^2;

unsigned char        N[4];//识别码,操作码存放

unsigned char   X1,X2,X3,X4;


void delay(unsigned char n){

        do{

                _nop_();

                _nop_();

                _nop_();

                n--;

        }while(n);

}


//温度控制

void init_ds18b20(){

        unsigned char x=0;

        DQ=0;

        delay(120);

        DQ=1;

        delay(16);

        delay(80);

}

unsigned char readbyte(){

        unsigned char i=0;

        unsigned char date=0;

        for(i=8;i>0;i--){

                DQ=0;

                delay(1);

                DQ=1;

                date>>=1;

                if(DQ)

                date|=0x80;        

                delay(11);

        }        

        return (date);

}

void writebyte(unsigned char dat){

        unsigned char i=0;

        for(i=8;i>0;i--){

                DQ=0;

                DQ=dat&0x01;

                delay(5);

                DQ=1;

                dat>>=1;

                delay(5);

        }        

}

unsigned char retemp(){

        unsigned char a,b,tt;

        unsigned int t;

        init_ds18b20();

        writebyte(0xcc);

        writebyte(0x44);

        init_ds18b20();

        writebyte(0xcc);

        writebyte(0xbe);

        a=readbyte();

        b=readbyte();

        t=b;

        //t=t<<8;

        t<<=8;

        t=t|a;

        tt=t*0.0625;

        return (tt);

}


//按键检测,电机转速控制

timer0 () interrupt 1 {

        unsigned char tempread=0;

        if(button==0){

                controlway=1;                

        }else if(temp==0){

                controlway=2;

        }else if(hongwai==0){

                controlway=3;

        }else{

                controlway=1;

        }

        switch(controlway){

                        case 1:

                                if(buttonup==0){

                                         if(times<10000){

                                                times+=1000;

                                        }

                                }else if(buttondown==0){

                                         if(times>0){

                                                times-=1000;

                                        }

                                }

                                delay(100);

                        break;

                        case 2:

                                flag++;

                                if(flag==20)

                                {

                                        tempread=retemp();

                                        if(tempread>24&&tempread<34){ 

                                         times=1000*(tempread-24);

                                        }else{

                                                times=10000;

                                        }

                                        flag=0;

                                }

                        break;

                        case 3:

                        //转换为外部中断

                                IT0 = 0; 

                                EX0 = 1;

                        break;

                }

        TH0=0x3c;

        TL0=0xb0;

}          

//红外接收信号

/********************** 外部中断函数************************/

void exint0() interrupt 0 

{          

   unsigned int cnt;

   unsigned char i;

   EX0 = 0;

   cnt = 0;        

        

   while(!IR) cnt++;                               //记录引导码时间 

   if(cnt < 1000){EX0=1;return;}                   //9ms的计数值(12MHz:1000< cnt <1500)

           

   cnt = 0;                         

   while(IR) if(cnt++ > 400){EX0=1;return;}        //防卡死,超时保护(12MHz: > 300)    

   if(cnt < 200){EX0=1;return;}                    //(12MHz不分频: <260)            


   for(i=0; i<32; i++)                             //读取32位位码

       {

         cnt = 0;                                                                                                                                                

         while(!IR);                       

         while(IR) if(cnt++ > 200){EX0=1;return;}  //超时保护(12MHz:>=200)

         N[i/8] >>= 1;

推荐阅读

史海拾趣

EFC [Electronic Film Capacitors, Inc.]公司的发展小趣事

随着公司规模的扩大和实力的增强,EFC公司开始将目光投向国际市场。他们积极参加各种国际展会和交流活动,与全球各地的客户和合作伙伴建立了广泛的联系。同时,EFC还根据不同国家和地区的市场需求,推出定制化的产品和服务。这种灵活多变的市场策略使EFC在国际市场上迅速崛起。

Black Box Corporation公司的发展小趣事

在数字化时代,通信技术的更新换代速度极快。为了保持竞争优势,Black Box不断投入研发,推出了一系列创新产品和技术。例如,公司研发了一款智能网络管理平台,能够实时监控网络状态并进行故障预警。这一技术创新大大提高了网络的稳定性和安全性,赢得了客户的广泛好评。

AW Industries Inc公司的发展小趣事

在国内市场取得成功后,AW Industries Inc开始寻求国际化发展。公司首先选择了几个具有潜力的海外市场进行拓展,并通过与当地企业合作、建立销售网络等方式逐步打开市场。随着国际化战略的深入实施,公司的业务范围不断扩大,国际市场份额也逐步增加。

Astec [Astec America, Inc]公司的发展小趣事

随着全球环保意识的不断提高,Astec也开始关注绿色环保和可持续发展问题。公司积极采用环保材料和节能技术,推出了一系列绿色电源产品。同时,Astec还加大了对环保技术的研发力度,努力在保持产品性能的同时,降低生产过程中的能耗和排放。这些举措不仅有助于公司应对环保法规的挑战,还提升了公司的社会形象。

First Switchtech公司的发展小趣事

随着物联网、智能家居等新兴技术的兴起,First Switchtech公司(或类似公司)看到了跨界合作的新机遇。公司积极与智能家居厂商、物联网平台等合作伙伴开展深度合作,共同研发具有创新性的智能开关产品。这些产品不仅实现了开关的远程控制、智能联动等功能,还为用户提供了更加便捷、舒适的智能生活体验。通过跨界合作,First Switchtech公司成功拓展了业务领域,并在智能家居市场中占据了重要位置。

Hantronix公司的发展小趣事

面对电子行业日益激烈的竞争环境,HANBIT Electronics深刻认识到供应链整合的重要性。2015年,公司启动了全面的供应链优化项目,通过引入先进的ERP系统和自动化生产设备,实现了生产流程的数字化和智能化改造。同时,公司加强与上下游合作伙伴的沟通与协作,建立了稳定的供应链体系。这一举措不仅提高了生产效率和产品质量,还有效降低了库存成本和运营风险。

问答坊 | AI 解惑

关于信号传输协议中的Blanking(空白)

我在BT.656(一个视频数据传输协议)的数据传输协议中看到,对数据的传输格式规定有相当大小的Blanking部分,占到整个数据传输块的很大一部分,我弄不清这个Blanking有什么用处呢?…

查看全部问答>

Windows ce 怎么共享一个中断

如果我要扩展串口 用16c554的话 那如果我一个串口用一个中断的话那样中断就太费了 ,我看到网上说可以共享一个中断,不知道怎么操作方法。使用一个irq吗…

查看全部问答>

现在嵌入开发的前景如何,想去参加一下培训

现在嵌入开发的前景如何,想去参加一下培训 主要目的是想转行做开发…

查看全部问答>

embedded vb 如何把它编译的程序,转成cab阿。在线等

embedded vb 如何把它编译的程序,转成cab阿。在线等 我初次是用这个软件,在他的模拟ppc 2002上已经可以使用了,但是我想安装在真实的机器上测试,不知道怎么弄   希望搞人指教…

查看全部问答>

STM32缺点:竟然没低电平触发外部中断

STM32触发方式只有上升沿或者下降沿啊。。。郁闷。。。…

查看全部问答>

ICkey

刚刚在ICkey买了一块LaunchPad,已经网银付款完毕了,但是还是显示的未付款,不知道怎么回事请问有谁在ICkey买过东西吗     大约多长时间到货呢    有没有人遇到和我一样的情况啊   打他们公司的电话和QQ都没有人 &n ...…

查看全部问答>