#include<reg52.h> //单片机头文件
#define uint unsigned int //宏定义
#define uchar unsigned char //宏定义
uchar t,i,cishu,temp,zf,data1,bai,shi,ge,kz; //变量定义
uchar zhuansu; //定义转速变量
void delay(uint z); //延时函数申明
void init(); //初始化子函数申明
void display(uchar bai,uchar shi,uchar ge); //数码管显示函数申明
sbit mc=P2^0; //定义单片P2.0口输出方波信号,用以驱动步进电机
sbit dula=P2^6; //定义单片机P2.6口为数码管段码控制引脚
sbit wela=P2^7; //定义单片机P2.7口为数码管位选控制引脚,因为芯片上有6个数码管,可以选择哪个亮
uchar code table[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d, //*数码管的编码,分别对应显示数字1~9
0x7d,0x07,0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0};
uchar code wei[]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//数码管位选编码,即分别对应第1~6个数码管点亮
void main() //主函数
{
init(); //调用初始化函数(初始化各端口)
while(1)
{
temp=100; //10*100us
if(data1==1) //通过上位机给单片机发送1减小方波信号的周期使电动机加速
{
temp-=5;
if(temp<10)
{
temp=10;
}
}
if(data1==0) //通过上位机给单片机发送0增大方波信号的周期电动机减速
{
temp+=5;
if(temp>200)
{
temp=200;
}
}
bai=zhuansu/100; //将转速按百位・十位・个位分开,分别送给3个数码管以显示数据
shi=zhuansu%100/10;
ge=zhuansu%10;
if(t==100000) //如果定时到一秒就停止计时
{
t=0;
zhuansu=cishu*60/10 ;//计算电机转速
display(bai,shi,ge); //调用显示子函数用以显示转速
}
}
}
void init() //初始化子函数
{
TMOD=0x01 //设置定时器0为工作方式1
TH0=(65536-50)/256; //定时10us
TL0=(65536-50)%256;