历史上的今天
返回首页

历史上的今天

今天是:2024年12月16日(星期一)

正在发生

2019年12月16日 | 51单片机温控风扇制作 数码管显示 Proteus仿真程序

2019-12-16 来源:51hei

仿真原理图如下

 

制作出来的实物图如下:

 

单片机源程序如下:

#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))

                {                                                //确认是按键按下

推荐阅读

史海拾趣

富瀚(Fullhan)公司的发展小趣事
确保电动机保护器已正确安装并连接到电动机上,同时准备好测试用的负载设备(如电阻箱或可调负载器)。
Ericsson Power Modules公司的发展小趣事

随着产品质量的不断提升和技术的不断创新,Ericsson Power Modules开始积极拓展市场。公司不仅在欧洲市场取得了显著成绩,还逐步将业务拓展至亚洲、北美等地区。为了更好地服务全球客户,Ericsson Power Modules在瑞典斯德哥尔摩设立了总部,并在中国、美国等地建立了生产基地和研发中心。这种全球化布局使得Ericsson Power Modules能够更快速地响应市场需求,提供更高效、更便捷的服务。

APSA公司的发展小趣事

随着技术的不断成熟和产品质量的提升,APSA公司开始积极拓展市场。通过参加行业展会、与合作伙伴建立战略合作关系等方式,公司的知名度逐渐提升。同时,公司也注重品牌形象的建立,通过一系列市场营销活动,成功塑造了专业、可靠的品牌形象。

ABI Electronics公司的发展小趣事

ABI Electronics公司的起点可以追溯到其对电路板测试技术的深入研究。在创立初期,ABI便以开发出高精度、高效率的电路板故障检测仪为目标。通过对电路板测试技术的不断钻研和创新,ABI成功推出了一系列性能卓越的测试设备,这些设备不仅提高了电路板测试的准确性和效率,也极大地降低了测试成本,赢得了市场的广泛认可。

DBM REFLEX公司的发展小趣事

在光学器件领域,技术创新是企业发展的关键。DBM REFLEX深知这一点,因此不断投入研发资源,致力于技术创新和产品创新。公司成功研发出了一系列具有高性能、高可靠性和高稳定性的光学器件,这些产品不仅满足了市场的需求,还为公司赢得了良好的口碑。

FWBELL公司的发展小趣事
根据电压比较器的输出信号控制充电电流的大小和充电模式。

问答坊 | AI 解惑

基于24C02和LCD液晶显示的电子密码锁的仿真.rar

基于24C02和LCD液晶显示的电子密码锁的仿真…

查看全部问答>

基于CPLD的数据采集与显示接口电路仿真设计1

摘要:常规数据采集与显示方法是应用CPU或DSP通过软件控制数据采集的模/数转换,这样将会频繁中断系统的运行,从而降低系统的运算速度,数据采集的速度也将受到限制。通过CPLD实现由硬件控制模/数转换和数据显示,最大限度地提高系统的信号采集和 ...…

查看全部问答>

像设计芯片一样教育孩子

“据现代科学研究的数据,幼儿的大脑三岁时75%生长成熟。到六岁,大脑发育完成。我们常把这个过程比做芯片设计的过程。”江宏说,“三岁,75%的功能都设计好,这被称为‘Freeze’,即设计基本成熟,这在芯片设计上成为设计‘冻结’。而六岁,就是‘ ...…

查看全部问答>

IC测试原理解析(一)

本系列一共四章,下面是第一部分,主要讨论芯片开发和生产过程中的IC测试基本原理, 内容覆盖了基本的测试原理,影响测试决策的基本因素以及IC测试中的常用术语。 第一章 数字集成电路测试的基本原理 器件测试的主要目的是保证器件在恶劣的 ...…

查看全部问答>

stm32编译问题求助

在用KEIL UV4编译时,出现TYPE.H与STM32F10X.H重复定义的问题,之前是用V2.0.1的库,现在用V3.5.0的库,求助高手,急待解决,谢谢!…

查看全部问答>

拿到LaunchPad了

拿到LaunchPad了,谢谢eeworld,谢谢ti。各个鞋童,准备怎么玩?…

查看全部问答>

iPhone触电致死原因未明:使用非行货充电器

据央视新闻微博报道,12日,新疆昌吉市公安局接到报警,一名23岁空姐遭电击死亡。警方现场发现,死者身体多处被电击灼伤,身边iPhone4手机正在充电。但手机的数据线、充电器及插线板都完好无损,手机也能正常开机。死因是否为手机问题?警方正在进 ...…

查看全部问答>

求marvel 8786 wifi的相关资料

请问哪个大侠有marvel 8786 wifi的资料可以分享给小弟吗? 最近想基于stm32做一个wifi转串口的板子练练手,可是不知道在哪可以找到这个相关的资料啊?有熟悉这个片子的兄弟吗?能不能发一份给我啊?我的邮箱是yunfei.ma2@gmail.com,有同志前辈也 ...…

查看全部问答>

新人求助!!!msp430f6638!!!

1.Description        Resource        Path        Location        Type #10234-D  unresolved symbols remain        MSP430 ...…

查看全部问答>

大家帮我分析一下我的电路

大家好,希望大家帮我分析一下我的电路,解答一年我的疑问。谢谢了 我在做一个信号调理电路,输入信号为0.1mVp-p,频率为12.5K。需要放大到4Vp-p给后端的ADC提供好的动态范围。以下是我仿真的电路; 我有以下疑问:我在仿真时如果去掉最后的ADA ...…

查看全部问答>