找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1432|回复: 0
打印 上一主题 下一主题
收起左侧

自己写了一个单片机程序,用oled显示温度值,P2.5口输出pwm。驱动部分令wen_du=tem...

[复制链接]
跳转到指定楼层
楼主
ID:516467 发表于 2019-5-6 21:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
自己写了一个单片机程序,用oled显示温度值,P2.5口输出pwm。驱动部分令wen_du=temper,但是这条指令没用,temper的值并没有附给wen_du,并且也不能直接使用temper跟设定值d1、d2、d3、d4比较,两种方式执行的都是第一条if语句。拜托各位帮忙分析下!


#include <reg52.h>
#include "oled.h"
#include "ds18b20.h"

uint temper;                        //存放温度值
uint wen_du;
uint d4=34;
uint d3=31;
uint d2=28;
uint d1=25;

sbit motor=P2^5;
void wen_kong();
void output(char);
void delay1ms(int);
void main()
{
        OLED_Init();                 //OLED初始化
        OLED_P16x16Ch(0,2,3);//温
        OLED_P16x16Ch(16,2,4);//度
        OLED_P16x16Ch(80,2,5);//℃
        OLED_P8x16Ch(32,2,13);//冒号
        while(1)
        {
                temper = getTmpValue();                //获取温度
                ds18b20_sendChangeCmd();        //温度转换
                dis_temper(48, 2, temper);        //显示温度
                wen_kong();//温控模式
        }
}

void wen_kong()
{               
                if(wen_du>=d4)
                {
                        output(96);//
                        OLED_P8x16Ch(48,6,4);
                        OLED_P16x16Ch(56,6,0); //4档
                }
                else if(wen_du>=d3)
                {
                        output(72);//
                        OLED_P8x16Ch(48,6,3);
                        OLED_P16x16Ch(56,6,0); //3档
                }
                else if(wen_du>=d2)
                {
                        output(48);//
                        OLED_P8x16Ch(48,6,2);
                        OLED_P16x16Ch(56,6,0); //2档
                }
                else if(wen_du>=d1)
                {
                        output(24);//
                        OLED_P8x16Ch(48,6,1);
                        OLED_P16x16Ch(56,6,0); //1档'
                }
                else
                {
                        motor=0;//关闭风扇
                        OLED_P16x16Ch(40,6,9); //风扇关闭
                        OLED_P16x16Ch(56,6,10);
                        OLED_P16x16Ch(72,6,11);
                        OLED_P16x16Ch(88,6,12);
                }

}

//--------------------输出函数---------------
void output(char on)
{
        char i;
        for(i=0;i<10;i++)//循环
        {
                motor=1;//输出高电平
                delay1ms(on);//延迟on时间
                motor=0;//输出低电平
                delay1ms(100-on);//延迟100-on时间
        }
}
//-------------------延迟函数-------------
void delay1ms(int a)
{
        int i,j;
        for(i=0;i<a;i++)//外循环
       
                for(j=0;j<120;j++);//内循环
       
}                                                   //延迟函数结束




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表