初学单片机:
#include
#include
code unsigned char tab[]=
{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsigned char code F_Rotation[4]={0x02,0x04,0x08,0x10};
unsigned char Dis_Shiwei;//定义十位
unsigned char Dis_Gewei; //定义个位
sbit key1=P3^0;//定义按键位置
sbit key2=P3^1;
sbit key3=P3^2;
sbit key4=P3^3;
int Speed=25;
int Th=0xF0;
int Tl=0x00;
//int LoopDJ=0x02;
int i=0;
//int key;
void ViewKey();
void Show();
void Delay(unsigned int cnt)
{
while(--cnt);
}
void main()
{
TMOD=0x10;
EA=1;
ET1=1;
TR1=1; //开启定时器1
while(1)
{
ViewKey();
Show();
}
}
void Show() //数码管模拟显示步进电机转速
{
Dis_Shiwei=tab[Speed/10];//十位显示值处理
Dis_Gewei=tab[Speed%10]; //个位显示处理
P0=Dis_Shiwei;//显示十位
P2=0xFE;
Delay(300);//短暂延时
P0=Dis_Gewei; //显示个位
P2=0xFF;
Delay(300);
}
void ViewKey() //独立按键控制功能模块
{
if(!key1) //按下按键时电机加速
{
if(Speed<80)
{
Speed++;
if(Tl>=0xF8)
{
Th=Th+0x01;
Tl=0x00;
}
else
{
Tl=Tl+0x08;
}
}
}
if(!key2) //按下按键2时进行加速
{
if(Speed>15)
{
Speed--;
if(Tl<0x08)
{
Th=Th-0x01;
Tl=0xFF;
}
else
{
Tl=Tl-0x08;
}
}
}
if(!key3) //电机停止,定时器停止定时
{
P1=0xFF;
TR1=0;
Speed=0;
}
if(!key4) //电机开启,定时器开始定时
{
TR1=1;
Th=0xF0;
Tl=0x00;
Speed=25;
}
Delay(3000);
}
void T1INT() interrupt 3 //中断服务程序模块
{
/* if(P1&0x10!=0x10)
{
P1=LoopDJ<<1;
}
else
{
P1=LoopDJ>>3;
}
for(i=0;i<4;i++) */
if(i>=0&&i<=4)
{
P1=F_Rotation[i];
i++;
}
else
{
i=0;
P1=F_Rotation[0];
i++;
}
TH1=Th;
TL1=Tl;
}
上一篇:DHT21温湿度传感器使用
下一篇:Keil C51大端模式与版本选择导致的仿真器Code size limit:2k
推荐阅读最新更新时间:2024-03-16 15:47