标题:
单片机风扇控制程序出错
[打印本页]
作者:
单片机我C你马
时间:
2024-4-22 15:52
标题:
单片机风扇控制程序出错
大佬们这是我的风扇控制程序代码显示是没有报错的,但是输入进单片机里面却是无法运行的。麻烦各位大佬看看这是哪里的问题,用的是52单片机
#include <REGX52.H>
#include<stdio.h>
sbit DJA=P2^0;
sbit DJB=P2^1;
sbit S1=P3^2;
sbit S2=P3^3;
bit flag;
unsigned char number;
void delay(unsigned int i)
{
unsigned int k;
for(k=0;k<i;k++);
}
void pwm(bit a,bit b,unsigned int d1,unsigned int d2)
{
DJB=a;
DJA=b;
delay(d1);
DJA=0;
DJB=0;
delay(d2);
}
void main()
{
flag=0;
number=0x00;
DJA=0;
DJB=0;
while(1)
{
if(S1==0)
{
delay(1200);
if(S1==0)
{
while(!S1);
flag=~flag;
}
if(S2==0)
{delay(1200);
if(S2==0)
{
while(!S2);
if(number<=3)
number++;
else number=0x01;}
}
if(!flag)
{
switch(number)
{
case 0x01:pwm(0,1,720,1680);break;
case 0x02:pwm(0,1,1250,1250);break;
case 0x03:pwm(0,1,1680,720);break;
default:;
}
}
else
{
switch(number)
{
case 0x01:pwm(0,1,720,1680);break;
case 0x02:pwm(0,1,1250,1250);break;
case 0x03:pwm(0,1,1680,720);break;
default:;}
}
}
}
}
作者:
ymt
时间:
2024-4-22 18:12
后两个IF判断最好不在嵌套在S1按键内部。
作者:
devcang
时间:
2024-4-22 18:36
程序代码的逻辑有问题吧,,,,,没有需求、说明也不详细,,,,大概理解,应该是这样
#include <REGX52.H>
#include<stdio.h>
sbit DJA=P2^0;
sbit DJB=P2^1;
sbit S1 =P3^2;
sbit S2 =P3^3;
bit flag;
unsigned char number;
void delay(unsigned int i){
unsigned int k;
for(k=0;k<i;k++);
}
void pwm(bit a,bit b,unsigned int d1,unsigned int d2){
DJB=a;
DJA=b;
delay(d1);
DJA=0;
DJB=0;
delay(d2);
}
void main(){
flag=0;
number=0x00;
DJA=0;
DJB=0;
while(1){
if(S1==0){
delay(1200);
if(S1==0){
while(!S1);
flag=~flag;
}
}
if(S2==0){
delay(1200);
if(S2==0){
while(!S2);
if(number<=3) number++; else number=0x01;
}
}
if(!flag){
switch(number){
case 0x01:pwm(0,1, 720,1680);break;
case 0x02:pwm(0,1,1250,1250);break;
case 0x03:pwm(0,1,1680, 720);break;
default:;
}
}else{
switch(number){
case 0x01:pwm(0,1, 720,1680);break;
case 0x02:pwm(0,1,1250,1250);break;
case 0x03:pwm(0,1,1680, 720);break;
default:;
}
}
}
}
复制代码
作者:
xiaobendan001
时间:
2024-4-23 10:21
这pwm用delay完成,那pwm期间按键不是就扫不到了?
作者:
heyanrog
时间:
2024-4-24 17:37
#define pwm_max 100
uchar pwm,set_pwm;//set_pwm不大于pwm_max
void pwm_out
{
pwm++;
if(pwm>pwm_max)pwm=0;
iif(set_pwm>=pwm){DJA=1;DJB=1;}//
else {DJA=0;DJB=0;}
}
作者:
szqinyi
时间:
2024-4-25 15:26
PWM和按键扫描建议不要用delay,换一种方式。
按键扫描中使用delay都是在教学视频中的程序,实战绝对不能用。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1