51单片机温控风扇制作 数码管显示 Proteus仿真程序

发布者:疯狂小马最新更新时间:2019-12-16 来源: 51hei关键字:51单片机  温控风扇  数码管显示 手机看文章 扫描二维码
随时随地手机看文章

仿真原理图如下

 

制作出来的实物图如下:

 

单片机源程序如下:

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

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

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


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

uchar code smg_du[]={0x28,0xee,0x42,0x72,0xe5,0xa8,0x41,0x77,0x20,0xa0,

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

//数码管位选定义

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

uchar dis_smg[4] = {0};        

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

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


bit flag_lj_en;                 //按键连加使能

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

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

bit key_500ms  ;

sbit pwm = P2^3;  

uchar f_pwm_l ;          //


uint temperature ;  //

bit flag_300ms ;

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

uint t_high = 300,t_low = 230;           //温度上下限值 


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

void delay_1ms(uint q)

{

        uint i,j;

        for(i=0;i                for(j=0;j<120;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);            

        dq = 0;                                //给复位脉冲

        delay_uint(80);                 

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

        delay_uint(10);                 

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

        delay_uint(20);                 

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

}


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

void write_18b20(uchar dat)

{

        uchar i;

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

        {                                         //写数据是低位开始

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

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

                delay_uint(5);         

                dq = 1;                         //释放总线

                dat >>= 1;

        }        

}


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

uchar read_18b20()

{

        uchar i,value;

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

        {

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

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

                dq = 1;                         //释放总线

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

                        value |= 0x80;

                delay_uint(5);         // 读一个时间隙 

        }

        return value;                 //返回数据

}


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

uint read_temp()

{

        uint value;

        uchar low;                           //在读取温度的时候如果中断的太频繁了,就应该把中断给关了,否则会影响到18b20的时序

        init_18b20();                   //初始化18b20

        write_18b20(0xcc);           //跳过64位ROM

        write_18b20(0x44);           //启动一次温度转换命令

        delay_uint(50);                   


        init_18b20();                   //初始化18b20

        

        write_18b20(0xcc);           //跳过64位ROM

        write_18b20(0xbe);           //发出读取暂存器命令

        

        low = read_18b20();           //读温度低字节

        value = read_18b20();  //读温度高字节

        value <<= 8;                   //把温度的高位左移8位

        value |= low;                   //把读出的温度低位放到value的低八位中

        value *= 0.625;               //转换到温度值 小数

        return value;                   //返回读出的温度 带小数

}


/*************定时器0初始化程序***************/

void time_init()          

{

        EA   = 1;                   //开总中断

        TMOD = 0X21;          //定时器0、定时器1工作方式1

        ET0  = 1;                  //开定时器0中断 

        TR0  = 1;                  //允许定时器0定时


        ET1  = 1;                  //开定时器0中断 

        TR1  = 1;                  //允许定时器0定时

}


/********************独立按键程序*****************/

uchar key_can;         //按键值


void key()         //独立按键程序

{

        uchar key_new;

        key_can = 0;                   //按键值还原

        P2 |= 0x07;

        if((P2 & 0x07) != 0x07)                //按键按下

        {

                if(key_500ms == 1)        //连加

                {

                        key_500ms = 0;

                        key_new = 1;

                }

                delay_1ms(1);                     //按键消抖动

                if(((P2 & 0x07) != 0x07) && (key_new == 1))

                {                                                //确认是按键按下

[1] [2] [3]
关键字:51单片机  温控风扇  数码管显示 引用地址:51单片机温控风扇制作 数码管显示 Proteus仿真程序

上一篇:基于51单片机制作的波形发生器Proteus仿真程序
下一篇:10分钟理解LCD1602液晶显示模块

推荐阅读最新更新时间:2024-11-10 21:28

51单片机入门 - 实验板的选择
单片机的学习,最重要的一点就是多实践。站在岸上学不会游泳。没有实践,恐怕永远也学不好单片机。我将和大家一起,选择一款适合自己的单片机实验板。 方案选择 我们主要有三个可选方案: 自己动手搭建学习板; 购买成品开发板; 使用Proteus等仿真软件。 方案一非常适合动手能力较强,想锻炼动手能力,时间比较充裕的读者选用。自己动手搭建电路,能让我们对单片机更加了解,充分锻炼了动手能力,对以后需要自己制作东西很有帮助。或许你只是用现成的开发板学完单片机,等到想给好友或者心仪的异性做点东西表达下自己的心意时,才发现不会焊板子,那实在非常尴尬。这种方案的缺点在于:各种零散的元件不是很方便购买,不过如果能在淘宝上找到合适的卖家
[单片机]
proteus仿真51单片机篮球计分器
#include reg52.h 源码下载 #include intrins.h #define uchar unsigned char #define uint unsigned int uchar secs = 0; uchar minutes = 1; uchar LED,num1,num2,num = 4; uchar flag1 = 1,flag2 = 0; uchar m_secs = 24; uchar key_value = 0; uchar table = {1,2,3,4,5,6,7,8,9,0,1,2,3}; uchar code LedNum = {0x3f,0x06,0x5b,0x4f,0x
[单片机]
proteus仿真<font color='red'>51单片机</font>篮球计分器
51单片机P3口的功能,各控制引脚的功能及使用方法介绍
P3口有两个功能: 除了作为I/O使用外(其内部有上拉电阻),还有一些特殊功能,由特殊寄存器来设置,具体功能请参考我们后面的引脚说明。 有内部EPROM的单片机芯片(例如8751),为写入程序需提供专门的编程脉冲和编程电源,这些信号也是由信号引脚的形式提供的, 即:编程脉冲:30脚(ALE/PROG) 编程电压(25V):31脚(EA/Vpp) 接触过工业设备的兄弟可能会看到有些印刷线路板上会有一个电池,这个电池是干什么用的呢?这就是单片机的备用电源,当外接电源下降到下限值时,备用电源就会经第二功能的方式由第9脚(即RST/VPD)引入,以保护内部RAM中的信息不会丢失。 (注:这些引脚的功能应用,除9脚
[单片机]
<font color='red'>51单片机</font>P3口的功能,各控制引脚的功能及使用方法介绍
51单片机学习:点亮第一个LED
实验名称:点亮第一个LED 接线说明: 实验现象:下载程序后“LED模块”的D1指示灯点亮 注意事项: ***************************************************************************************/ #include reg52.h sbit LED1=P2^0; //将P2.0管脚定义为LED1 /******************************************************************************* * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 :
[单片机]
51单片机实验——按键外部中断实现四进制计数器
1.实验题目: 设计一个通过触发外部中断INT1实现的在0-3之间计数(四进制)的计数器,并通过P1.6和P1.7端口上的LED,显示计数的值。 2.KEIL代码 #include reg51.h sbit P16=P1^6; sbit P17=P1^7; void INT1_Init();//声明中断初始化函数 void main() { INT1_Init();//调用中断初始化函数 while(1); } void INT1_Init() //编写中断初始化函数 { EA=1;//开启中断总开关 EX1=1;//开启外部中断1 IT1=1;//设定为下降沿触发 IE1=0;//清
[单片机]
<font color='red'>51单片机</font>实验——按键外部中断实现四进制计数器
基于AT89S51单片机数字化机载电源控制保护盒设计
直升机起飞后,由飞机发动机带动发电机发电为机载设提供一个稳定的115 V/400 Hz的交流电。所有用电的机载设备电源都是直接使用115 V/400 Hz或经变换后使用,因此,该电源的稳定性直接关系到机载设备的寿命及飞行安全。机载控制保护盒主要监测发电机电网的电压、频率等信号,当电网出现过压、欠压、过频、欠频、过过频、欠频和差动电流超标时,在安全时间内及时切断主电路和发电机激磁电路转为备用电源供电,从而有效保护机载设备和飞行安全。 某型直升机机载控制保护盒是上世纪80年代的产品,控制电路均由分立元件搭建的模拟电路实现,具有体积大、测量误差大等缺点。本文采用AT89S52单片机设计了一款数字化机载控制保护盒,该数字化机载控制
[单片机]
基于AT89S<font color='red'>51单片机</font>数字化机载电源控制保护盒设计
51单片机自定义函数实现任意串口的printf()
在嵌入式开发过程中,往往需要多个串口进行通讯,使用printf函数是个不错的选择,格式化输出后方便实用; 不论什么型号的单片机,只要支持标准C的编译器,都可以实现此功能, 添加如下头文件; #include stdio.h #include string.h #include stdarg.h 下面是函数定义,可以移植到任意的串口; bit S1_busy; unsigned char idata Put_buf ; //最大数量 void my_printf(char* fmt,...) { unsigned char i,len; va_list ap; va_start(ap,fmt);
[单片机]
<font color='red'>51单片机</font>自定义函数实现任意串口的printf()
51单片机学习感悟与51单片机上拉电阻心得
1、我从不说51是基础,如果我这么说,也请把这句话理解为微机原理是基础。 2、对51单片机的操作本质上就是对寄存器的操作,对其他单片机也是如此。库只是一个接口,方便使用者使用而已。 3、汇编语言在工作中很少用到,了解就好。 4、51单片机的P0口很特别。 5、C语言就是C语言,51单片机就是51单片机,算法就是算法,外围电路就是外围电路,传感器就是传感器,通信器件就是通信器件,电路图就是电路图,PCB图就是PCB图,仿真就是仿真。 当你以后再也不使用51了,C语言的知识还在,算法的知识还在,搭建单片机的最小系统的技能还在,传感器和通信器件的使用方法还在,还会画电路图和PCB图,当然也会仿真。 6、51单片机
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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