历史上的今天
返回首页

历史上的今天

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

正在发生

2020年02月09日 | 51单片机PWM温控风扇源代码

2020-02-09 来源: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 = 100;           //温度上下限值 


/***********************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);            //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<8;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<8;i++)

        {

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

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

                dq = 1;                         //释放总线

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

                        value |= 0x80;

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

        }

        return value;                 //返回数据

}


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

uint read_temp()

{

        uint value;

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

        init_18b20();                   //初始化18b20

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

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

        delay_uint(50);                   //500us


        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()         //独立按键程序

{

        static uchar key_new;

        key_can = 20;                   //按键值还原

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

                {                                                //确认是按键按下

推荐阅读

史海拾趣

D+H Mechatronic AG公司的发展小趣事

在全球环保意识日益增强的背景下,D+H Mechatronic AG积极响应绿色制造的号召。公司投入大量资金和资源研发出了一系列节能环保的机械设备,这些设备在生产过程中能够显著降低能耗和排放。同时,公司还积极参与各种环保活动,倡导绿色生产理念。这些举措不仅使公司赢得了客户的信赖和支持,也为其在行业内树立了良好的环保形象。

中电熊猫(CEC)公司的发展小趣事

在发展过程中,中电熊猫积极寻求与国际巨头的合作。2009年,中电熊猫与日本夏普公司签署协议,引进第六代液晶面板项目。这一合作不仅为中电熊猫带来了先进的技术和管理经验,也为其后续的高世代液晶面板线布局提供了有力支持。通过与夏普等国际巨头的合作,中电熊猫逐渐在液晶显示产业中崭露头角。

BOPLA公司的发展小趣事

BOPLA公司成立于XXXX年,初期主要致力于电子开关、熔断器等基础电子元件的研发与生产。创始人凭借对电子行业的深厚理解和敏锐的市场洞察力,带领公司逐步在竞争激烈的市场中站稳脚跟。通过不断的技术创新和品质提升,BOPLA的产品逐渐获得了客户的认可,为公司后续的发展奠定了坚实的基础。

ELEKTRO-PLAST NASIELSK公司的发展小趣事

随着公司规模的扩大和市场竞争的加剧,ELEKTRO-PLAST NASIELSK公司意识到必须实施全球化战略以拓展市场。公司开始在国际市场寻找合作伙伴,建立生产基地和销售网络。通过与国际知名企业的合作,公司不仅提升了技术水平,还获得了更多的市场份额。同时,公司还积极参与国际行业标准的制定和推广工作,提升了在国际市场上的影响力。

First Sensor公司的发展小趣事

随着环保意识的提高和可持续发展理念的普及,电子行业对环保要求也越来越高。ELEKTRO-PLAST NASIELSK公司积极响应这一趋势,将绿色环保理念贯穿于产品研发和生产过程中。公司采用环保材料和工艺生产产品,并推动供应链中的合作伙伴共同践行环保理念。此外,公司还积极推广可回收利用和循环再生的理念,为保护环境做出了积极贡献。

安谱隆(Ampleon)公司的发展小趣事

在独立发展后,安谱隆不断推出创新产品,巩固其在射频市场的地位。2015年12月,安谱隆推出了基于0.5μm工艺、额定功率为10至200W的GaN on SiC射频功率晶体管。这一产品的推出不仅展示了安谱隆在射频技术方面的领先实力,也为其在移动通信、广播电视等领域的应用提供了强有力的支持。

问答坊 | AI 解惑

tsb41

老师,我想要74hc14施密特整形的资料。…

查看全部问答>

一道奇怪的模拟题目

题目是求放大倍数。答案是uo=11Ui,我认为,这个电路的A2完全可以不存在,只要把之前的电阻匹配一下,A2就用一根导线代替就可以了。这个电路应该没什么实际意义吧。只是一道模电的计算题。大家看看A2有实际意义吗? [ 本帖最后由 子乐 于 2010-2- ...…

查看全部问答>

用三星的6410,通过USB下载NK,怎么老是报校验和错误啊?为什么?USB线不稳定?

用三星的6410,通过USB下载NK,怎么老是报校验和错误啊?为什么?USB线不稳定?…

查看全部问答>

关于WinCE开发的一些常识问题

我一直以来都是用Linux的,从来没有用过商业的嵌入式OS,现在有些需要想了解一下。 WinCE开发从哪里可以下到最新的试用版或者免费的OS(用了学习和试验)? 现在最新的WinCE是哪个版本? 其与什么Pocket PC等是什么关系? 做WinCE的开发用什么开 ...…

查看全部问答>

硕士毕业论文的课题做什么好。

我现在正处于选择课题的困惑之中,我导师是做软件的,但我想做嵌入式开发,他让我自己找一个题目做,但是现在不知道做什么好,无从下手,大家给点意见。最后有公司计划开发什么课题,需要人做前期知识积累,我可以无条件参加,甚至可以毕业后到贵公 ...…

查看全部问答>

【为C2000做贡献】基于DSP的CCD图像处理系统在点钞机中的应用

基于DSP的CCD图像处理系统在点钞机中的应用摘要介绍了一种基于DSP(数字信号处理器)的CCD(电荷耦合器件)图像处理系统的设计方法,采用线阵CCDTCD1 42D与TI公司的TMS320F281 2DSPDSP和89C52单片机结合设计了一种图像处理系统。介绍了系统硬件设计 ...…

查看全部问答>

LPC2103周立功配套教程很基础实用以及电路原理图

周立功对于LPC2103的配套教程,感觉还是比较简单易懂的,和大家分享一下 [ 本帖最后由 mdq123 于 2012-7-2 09:36 编辑 ]…

查看全部问答>

利用pci-e实现工业控制中测试仪器的高精度数据采集系统,据说标题越长越被人看到!

利用pci-e实现工业控制中测试仪器的高精度数据采集系统,单板实现。外部直接接传感器。 PCI-E看到上次altera研讨会演示过,想用他用在产品中。 [ 本帖最后由 lfeng105 于 2012-10-18 10:32 编辑 ]…

查看全部问答>

MC34063的波纹给低到多少?

今天刚装上MC33063(与34063一样),按图原计算的数值,带负载20欧电阻,测量波纹达50毫伏! 大家最低波纹时做到了多少? …

查看全部问答>

模拟开关切换通道产生的抖动如何去除

如图,上面的波形是一模拟开关切换通道的地址选择管脚,由低电平变为高电平使得模拟开关通道切换。下面的波形是模拟开关输出端的波形,发现有100us左右的振荡,怎么去除这个抖动,求大神指点!…

查看全部问答>