分享

基于51单片机设计的智能温控风扇(程序 电路图)

 xpxys99 2017-11-07

基于51单片机设计的智能温控风扇(程序+电路图)

电路图

基于51单片机设计的智能温控风扇(程序+电路图)

程序

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

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

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

#include

#define RdCommand 0x01 //定义ISP的操作命令

#define PrgCommand 0x02

#define EraseCommand 0x03

#define Error 1

#define Ok 0

#define WaitTime 0x01 //定义CPU的等待时间

sfr ISP_DATA=0xe2; //Flash数据寄存器地址(E2h)

sfr ISP_ADDRH=0xe3; //Flash高字节寄存器地址(E3h)

sfr ISP_ADDRL=0xe4; //Flash低字节寄存器地址(E4h)

sfr ISP_CMD=0xe5; //Flash命令模式寄存器地址(E5h)

sfr ISP_TRIG=0xe6; //Flash命令触发寄存器地址(E6h)

sfr ISP_CONTR=0xe7; //ISP/IAP控制寄存器地址(E2h)

sbit dula=P2^6;//U1锁存器的锁存端 000001111111 显示函数 11111100000

sbit wela=P2^7;//申明U2锁存器的锁存

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

uchar num;//定时器要用到

void ISP_IAP_enable(void); /* ================ 打开 ISP,IAP 功能 ================= */

void ISP_IAP_disable(void); /* =============== 关闭 ISP,IAP 功能 ================== */

void ISPgoon(void); /* ================ 公用的触发代码 ==================== */

uchar byte_read(unsigned int byte_addr); /* ========= 字节读 ============= */

void SectorErase(unsigned int sector_addr); /* =========== 扇区擦除 ============ */

void byte_write(unsigned int byte_addr, unsigned char original_data); /* ==== 字节写 ==== */

void display(); //000033333 显示函数 3333300000//

//数码管段选定义 0 1 2 3 4 5 6 7 8 9

uchar code smg_du[]={0x28,0xee,0x32,0xa2,0xe4,0xa1,0x21,0xea,0x20,0xa0,

0x60,0x25,0x39,0x26,0x31,0x71,0xff}; //断码

//数码管位选定义

uchar code smg_we[]={0xef,0xdf,0xbf,0x7f};

uchar dis_smg[8] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};

uchar smg_i = 3; //显示数码管的个位数

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

sbit pwm = P2^3; //蜂鸣器IO口定义

bit flag_lj_en; //按键连加使能

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

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

bit key_500ms ;

uchar f_pwm_l ; //越小越暗

uint temperature ; //

bit flag_300ms ;

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

uint t_high ,t_low; //温度上下限报警值

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

void delay_1ms(uint q)

{

uint i,j;

for(i=0;i<>

for(j=0;j<>

}

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

void delay_uint(uint q)

{

while(q--);

}

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

void display()

{

static uchar i;

i++;

if(i >= smg_i)

i = 0;

P1 = 0xff; //消隐

P3 = smg_we[i]; //位选

P1 = dis_smg[i]; //段选

}

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

void init_18b20()

{

bit q;

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; //把总线拿高 释放总线

}

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

void write_18b20(uchar dat)

{

uchar i;

for(i=0;i<>

{ //写数据是低位开始

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

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

delay_uint(5); // 60us

dq = 1; //释放总线

dat >>= 1;

}

}

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

uchar read_18b20()

{

uchar i,value;

for(i=0;i<>

{

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

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

dq = 1; //释放总线

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

value |= 0x80;

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

}

return value; //返回数据

}

…………限于本文篇幅 余下代码请从“51黑电子论坛”下载附件…………

直达链接:-------http://www./bbs/dpj-80671-1.html-----------

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约