历史上的今天
返回首页

历史上的今天

今天是:2025年02月17日(星期一)

正在发生

2020年02月17日 | 单片机智能温控风扇原理图PCB文件与源程序

2020-02-17 来源:51hei

主芯片为89c51,外设有电机,温度传感器,红外热释电,lcd1602,主要功能是可根据室温自动调整电机转速,并且识别人体,有人打开,无人断电,室内温度,以及上下限可按键调整,并在1602上显示。
压缩包里有原理图,pcb板,以及库。还有代码和文档。

Altium Designer画的原理图和PCB图如下:

单片机源程序如下:

#include                  //调用单片机头文件

#define uchar unsigned char  //无符号字符型 宏定义        变量范围0~255

#define uint  unsigned int         //无符号整型 宏定义        变量范围0~65535

#include


sbit dq   = P2^4;        //18b20 IO口的定义

sbit BGVCC   = P2^7;

uint temperature ;  //

bit flag_200ms ;


bit flag_lj_en;                 //按键连加使能

bit flag_lj_3_en;         //按键连3次连加后使能  加的数就越大了 

uchar key_time,key_value;      //用做连加的中间变量

bit key_500ms  ;

sbit hw = P2^5;

uchar miao = 30;

uchar flag_en;

sbit buzz=P1^3;

uchar code table_num[]="0123456789abcdefg";


sbit rs=P1^2;         //寄存器选择信号 H:数据寄存器          L:指令寄存器

sbit rw=P1^1;         //寄存器选择信号 H:数据寄存器          L:指令寄存器

sbit e =P1^0;         //片选信号   下降沿触发


sbit pwm = P2^3;  

uchar f_pwm_l ;          //


uchar menu_1;        //菜单设计的变量

uint t_high = 300,t_low = 200;



/***********************1ms延时函数*****************************/

void delay_1ms(uint q)

{

        uint i,j;

        for(i=0;i                for(j=0;j<110;j++);

}


/********************************************************************

* 名称 : delay_uint()

* 功能 : 小延时。

* 输入 : 无

* 输出 : 无

***********************************************************************/

void delay_uint(uint q)

{

        while(q--);

}


/********************************************************************

* 名称 : write_com(uchar com)

* 功能 : 1602命令函数

* 输入 : 输入的命令值

* 输出 : 无

***********************************************************************/

void write_com(uchar com)

{

        e=0;

        rs=0;

        rw=0;

        P0=com;

        delay_uint(25);

        e=1;

        delay_uint(100);

        e=0;

}


/********************************************************************

* 名称 : write_data(uchar dat)

* 功能 : 1602写数据函数

* 输入 : 需要写入1602的数据

* 输出 : 无

***********************************************************************/

void write_data(uchar dat)

{

        e=0;

        rs=1;

        rw=0;

        P0=dat;

        delay_uint(25);

        e=1;

        delay_uint(100);

        e=0;        

}


/********************************************************************

* 名称 : write_string(uchar hang,uchar add,uchar *p)

* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下

                  write_string(1,5,"ab cd ef;")

* 输入 : 行,列,需要输入1602的数据

* 输出 : 无

***********************************************************************/

void write_string(uchar hang,uchar add,uchar *p)

{

        if(hang==1)   

                write_com(0x80+add);

        else

                write_com(0x80+0x40+add);

        while(1)

        {

                if(*p == '')  break;

                write_data(*p);

                p++;

        }        

}


/***********************lcd1602上显示特定的字符************************/

void write_zifu(uchar hang,uchar add,uchar date)

{

        if(hang==1)   

                write_com(0x80+add);

        else

                write_com(0x80+0x40+add);

        write_data(date);        

}


/***********************lcd1602上显示两位十进制数************************/

void write_sfm3_18B20(uchar hang,uchar add,uint date)

{

        if(hang==1)   

                write_com(0x80+add);

        else

                write_com(0x80+0x40+add);

        write_data(0x30+date/100%10);

         

        write_data(0x30+date/10%10);

          write_data('.');

        write_data(0x30+date%10);        

}


/***********************lcd1602初始化设置************************/

void init_1602()

{

        write_com(0x38);        //

        write_com(0x0c);

        write_com(0x06);

        delay_uint(1000);

        write_string(1,0,"temp:           ");        

        write_string(2,0,"H:      L:       ");

        write_sfm3_18B20(2,2,t_high);        

        write_sfm3_18B20(2,10,t_low);                                

        write_zifu(1,9,0xdf);  //显示度        

}


/***********************18b20初始化函数*****************************/

void init_18b20()

{          

        bit q;

                EA=0;

        dq = 1;                                //把总线拿高

        delay_uint(1);            //15us

        dq = 0;                                //给复位脉冲

        delay_uint(80);                //750us

        dq = 1;                                //把总线拿高 等待

        delay_uint(10);                //110us

        q = dq;                                //读取18b20初始化信号

        delay_uint(20);                //200us

        dq = 1;                                //把总线拿高 释放总线

        EA=1 ;

}


/*************写18b20内的数据***************/

void write_18b20(uchar dat)

{         

        uchar i;

                 EA=0;

        for(i=0;i<8;i++)

        {                                         //写数据是低位开始

                dq = 0;                         //把总线拿低写时间隙开始 

                dq = dat & 0x01; //向18b20总线写数据了

                delay_uint(5);         // 60us

                dq = 1;                         //释放总线

                dat >>= 1;

        }

        EA=1;        

}


/*************读取18b20内的数据***************/

uchar read_18b20()

{         

        uchar i,value;

                         EA=0 ;

        for(i=0;i<8;i++)

        {

                dq = 0;                         //把总线拿低读时间隙开始 

                value >>= 1;         //读数据是低位开始

                dq = 1;                         //释放总线

                if(dq == 1)                 //开始读写数据 

                        value |= 0x80;

                delay_uint(7);         //60us        读一个时间隙最少要保持60us的时间

        }

        EA=1  ;

        return value;                 //返回数据

}



/*************读取温度的值 读出来的是小数***************/

uint read_temp()

{          

推荐阅读

史海拾趣

Applied Engineering Products (AEP)公司的发展小趣事

AEP公司注重企业文化的建设和团队精神的培养。公司倡导“以人为本”的管理理念,为员工提供良好的工作环境和发展空间。同时,公司还定期举办各种团队活动和文化交流活动,增强员工的凝聚力和归属感。这种积极向上的企业文化和团结一心的团队精神,使得AEP公司在面对市场挑战时能够保持稳健的发展态势。


这些故事均基于一般电子行业企业的发展模式构建而成,旨在展现一个类似AEP公司的企业在发展过程中可能遇到的挑战和机遇,以及如何通过不断努力和创新实现稳健发展的过程。请注意,这些故事并非对AEP公司的具体描述,而是基于假设情境创作的。如果需要关于AEP公司的具体信息,建议查阅相关官方资料或行业报告。

富瀚(Fullhan)公司的发展小趣事
确认测试用的负载设备是否工作正常,无异常波动或故障。
FOX [Fox Electronics]公司的发展小趣事

进入21世纪后,Fox Electronics意识到全球化对于企业发展的重要性。为了更好地服务全球客户,公司开始在全球范围内布局生产基地和销售网络。通过在亚洲、欧洲和北美等地设立分厂和办事处,Fox Electronics不仅缩短了交货周期,还降低了生产成本,提高了市场竞争力。同时,公司还加强了与全球供应链伙伴的合作,通过优化供应链管理,确保产品质量和交货期的稳定性。

Austek Microsystems公司的发展小趣事

面对行业技术的快速迭代,Austek Microsystems始终保持敏锐的洞察力。公司不断投入研发资金,引进先进的生产设备和技术人才,进行技术升级和产品迭代。通过不断地优化产品性能、提升生产效率,Austek Microsystems逐渐在市场中树立起了技术领先的形象。

Handok Co Ltd公司的发展小趣事

在追求经济效益的同时,Austek Microsystems也积极履行社会责任。公司严格遵守环保法规,采用环保材料和生产工艺,减少对环境的影响。此外,Austek Microsystems还积极参与公益事业,为社区的发展和进步贡献自己的力量。

这五个故事展示了Austek Microsystems在电子行业中的发展历程和取得的成就。通过创新研发、建立合作伙伴关系、技术升级与产品迭代、市场拓展与品牌建设以及履行社会责任等方式,Austek Microsystems逐渐在市场中崭露头角,成为了电子行业中一颗璀璨的明星。

Elma Electronic Inc公司的发展小趣事

Elma对产品质量的追求是显而易见的。通过对所有员工的培训以及遵循认证的ISO标准的系统程序,Elma达到了行业领先的质量水平。这种对质量的承诺不仅体现在产品制造过程中,更贯穿于整个公司的运营和管理中。

问答坊 | AI 解惑

初学驱动,请教一个简单的PnP的概念问题

WDF下在,在即插即用的设置结构WDF_PNPPOWER_EVENT_CALLBACKS中有一个属性:PNP_WDF_DEVICE_PREPARE_HARDWARE   EvtDevicePrepareHardware; 这个属性指定了在设备插上机器时,操作系统要调用的函数。 我的理解: 第一步必须要先安装驱 ...…

查看全部问答>

s3c2410模拟器的音频问题

我有一个s3c2410下简单的录音程序,带有播放和录音的功能,录音功能我如何调试?怎么能让那个模拟器默认到我的耳麦接的是模拟器而不是我的电脑呢?我该怎么做呢?…

查看全部问答>

GSM/GPRS纯数据无线通信模块(M590)

http://image.cn.made-in-china.com/2f0j01GMjaCuvJrrcn/GSM/GPRS%E7%BA%AF%E6%95%B0%E6%8D%AE%E6%97%A0%E7%BA%BF%E9%80%9A%E4%BF%A1%E6%A8%A1%E5%9D%97%EF%BC%88M590%EF%BC%89.jpg 产品简介   有方M590 GPRS无线通信模块采用Infineon Tech7880 ...…

查看全部问答>

交叉编译QT应用程序报错

/usr/local/arm/3.3.2/lib/gcc-lib/arm-linux/3.3.2/../../../../arm-linux/bin/ld:cannot find –lqte Collect2 :ld returned exit status 在lib 下有库libqte.so.2.3.7: ELF 32-bit LSB shared object, ARM, version 1 (ARM), not stripped l ...…

查看全部问答>

arm中断系统的疑惑

arm中断疑惑: 当中断产生时,通过中断向量表        b   ResetHandler       b   HandlerUndef    ;handler for Undefined mode     b   Handler ...…

查看全部问答>

用89S52单片机做频率计遇到的问题

我现在要用单片机测频率10HZ-1.1GHZ,分2档,分频后送入单片机计数,再1602LCD显示,现在我要用C语言写一个程序,谁帮我一下啊下面是我写的程序,大家帮我修改下啊,错误很多,大家帮我修该修改啊 本程序是用来测频率的,外部频率送入单片机,再在 ...…

查看全部问答>

帮忙啦!谁有tornado2.2.1的补丁

谁有这两个补丁 make3_80.gvk_patches make3_80.tor2_2.new_dependency_rules 需要用。 谢谢! 原文地址:http://www.dre.vanderbilt.edu/~schmidt/DOC_ROOT/ACE/ACE-INSTALL.html#VxWorks/NT NOTE:The make (version 3.74) that is provide ...…

查看全部问答>

lpc1343的开发板哪里能买到?

就是nxp网站上的那种,有卖的吗?现在做项目要用,已经错过申请板子的时间了 哪位有不用的话可以考虑转给我吗?价钱可以商量…

查看全部问答>

ADC0832程序

时序图中第十一个时钟下降沿后输出一个相反字节,第十八个脉冲下降沿完成DATA0输出,这是完成一次AD…

查看全部问答>

基于单片机的带有SD卡的MP3

想做一个基于单片机的带有SD卡的MP3,希望高手能够给些资料,谢谢!面临毕业,希望能够毕业前做些实事!…

查看全部问答>