找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

求帮我调一个C51程序,PWM控制风扇转速的,转速一直不稳定,和显

[复制链接]
admin 发表于 2012-9-2 06:45:04 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
//********* 头文件 ********************//
#include<AT89x51.h>
//********* 定义变量 ******************//
#define uchar unsigned char
#define uint unsigned int
unsigned long xs,sd=1200,ds=0;
uchar js=0,lj=0,zkb1,zkb2;
static uchar click=0;
uint bitdisplay=0,gw=0,sw=0,bw=0,qw=0,gw2=0,sw2=0,bw2=0,qw2=0;

//********* 数码管代码表 **************//
unsigned char Tab[]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,
0xFE,0xF6,0x00};
//********* 按键延时程序 **************//
void ys(int x)
{
int aaa,bbb;
for(aaa=0;aaa<x;aaa++)
for(bbb=0;bbb<120;bbb++); //24M--x*0.5ms
}
//********* 定时计数1程序 *************//

void time1_int(void) interrupt 3
{ ds++;
TH1=(65536-5000)/256;
TL1=(65536-5000)%256;
++click; //*中断次数计数器变量
if (click>=100){ click=0;}
if (click<=zkb1) //*当小于占空比值时输出低电平,高于时是高电平
{P1_0=1;}
else
{P1_0=0;}

//********* 动态扫描显示 *************//

if(ds==400) //定时1秒
{
ds=0;
js=(TH0 * 256 + TL0); //每秒转速取值
xs=js*600000+sd; //数码管显示内容
TH0=0x00;TL0=0x00;
qw=(xs/10000000)%10; //当前转速显示
bw=(xs/1000000)%10;
sw=(xs/100000)%10;
gw=(xs/10000)%10;
qw2=(xs/1000)%10; //设定转速显示
bw2=(xs/100)%10;
sw2=(xs/10)%10;
gw2=xs%10;
}
switch(bitdisplay)
{
case 0:P0=Tab[qw];P2=0xFE;break;
case 1:P0=Tab[bw];P2=0xFD;break;
case 2:P0=Tab[sw];P2=0xFB;break;
case 3:P0=Tab[gw];P2=0xF7;break;
case 4:P0=Tab[qw2];P2=0xEF;break;
case 5:P0=Tab[bw2];P2=0xDF;break;
case 6:P0=Tab[sw2];P2=0xBF;break;
case 7:P0=Tab[gw2];P2=0x7F;break;
}
bitdisplay++;
if(bitdisplay>=8){bitdisplay=0;}

}
//********** 初始化 ********************//
void csh()
{
TMOD=0x15;
//占空比初始值设定
TH0=0x00;
TL0=0x00;
TH1=(65536-5000)/256; //定时器1初值
TL1=(65536-5000)%256;
EA=1;
ET0=1;TR0=1;
ET1=1;TR1=1;
}
//********** 主程序 ********************//
void main(void)
{ zkb1=99;
zkb2=1;
csh();
while(1)
{

if(P3_6==0)
{
ys(180);
if(P3_6==0){sd=sd-60;zkb1-=6;}
}
if(P3_3==0)
{
ys(200);
if(P3_3==0){sd=sd+60;zkb1+=6;zkb2=8;}
}
if(P3_2==0)
{
ys(180);
if(P3_2==0){sd=1080;zkb1=85;zkb2=15;}
}
if(P3_1==0)
{
ys(180);
if(P3_1==0){sd=1020;zkb1=79;zkb2=21;}
}
if(P3_0==0)
{
ys(180);
if(P3_0==0){sd=960;zkb1=72;zkb2=28;}
}
if (zkb2>99){zkb1=1;} //对占空比值限定范围
if (zkb2<1){zkb1=99;}

}
}





如果可以,请帮我把转速改成 x转/秒 谢谢
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-24 04:09 , Processed in 0.059057 second(s), 10 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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