想实现让电机加速然后减速,用传感器测转速并用数码管显示的功能,但下到
单片机里没反应呀,求帮助呀
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
char gw,sw,bw,qw; //转速值
uchar j; //定时次数,每次20ms
uint x; //数码管显示的数值
uchar z; //1s内的脉冲数
uchar smg[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//
数值
char led[4]={0xfe,0xfd,0xfb,0xf7}; //选择数码管
uchar h_h8, h_l8,l_h8,l_l8; //pwm高低电平
int n=1;
uint
times=30000;//pwm周期
uchar flag;
sbit p26=P2^6; //蜂鸣器
sbit p20=P2^0; //led灯
chushi();
biansu();
display();
delays()
{
uchar a;
for(a=5000;a>0;a--);
}
void t1() interrupt 3 //定时器1中断 定时1s
{
TH1=0xb1; //重装t0
TL1=0xe0;
j++;
if(j==50)
{
j=0;
x=z; //读入脉冲数
z=0;
display();
}
}
void t0() interrupt 1 // 定时器1中断 产生pwm
{
if(flag)
{
TH0=h_h8;
TL0=h_l8;
P3=0xff;
flag=0;
}
else
{
TH0=l_h8;
TL0=l_l8;
P3=0;
flag=1;
}
}
void int0() interrupt 0 //外部中断0 记脉冲数
{
EX0=0;
z++;
EX0=1;
}
void main ()
{
chushi();
gw=sw=bw=qw=0; //数码管初始化
P0=1;
P2=1;
while(1)
{
biansu();
display();
}
}
chushi() //初始化
{
TMOD=0x11; //T0方式1 定时 t1方式1
TH1=0xb1; //装入初值 20MS
TL1=0xe0;
TH0=(65536-n)>>8;
TL0=(65536-n)&0xff;
EA=1; //开总中段
ET0=1; //开定时器0
ET1=1;
TR0=1; //启动 t0
TR1=1;
EX0=1; //开外部中断0
IT0=1; //下降沿触发
}
display() //数码管显示
{
uchar i;
gw=x%10; //求速度个位值,
sw=(x/10)%10; //求速度十位值,
bw=(x/100)%10; //求速度百位值,
qw=x/1000; //求速度千位值,
for(i=0;i<4;i++)
{
P2=led[i];
if(i==0) //显示个位
{
P1=smg[gw];
delays();
}
else if(i==1) //显示十位
{
P1=smg[sw];
delays();
}
else if(i==2) //显示百位
{
P1=smg[bw];
delays();
}
}
}
biansu()
{
char delta;
n+=delta;
if(n>=times-1)
{
delta=-1;
p26=0;
p20=0;
}
if(n<=1)
{
n=1;
delta=0;
}
h_h8=(65536-n)>>8;
h_l8=(65536-n)&0xff;
l_h8=(65536-times+n)>>8;
l_l8=(65536-times+n)&0xff;
}
一周热门 更多>