本人萌新一名,想依靠普中科技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; //开启电机
}
}
}
硬件是没有问题的,之前我写了一个小的中断,是可以用的,
本回答被网友采纳都快按烂了,
兄弟你会改程序吗?帮老弟看看好吗?谢谢