51单片机开发模板制作温度显示按键控速风扇,程序编好,按键功能实现不了,求大神门帮忙看看,感谢,感谢

本人萌新一名,想依靠普中科技51单片机开发模板制作一个温度显示,按键控制风速的风扇实验,现在程序已经编好,但是只显示温度和风扇转,按键没有用,请大神门帮忙看一下,感激不尽下面是程序代码。
#include "reg52.h" #include"temp.h" typedef unsigned int u16;typedef unsigned char u8;unsigned char Count; #include<intrins.h>
sbit moto = P1^0;sbit LSA=P2^2;sbit LSB=P2^3;sbit LSC=P2^4;sbit k1=P1^1;
sbit k2=P1^2 ; sbit k3=P1^3 ; u8 flag;
char num=0;u8 DisplayData[8];u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示管
void delay(u16 i){while(i--);}//延时设置
void datapros(int temp) {float tp; if(temp< 0){DisplayData[0] = 0x40;
temp=temp-1;temp=~temp;tp=temp;temp=tp*0.0625*100+0.5;}
else{DisplayData[0] = 0x00;tp=temp;temp=tp*0.0625*100+0.5;
}
DisplayData[1] = smgduan[temp / 10000];DisplayData[2] = smgduan[temp % 10000 / 1000];DisplayData[3] = smgduan[temp % 1000 / 100] | 0x80;DisplayData[4] = smgduan[temp % 100 / 10];DisplayData[5] = smgduan[temp % 10];
void DigDisplay(){u8 i;for(i=0;i<6;i++){switch(i)
{case(0):LSA=0;LSB=0;LSC=0; break;//显示第0位case(1):LSA=1;LSB=0;LSC=0; break;
case(2):LSA=0;LSB=1;LSC=0; break;//显示第2位case(3):LSA=1;LSB=1;LSC=0; break;//显示第3位
case(4):
LSA=0;LSB=0;LSC=1; break;//显示第4位
case(5):
LSA=1;LSB=0;LSC=1; break;//显示第5位
}
P0=DisplayData[i];//发送数据
delay(100); //间隔一段时间扫描
P0=0x00;//消隐
}
}
void keypros()
{
if(k1==0) //检测按键K1是否按下
{
delay(1000); //消除抖动 一般大约10ms
if(k1==0) //再次判断按键是否按下
{
flag=0; //led状态取反

}
while(!k1); //检测按键是否松开
}
if(k2==0) //检测按键K1是否按下
{
delay(1000); //消除抖动 一般大约10ms
if(k2==0) //再次判断按键是否按下
{
flag=1; //led状态取反

}
while(!k2); //检测按键是否松开
}
if(k3==0) //检测按键K1是否按下
{
delay(1000); //消除抖动 一般大约10ms
if(k3==0) //再次判断按键是否按下
{
flag=2; //led状态取反

}
while(!k3); //检测按键是否松开
}
}
void main()
{
u8 i;
moto=0;
while(1)
{
datapros(Ds18b20ReadTemp()); //数据处理函数
DigDisplay();//数码管显示函数
keypros(); //按键处理函数
if(flag==0)
{
for(i=0;i<100;i++) //循环100次,也就是大约5S
{
if(i>70)
moto=1;
else
moto=0; //开启电机
}
}
if(flag==1)
{
for(i=0;i<100;i++) //循环100次,也就是大约5S
{
if(i>30)
moto=1;
else
moto=0; //开启电机
}
}
if(flag==2)
{

moto=1; //开启电机

}
}

}

首先你这程序有问题,这四行不属于任何的子程序,编译都出错。
DisplayData[1] = smgduan[temp / 10000];
DisplayData[2] = smgduan[temp % 10000 / 1000];
DisplayData[3] = smgduan[temp % 1000 / 100] | 0x80;
DisplayData[4] = smgduan[temp % 100 / 10];DisplayData[5] = smgduan[temp % 10];
把这四行改正后,编译后仿真运行程序,3个按键是起作用的。你感觉不起作用,是因为那3个按键,就是改变 flag 分别为0,1,2。可是,主程序中根据 flag 值不同,执行的却是同一个动作,都是 moto=1; (稍稍有一点区别,只是你感觉不出来)所以,按什么键都是这个动作,按不按都 一样,当然那就会觉得按键不起作用。那3个按键控制的动作要有区别呀,或者动作区别要大,才能看出来按键起作用啦。最简单,直接的方法是,按住按键不松手,看数码管是不是全灭啦,如果全灭了,说明按键就是起作用的。
温馨提示:内容为网友见解,仅供参考
第1个回答  2019-06-11
写一个小函数,按一下灯亮的那种,先看看是硬件问题还是软件问题。
我就看你flag判断的外接口只有motor,先sbit一个灯的引脚吧
sbit led = P^某引脚;
void test(void)
{
if(k1 == 0) led = 0;
else led = 1;
}
然后丢主函数试一下追问

硬件是没有问题的,之前我写了一个小的中断,是可以用的,

本回答被网友采纳
第2个回答  2019-06-13
小哥哥 你最后有调出来吗
第3个回答  2019-06-11
多按一会儿试试追问

都快按烂了,

第4个回答  2019-06-11
 5 51单片机开发模板制作温度显示按键控速风扇,程序编好,按键功能实现不了,求大神门帮忙看看,感谢,感谢追问

兄弟你会改程序吗?帮老弟看看好吗?谢谢

关于51单片机独立式键盘输入,用来设置温度的程序,谁能帮忙编一个啊...
这个程序只有设置和显示温度功能,没有DS18B20的,你看看 include <reg52.h> unsigned char code SEG[18] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf,0xff};float SETWENDU = -32.1;void key_init();void play(float);void d...

51单片机+DHT11传感器的温湿度监测系统,按键可设置阀值,含原理图、程...
基于51单片机和DHT11的温湿度监测系统详解该设计目标是构建一个能实时监测环境温湿度并具备报警功能的系统,使用51单片机作为核心处理器,DHT11传感器负责数据采集。用户可以通过按键设置温湿度的报警阈值,一旦超出预设范围,系统会通过LED灯和蜂鸣器发出警报。设计采用Proteus8.6版本,尽管早期版本中没有DHT11...

STC12C5A60S2最小系统板\/51单片机温度显示和温度控制风扇
STC12C5A60S2最小系统板\/51单片机实现温度显示与控制风扇的项目。板载的DS18B20温度传感器与TM1650芯片驱动的4位数码管用于显示温度。单片机课设计中,利用此系统实现智能温控风扇,当温度达到设定下限时风扇启动,温度位于上下限间,风扇以比例PWM占空比运行,超过上限则全速运转。STC12C5A60S2单片机高速低功...

51单片机程序 按住按键数码管就不亮了,松手才显示,用标志位做的怎么做...
楼上是个办法,如果定时器比较紧张的话可以在松手检测的循环里加入显示函数,这样在按下的时候也会有显示,至于你说的不用松手不是个好思路,做按键程序时消抖和松手检测都是必要的,带来的问题只要想一些巧妙的办法就能化解了,祝成功!

51单片机如何用一个按键控制一段程序的运行与停止
在51单片机编程中,通过一个按键实现程序的运行与停止功能,操作步骤如下:首先,你需要为你的项目创建一个新的文件,这是基础步骤,它将承载你的代码逻辑(1、在51单片机项目中,新建一个文件用于存放程序代码。)。接着,配置你的按键和LED。假设你选择的按键S1连接到P3的第2引脚,当按键按下时,...

51单片机C语言控制按键蜂鸣器
在使用51单片机进行C语言编程时,控制按键和蜂鸣器是一个常见的应用场景。程序的核心在于通过监测按键状态的变化来控制蜂鸣器的发声。例如,在下面的代码片段中,我们定义了一个名为flag的变量,用于标记按键状态的上升沿。整个程序运行在一个无限循环中,不断地检测按键key1的状态变化。当key1检测到从低...

51单片机开发板功能介绍
51单片机开发板具备多种功能,旨在提供全面的实践和学习体验。首先,它配置了8个LED灯,可用于基础IO操作实践,也可作为其他程序中的指示灯。两个四联8段数码管用于显示温度、欢迎信息和时间,展现数字和字符显示的能力。高亮8*8点阵可以用于数字、字母和小游戏的开发,如经典的贪吃蛇游戏。开发板还配备了...

51单片机按键控制直流电机正反转和快慢
可以利用51单片机实现按键控制直流电机的正反转和速度调整。1. 按键与单片机的连接:首先,需要将按键连接到51单片机的I\/O端口。这些按键可以包括控制电机正转、反转和速度调整的按钮。每个按键对应单片机的一个或多个I\/O位,用于检测按键是否被按下。2. 电机控制逻辑编写:当单片机检测到特定按键被按下...

关于单片机温度控制系统C语言程序中的按键设置程序,请求详细的介绍下按...
0 && KeyLock ==0){ } if(BUTTON_reduce == 0 && KeyLock ==0){ } 按二次时执行 else if(KeyFlag == 2){ if(BUTTON_add == 0 && KeyLock ==0){ } if(BUTTON_reduce == 0 && KeyLock ==0){ } 一楼正解,主要按键扩展标志是用来节省资源的,用最少的按键实现最多的功能!

51单片机怎么用按键控制一个数码管,按一下显示一个数字,顺序显示
1、首先,要把代码写好,点亮数码管。2、代码写完后,要确认原先写好的代码是不是正确的。3、确认代码无误后,进入下一步,就是在这一行代码(箭头所指)的地方,将这四个字删去。4、然后如图所示,四个字已经删去,只要改成数字相应的代码即可。5、这里改成的是代表数字0的代码,如图所示。6、...

相似回答