单片机智能温控风扇原理图PCB文件与源程序

发布者:RainbowDreamer最新更新时间:2020-02-17 来源: 51hei关键字:单片机  智能温控风扇  89c51 手机看文章 扫描二维码
随时随地手机看文章

主芯片为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()

{          

[1] [2] [3] [4]
关键字:单片机  智能温控风扇  89c51 引用地址:单片机智能温控风扇原理图PCB文件与源程序

上一篇:单片机简易8键电子琴程序
下一篇:基于STC15w单片机系列 自带的AD转换程序

推荐阅读最新更新时间:2024-11-24 13:28

意法半导体发布32美分STM32超值微控制器
基于ARM® Cortex™-M0的STM32F030超值系列微控制器让成本敏感型应用受益于32位优势 中国, 2013年7月11日 —— 横跨多重电子应用领域、全球领先的半导体供应商意法半导体(STMicroelectronics,简称ST;纽约证券交易所代码:STM)发布最新的STM32F030超值系列微控制器。批量订货最低价仅为0.32美元,STM32F030是低预算项目的理想选择,同时还让设计人员有机会使用型号齐全且软硬件兼容的32位微控制器产品组合,从而提升应用性能,扩大产品系列。 全新STM32F030超值系列基于48MHz的ARM® Cortex™-M0处理器内核。与同类竞争产品不同,STM32F030虽然只有8位
[单片机]
单片机设计 测量频率
一、电路设计 单片机应用系统中,经常要对一个连续的脉冲波频率进行测量。在实际应用中,对于转速,位移、速度、流量等物理量的测量,一般也是由传感器转换成脉冲电信号,采用测量频率的手段实现。 使用单片机测量频率或周期,通常是利用单片机的定时计数器来完成的,测量的基本方法和原理有两种: 测频法:在限定的时间内(如1秒钟)检测脉冲的个数。 测周法:测试限定的脉冲个数之间的时间。 这两种方法尽管原理是相同的,但在实际使用时,需要根据待测频率的范围、系统的时钟周期、计数器的长度、以及所要求的测量精度等因素进行全面和具体的考虑,寻找和设计出适合具体要求的测量方法。 运行结果 二、部分代码 /*想要更多项目私wo!!!*/ #i
[单片机]
<font color='red'>单片机</font>设计 测量频率
AT系列51单片机简介
支持ISP的51 单片机 AT89S系列 ATMEL公司新推出的可在编程的MCS51兼容单片机AT89S51/52将全面替代AT89C51/52单片机。 AT89S系列单片机有以下特点: 兼容MCS51微控制器 4/8K字节FLASH存贮器支持在系统编程ISP1000次擦写 周期 128/256字节片内RAM 工作 电压 4.0V到5.5V 全静态时钟0 Hz 到33 MHz 三级程序加密 32个可编程IO口 2/3个16位定时/计数器 6/8个中断源 全双工 UART 完全的双工UART串行口 低功耗支持Idle和Power
[单片机]
如何构建STM32单片机keil的开发环境
新建工程 工程名设为stm32_demo,选择芯片型号为STM32F103B,如图, 因为下载的STM32库中有启动代码,所以这里选择“否”,不拷贝启动代码。 在工程文件下,新建Startup、Headers、User、Libraries、CMSIS、Lists、Output文件夹。 文件夹 用途 Startup 启动文件,Flash在16~32Kb小容量,64~128Kb中容量,256~512Kb大容量 CMSIS Cortex微控制器软件接口标准文件,该目录下文件适用所有Cortex系列 Libraries 存放STM32的驱动库文件 Headers 自定义的全局头文件 User 用户文件,我们把main.c放在该目录
[单片机]
如何构建STM32<font color='red'>单片机</font>keil的开发环境
基于PIC微控制器的LED驱动控制电路设计
1 引言   led作为一种供电电压低,功耗小,寿命长,无辐射的新型光源,应用领域日益扩大,成为固态照明的关键光源。许多固态照明应用常采用智能控制电路系统来驱动LED以履行各种功能和任务,譬如为确保流经LED的电流不受供电电压波动的影响维持恒定,从而使LED的亮度无明显变化的亮度调节就是控制电路系统的任务之一。亮度调节涉及电流调整与调光控制。控制电路系统的另一任务是失效识别。因LED具有很强的温度相关性,大多失效又与温度有关,故控制电路系统应能履行温度补偿。此外,通过硬件选择以适应不同亮度LED组合的驱动也极必要。一块芯片上可集成全部必要硬件功能的PIC微控制器,由于价格低廉,时钟频率高达20MHz,功耗极低和工作温度范围宽等
[电源管理]
基于PIC<font color='red'>微控制器</font>的LED驱动控制电路设计
51单片机定时器相关介绍
对于软件手段,我们在前面的课程已经详细讲到过,它最大的缺点就是占用单片机的“机时”,也就是耗费单片机的“精力”,从而降低了单片机的工作效率。而定时器则不同,它是单片机内部一个独立的功能模块,定时器一旦设置后,定时器便自动开始计时,当计时时间满后,便产生相应的中断,去处于中断函数内的程序,而在计时这段时间内,定时器和CPU是分别独立工作的,CUP此时就可以有时间去做其它的事情。所以为了提高单片机的工作效率和实现精确的延时,目前几乎所有的半导休生产厂商在设计单片机时,在内部都配置了定时器模块。下面51单片机内部的定时器进行介绍。 1、定时器/计数器概述 51单片机内部共有两个定时器/计数器模块T0和T1,对于52单片机内部又增
[单片机]
51<font color='red'>单片机</font>定时器相关介绍
N76E003AT20单片机串口0调试
一个按键1 如果按下,就使 N76E003串口0 发送1到串口调试助手,但是老是有问题,哪位大神帮帮我。代码如下: #include n76e003.h #include stdio.h #define uint32 unsigned int //typedef unsigned int uint32; void delay_us(int n) { int m; for(m=0;m } void delay_ms(int j) { int k; for(k=0;k delay_us(1000); } void P0_P1_Mode(void) { P0M1=0x3A; P0M2=0x3B; //设置P0 P1M1=0xA0;
[单片机]
Microchip推出8位、16位及32位USB单片机产品线
2008年6月5日,单片机和模拟半导体供应商——Microchip Technology Inc.(美国微芯科技公司)宣布推出由单一集成开发环境——免费的MPLAB® IDE支持的业内最完整的8位、16位及32位USB单片机(MCU)产品线。在丰富的8位USB PIC单片机产品基础上,Microchip现又推出全新的低功率16位PIC24F USB单片机系列,该系列器件与新的80 MHz高性能32位PIC32 USB单片机系列在引脚、外设及软件方面完全兼容。此外,Microchip还推出了低成本、占位面积小的PIC18F1XK50系列以扩展其8位USB低端产品线。整个USB PIC单片机系列均由免费的USB软件栈及USB类驱
[新品]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved