本文包含原理图、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转/秒 谢谢 |