历史上的今天
返回首页

历史上的今天

今天是:2025年01月10日(星期五)

正在发生

2021年01月10日 | 用单片机开发板做温控风扇PWM调速

2021-01-10 来源:51hei


能够利用PWM调速原理实现对系统的控制对象(直流电机)进行转速控制,当温度低于系统设置温度下限时直流电机停止工作,到达设置温度的下限和上限之间时以1档的速度工作,当温度高于系统设置温度上限时直流电机全速工作其中上下限温度可以在数码管上人工设置,数码管上能够显示当前的实时温度。


单片机源程序如下:

#include

#include                         //包含头文件

typedef unsigned int u16;          //对数据类型进行声明定义 ,用u16表示 unsigned int

typedef unsigned char u8;         //                用 u8表示  unsigned char


/**定义各引脚**/

sbit led=P2^0;//led

sbit dj=P1^0;//电机

sbit DQ=P3^7;//温度传感器

//////////按键接口/////////////////////////////////

sbit key1=P3^1;//设置温度

sbit key2=P3^0;//温度加

sbit key3=P3^2;//温度减

///////////数码管的四个位/////////////////////////////

sbit LSA=P2^2;

sbit LSB=P2^3;

sbit LSC=P2^4;

                          

/*****共阴数码管段选*****/

u8 table[22]=

{0x3F,0x06,0x5B,0x4F,0x66,

0x6D,0x7D,0x07,0x7F,0x6F,

0x77,0x7C,0x39,0x5E,0x79,0x71,

0x40,0x38,0x76,0x00,0xff,0x37};//'-',L,H,灭,全亮,n         16-21


/***定义各变量***/

u16 wen_du;//温度变量  

u16 shang,xia; //对比温度暂存变量

u8 dang;//档位显示

u8 flag;         //标志位

u8 d1,d2,d3;//显示数据暂存变量

u8 j        ;


/***延时函数***/

void delay(u16 ms)                //延时函数,大约延时25us

{

        u8 x;

        for(ms;ms>0;ms--)

                for(x=10;x>0;x--);

}



/***********ds18b20延迟子函数(晶振12MHz )*******/

void delay_18B20(u16 i)

{

        while(i--);

}

/**********ds18b20初始化函数**********************/

void Init_DS18B20()

{

         u8 x=0;

         DQ=1;          //DQ复位

         delay_18B20(8);  //稍做延时

         DQ=0;          //单片机将DQ拉低

         delay_18B20(80); //精确延时 大于 480us

         DQ=1;          //拉高总线

         delay_18B20(14);

         x=DQ;            //稍做延时后 如果x=0则初始化成功 x=1则初始化失败

         delay_18B20(20);

}

/***********ds18b20读一个字节**************/  

u8 ReadOneChar()

{

        u8 i=0;

        u8 dat=0;

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

         {

                  DQ=0; // 给脉冲信号

                  dat>>=1;

                  DQ=1; // 给脉冲信号

                  if(DQ)

                  dat|=0x80;

                  delay_18B20(4);

         }

         return(dat);

}

/*************ds18b20写一个字节****************/  

void WriteOneChar(u8 dat)

{

         u8 i=0;

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

         {

                  DQ=0;

                 DQ=dat&0x01;

            delay_18B20(5);

                 DQ=1;

            dat>>=1;

        }

}

/**************读取ds18b20当前温度************/

void ReadTemperature()

{

        u8 a=0;

        u8 b=0;

        u8 t=0;

        Init_DS18B20();

        WriteOneChar(0xCC);            // 跳过读序号列号的操作

        WriteOneChar(0x44);         // 启动温度转换

        delay_18B20(100);       // this message is wery important

        Init_DS18B20();

        WriteOneChar(0xCC);         //跳过读序号列号的操作

        WriteOneChar(0xBE);         //读取温度寄存器等(共可读9个寄存器) 前两个就是温度

        delay_18B20(100);

        a=ReadOneChar();            //读取温度值低位

        b=ReadOneChar();                   //读取温度值高位

        wen_du=((b*256+a)>>4);    //当前采集温度值除16得实际温度值

}



/***数码管显示函数***/

void display()//显示温度

{

        LSA=1;LSB=1;LSC=0;P0=table[d1];delay(10); //第1位

        P0=0x00;LSA=1;LSB=1;LSC=1;delay(1);

         

        LSA=0;LSB=1;LSC=0;P0=table[16];delay(10);//第2位

        P0=0x00;LSA=1;LSB=1;LSC=1;delay(1);


        LSA=1;LSB=0;LSC=0;P0=table[d2]; delay(10);//第3位

        P0=0x00;LSA=1;LSB=1;LSC=1;delay(1);


        LSA=0;LSB=0;LSC=0;P0=table[d3];delay(10);//第4位

        P0=0x00;LSA=1;LSB=1;LSC=1;delay(1);

}



/***键盘自动扫描及消抖***/

/***以及功能***/

void zi_keyscan()//自动模式按键扫描函数

{

        if(key1==0)                                                          //设置键按下

        {

                delay(30);                                                  //延时去抖

                if(key1==0)flag=1;                                  //再次判断按键,按下的话进入设置状态

                while(key1==0);//松手检测                  //按键释放

        }

        while(flag==1)                                                  //进入设置上限状态

        {

                d1=18;d2=shang/10;d3=shang%10;          //显示字母H 和上限温度值

                display();                                                  //调用显示函数

                if(key1==0)                                                  //判断设置键是否按下

                {

                        delay(30);                                          //延时去抖

                        if(key1==0)flag=2;                          //按键按下,进入设置下限模式

                        while(key1==0);//松手检测

                }

                if(key2==0)                                                  //加键按下

                {

                        delay(30);                                          //延时去抖

                        if(key2==0)                                          //加键按下

                        {

                                shang+=5;                                  //上限加5

                                if(shang>=100)shang=100;  //上限最大加到100

                        }while(key2==0);//松手检测

                }

                if(key3==0)                                                  //减键按下

                {

                        delay(30);                                          //延时去抖

                        if(key3==0)                                          //减键按下

推荐阅读

史海拾趣

广东爱晟电子(exsense)公司的发展小趣事

广东爱晟电子自成立以来,一直致力于NTC热敏电阻技术的研发和创新。在2010年代初,公司面临技术瓶颈,市场竞争激烈。然而,爱晟电子团队不畏艰难,通过深入研究,成功研发出具有更高精度和稳定性的NTC热敏电阻。这一技术突破迅速获得了市场的认可,公司销售额逐年攀升,奠定了在电子行业的领先地位。

Echelon公司的发展小趣事

在激烈的市场竞争中,Echelon始终保持对技术的热情和追求。公司不断投入研发资源,对LonWorks技术进行升级和优化,推出了一系列创新的产品和服务。这些新产品和服务不仅提升了Echelon的市场竞争力,还为客户带来了更加高效、便捷的能源管理体验。同时,Echelon还积极与其他科技公司合作,共同研发新技术、新产品,推动整个行业的发展。

Electronic-Bauteile Goerlitz GmbH公司的发展小趣事

为了进一步提升公司的竞争力,Electronic-Bauteile Goerlitz GmbH公司积极实施国际化战略。公司通过与国外知名企业的合作,引进先进的技术和管理经验;同时,公司还在海外设立了研发中心和生产基地,以便更好地满足当地市场的需求。这些举措使得公司的业务范围不断扩展,国际影响力不断增强。

Hirect公司的发展小趣事
考虑晶闸管的散热性能和热稳定性,以确保在长时间工作下能够稳定运行。
Cortina Systems Inc公司的发展小趣事
通过优化变压器的设计(如采用低损耗材料、改进绕组结构等)和选择合适的晶闸管(如低导通压降、低开关损耗的晶闸管),来减小电路中的能量损耗。
Dielectric Laboratories公司的发展小趣事

1955年,一家名为Dielectric Laboratories(DLI)的公司正式成立,它以其独特的电子元件研发能力在电子行业中崭露头角。起初,DLI专注于电容器的研发和生产,以其高品质和稳定性赢得了市场的认可。随着业务的逐步扩大,DLI不断投入研发资金,探索新的技术领域,为公司的长远发展奠定了坚实的基础。

问答坊 | AI 解惑

请教Cherishny兄

http://topic.eeworld.net/u/20090807/18/56aa3841-49c4-486a-813e-c639c0e05214.html?41788,从您的回复中看出我们问题很相识,希望得到回复,给您发消息未见回复。…

查看全部问答>

嵌入式软件开发网论坛 单片机开发

欢迎进入嵌入式软件开发网站讨论单片开发的相关问题 嵌入式软件开发网站首页 http://www.embeddedsoft.cn/ 嵌入式软件开发网站论坛 http://www.embeddedsoft.cn/bbs…

查看全部问答>

怪,怪,怪: 一个winform 中的textBox空件,输入的有值,程序中也能得到,但就是在页面上的显示不见了,变成了什么也没有输入的样子!!!! 有人遇

一个winform 中的textBox空件,输入的有值,程序中也能得到,但就是在页面上的显示不见了,变成了什么也没有输入的样子!!!!   有源程序,请大家帮忙啊!!! 谢谢…

查看全部问答>

WinCE下开发GIS怎样快速绘制

用GDI绘图速度不能满足要求,请问有没有更好的方法绘图啊,谢谢啦…

查看全部问答>

请教一个ppc模拟器问题

我现在用的是evc4.0+sp4,想找一个ppc模拟开发,不知道用什么版本的,在哪可以下载啊,谢谢了…

查看全部问答>

想在虚拟机里建个WIN98的驱动开发环境,不知需要准备那些工具?

本来买本教材,不幸的是它里面是用ms v7.0、masm及98DDK来讲解例子的。我从网上找到的98DDK和书里用的DDK还有点不一样。另外我想在虚拟机上做驱动开发调试不知该怎么做?…

查看全部问答>

LM3S中断Bit-banding技术

Bit-banding技术, 即给每个bit位建立一个对应的别名,通过别名来直接访问此bit 1MB的RAM给了32MB的别名空间,一个Byte也就需要8个别名,却给了32个空间,所以将别名空间的低2位不用,常为0.这样就使1MB的RAM空间和32MB的别名空间一一对应了. &n ...…

查看全部问答>

【MSP430共享】激光瓦斯监控系统显示终端的研究

瓦斯监测对于煤矿安全具有重要作用, 煤矿井下终端和监控分站之间的通信对完成瓦斯监测任务起到重要作用 。本系统采用低功耗单片机 MS P 4 3 0   F 1 4 7和 R S 4 8 5总线完成煤矿井下监控分站与远程终端的通信。传感器检测到的瓦斯浓度 ...…

查看全部问答>

一等奖二等奖公示

本帖最后由 paulhyde 于 2014-9-15 03:47 编辑 唉,有点遗憾  …

查看全部问答>

在Stellaris系列MCU中应用IQmath

 以前使用 C2000系列 MCU时,采用TI公司的 IQmath数学库做一些乘除运算,三角函数运算等。最近在学Stellaris系列MCU,发现 IQmath库同样可以应用于 Stellaris系列中,而且应用也很简单,同时大幅提升了计算速度。 …

查看全部问答>