找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1146|回复: 5
打印 上一主题 下一主题
收起左侧

怎么样把直流电动机调速的代码整合到温度传感器的代码中 求救!

[复制链接]
跳转到指定楼层
楼主
ID:985176 发表于 2021-12-9 16:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
任务:代码整合一份          完成温度采集并显示
          完成声光报警
          按键调整温度上下限

          直流电动机调速

前三个任务都可以
#include "reg52.h"
sbit DQ=P1^4;
unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0XBF};
unsigned char dspbuf[]={10,10,10,10,10,10,10,10};
unsigned char dspcom=0;
unsigned int num=0;
unsigned char low_temp=7;
unsigned char high_temp=26;
unsigned char intr;
void delayms(unsigned int x);
bit temper_flag=0;
void Delay_OneWire();
void Write_DS18B20();
bit init_ds18b20();
unsigned char rd_temperature();
sbit S7=P3^0;
sbit S6=P3^1;
sbit S5=P3^2;
sbit S4=P3^3;

void display(void);

void main(void)
{
        unsigned char temperature;
        TMOD|=0x01;
        TH0=(65536-2000)/256;
        TL0=(65536-2000)%256;
        EA=1;                           
        ET0=1;
        TR0=1;
        while(1)
        {
                delayms(10);
                if(S7==0)
                {
                        delayms(10);
                        if(S7==0)
                        {
                                low_temp+=1;
                                if(low_temp>26)
                                {
                                        low_temp=7;
        }        
                                dspbuf[0]=low_temp/10;
                                dspbuf[1]=low_temp%10;
                                
                        }
                                while(!S7);
                }
                if(S6==0)
                {
                        delayms(10);
                        if(S6==0)
                        {
                                low_temp-=1;
                                if(low_temp>15)
                                {
                                        low_temp=07;
        }        
                                dspbuf[0]=low_temp/10;
                                dspbuf[1]=low_temp%10;
                        }
                        while(!S6);
                }
                                if(S5==0)
                {
                        delayms(10);
                        if(S5==0)
                        {
                                high_temp+=1;
                                if(high_temp>26)
                                {
                                        high_temp=7;
        }        
                                dspbuf[3]=high_temp/10;
                                dspbuf[4]=high_temp%10;
                        }
                        while(!S5);
                }
                   if(S4==0)
                {
                        delayms(10);
                        if(S4==0)
                        {
                                high_temp-=1;
                                if(high_temp>26)
                                {
                                        high_temp=7;
        }        
                                dspbuf[3]=high_temp/10;
                                dspbuf[4]=high_temp%10;
                        }
                        while(!S4);
                }
                dspbuf[0]=low_temp/10;
                dspbuf[1]=low_temp%10;
                dspbuf[3]=high_temp/10;
                dspbuf[4]=high_temp%10;
               
        if(temper_flag)
        {
                temper_flag=0;
                temperature=rd_temperature();        
        }
                dspbuf[6]=temperature/10;
                dspbuf[7]=temperature%10;
        if(temperature>=high_temp||temperature<=low_temp)
        {
                P0=0XFF;
                P2=P2&0X1F|0XA0;
                P2&=0X1F;
               
                P0=0X00;
                P2=P2&0X1F|0X80;
                P2&=0X1F;
        }
        else
        {
                P0=0X00;
                P2=P2&0X1F|0XA0;
                P2&=0X1F;
               
                P0=0XFF;
                P2=P2&0X1F|0X80;
                P2&=0X1F;
        }
        }
}

void isr_time_0(void) interrupt 1
{
        TH0=(65536-2000)/256;
        TL0=(65536-2000)%256;
        display();
        if(++intr==100)
        {
                intr=0;
                temper_flag=1;
        }
}

void display(void)
{
        P0=0XFF;
        P2=P2&0X1F|0XE0;
        P2=P2&0X1F;

        P0=0X01<<dspcom;
        P2=P2&0X1F|0XC0;
        P2=P2&0X1F;

        P0=tab[dspbuf[dspcom]];
        P2=P2&0X1F|0XE0;
        P2=P2&0X1F;

    if(++dspcom==8)
         {
    dspcom=0;
        }
}

void Delay_OneWire(unsigned int t)
{
        unsigned char i;                                 
        while(t--)
        {
                for(i=0;i<12;i++);
        }
}

void Write_DS18B20(unsigned char dat)
{
        unsigned char i;
        for (i=0;i<8;i++)
        {
                  DQ=0;
                  DQ=dat&0x01;
                  Delay_OneWire(5);
                  DQ=1;
                  dat>>=1;
         }
         Delay_OneWire(5);
}

unsigned char Read_DS18B20(void)
{
        unsigned char i;
        unsigned char dat;
        for (i=0;i<8;i++)
        {
                DQ=0;
                dat>>=1;
                DQ=1;
                if(DQ)
                {
                        dat|=0x80;
                }
                Delay_OneWire(5);
        }

        return dat;
}

bit init_ds18b20(void)
{
         bit initflag=0;
         DQ = 1;              
         Delay_OneWire(12);   
         DQ = 0;              
         Delay_OneWire(80);   
         DQ = 1;              
         Delay_OneWire(10);         
         initflag=DQ;
         Delay_OneWire(5);         
         return initflag;         
}

unsigned char rd_temperature(void)
{
        unsigned char low,high;
        char temp;
        init_ds18b20();
        Write_DS18B20(0xCC);
        Write_DS18B20(0x44);
        Delay_OneWire(200);
        init_ds18b20();
        Write_DS18B20(0xCC);
        Write_DS18B20(0xBE);
        low=Read_DS18B20();        
        high=Read_DS18B20();
        temp=high<<4;
        temp|=(low>>4);
        return temp;
}
void delayms(unsigned int x)
{
        unsigned int i,j;
        for(i=x;i>0;i--)
                for(j=110;j>0;j--);
}


直流电动机代码
#include<reg52.h>
sbit S7=P3^0;
unsigned char Key_Num,PWM_ON,ms;
unsigned char code Tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xFF};
void delayms(unsigned int);
main()
{
        TMOD=0X01;
        TH0=0XFC;
        TL0=0X66;
        EA=1;
        ET0=1;
        TR0=1;
        P0=0X80;
        P2=P2&0X1F|0XC0;
        P2&=0X1F;
        P0=Tab[0];
        P2=P2&0X1F|0Xe0;
        P2&=0X1F;
        while(1)
        {
                if(!S7)
                {
                        delayms(30);
                        if(!S7)
                        {
                                if(++Key_Num>=5)
                                        Key_Num=1;
                                switch(Key_Num)
                                {
                                        case 1:PWM_ON=3;     //1μμ
                                                 break;
                                        case 2:PWM_ON=5;     //2μμ
                                                 break;
                                        case 3:PWM_ON=7;     //3μμ
                                                 break;
                                        case 4:PWM_ON=9;     //4μμ
                                                 break;
        }
                                P0=Tab[Key_Num];   
                                P2=P2&0X1F|0XE0;
                                P2&=0X1F;
      }
                        while(!S7);
    }
  }
}
void T0_Int() interrupt 1
{
        TH0=0XFC;
        TL0=0X66;
        if(++ms>=10)   
                ms=0;
        if(ms<PWM_ON)   
                P0=P0|0X20;
        else
                P0=P0&0X9F;  
        P2=P2&0X1F|0XA0;
        P2&=0X1F;
}
void delayms(unsigned int x)
{
        unsigned int i,j;
        for(i=x;i>0;i--)
           for(j=113;j>0;j--);
}

不会整合 求救一下
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:262 发表于 2021-12-9 17:53 | 只看该作者
先看一下黑坛里面解决此问题的相关帖子吧, 举一反三
MCU程序?多个功能如何组合http://www.51hei.com/bbs/dpj-205474-1.html
单片机程序合并教程:http://www.51hei.com/bbs/dpj-157117-1.html
整合2个程序:http://www.51hei.com/bbs/dpj-192954-1.html
单片机怎么把两个C程序整合到一起运行?http://www.51hei.com/bbs/dpj-213562-1.html
回复

使用道具 举报

板凳
ID:319585 发表于 2021-12-9 20:59 来自手机 | 只看该作者
据我所知,一般的电机控制器都不会带温度传感器,都是把温度传感器放到显示控制面板上,然后通过串口发送温度信息。那个ds18b20读取数据需要延时,延时的时候电机控制器有可能就卡顿了吧?
回复

使用道具 举报

地板
ID:382454 发表于 2021-12-10 13:09 来自手机 | 只看该作者
代码那么多,看了眼花。就不看了,基本逻辑是这样的,cpu热行电机电流输出,隔一锻时间检查温度,或电机pwm速度控制,突然间妈哟高温着火了,cpu执行关断所有电流。
回复

使用道具 举报

5#
ID:985176 发表于 2021-12-10 14:56 | 只看该作者
heicad 发表于 2021-12-9 17:53
先看一下黑坛里面解决此问题的相关帖子吧, 举一反三
MCU程序?多个功能如何组合http://www.51hei.com/bbs/d ...

时间不够呀   希望您可以指导指导
回复

使用道具 举报

6#
ID:741880 发表于 2021-12-12 12:16 | 只看该作者
好久没有看 这种 没有任何操作系统的,硬循环了。 也行吧~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表