#include<reg51.h>
#define MotorTabNum 5
unsigned char T0_NUM;
sbit K1 = P3^0;
sbit K2 = P3^1;
sbit K3 = P3^2;
sbit K4 = P3^3;
sbit MotorEn = P2^1; // 使能
sbit FX = P2^0; // 方向
sbit CLK = P2^2; // 脉冲
//----数码管---------------
sbit SMG1 = P1^4; //数码管第一位定义
sbit SMG2 = P1^5; //数码管第二位定义
sbit SMG3 = P1^6; //数码管第三位定义
sbit SMG4 = P1^7; //数码管第四位定义
int table[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x40}; //共阴极数码管段值
unsigned char g_MotorSt = 0; // 启停
unsigned char g_MotorDir = 0; // 正反
//unsigned char MotorTab[6] = {200, 160, 120, 80, 40, 20};
unsigned char MotorTab[6] = {12, 10, 8, 6, 4, 2};
signed char g_MotorNum = 0;
//--------------
void delayms(xms);
void mDelay(unsigned int DelayTime); //延时函数
void T0_Init();
void KeyScan(void);
void Display(void);
/***************************************************************************
* 主程序
*
***************************************************************************/
void main(void)
{
unsigned char i;
T0_Init(); // 定时器0 初始化
MotorEn = 0; // L297 使能(只有智能,才能正常工作,否则停止)
FX = 0;
while(1)
{
KeyScan(); // 按键
for(i=0; i<10; i++)
Display();
}
}
/********定时器初始化***********************************************************/
void T0_Init()
{
TMOD = 0x01;
TH0 = (65535-100)/256; // 1ms
TL0 = (65535-100)%256;
EA = 1;
ET0 = 1;
// TR0 = 1;
}
/********定时器中断*****************/
void T0_time() interrupt 1
{
// TR0 = 0;
TH0 = (65535-100)/256; // 0.5S 中断计数一次 t_500ms++ (即每0.5S t_500ms加1)
TL0 = (65535-100)%256;
T0_NUM++;
if(T0_NUM >= MotorTab[g_MotorNum])
{
T0_NUM = 0;
CLK=CLK^0x01; // 输出脉冲
}
// TR0 = 1;
}
//-----按键控制---------------------
void KeyScan(void)
{
if(K1 == 0)
{
delayms(10); // 软件延时消抖
if(K1 == 0)
{
while(!K1){Display();}; // 等待K1松开
g_MotorSt = g_MotorSt ^ 0x01;
MotorEn ^= 1;
TR0 = 1;
}
}
if(K2 == 0)
{
delayms(10); // 软件延时消抖
if(K2 == 0)
{
while(!K2){Display();}; // 等待K1松开
g_MotorDir = g_MotorDir ^ 0x01;
FX ^= 1;
}
}
if(K3 == 0) // 加速
{
delayms(10); // 软件延时消抖
if(K3 == 0)
{
while(!K3){Display();}; // 等待K1松开
g_MotorNum++;
if(g_MotorNum > MotorTabNum)
g_MotorNum = MotorTabNum;
}
}
if(K4 == 0) // 减速
{
delayms(10); // 软件延时消抖
if(K4 == 0)
{
while(!K4){Display();}; // 等待K1松开
g_MotorNum--;
if(g_MotorNum < 0)
g_MotorNum = 0;
}
}
}
/******************************************************************************
* 名称: Set_Display()
* 功能: 数码管显示函数
* 输入: 无
* 输出: 无
* 说明:
******************************************************************************/
void Display(void)
{
unsigned char b1, b2;
b1=g_MotorNum/10;
b2=g_MotorNum%10;
if(FX == 0)
P0=0x71;//显示F
else
P0=0x79;
SMG1=0;
delayms(3);
SMG1=1;
P0=0x40;
SMG2=0; //显示--
delayms(3);
SMG2=1;
P0=table[b1];
SMG3=0; //显示十位
delayms(3);
SMG3=1;
P0=table[b2];
SMG4=0;
delayms(3); //显示个位
SMG4=1;
}
/********延时函数***********************************************************/
void delayms(xms)
{
unsigned int x,y;
for(x=xms;x>0;x--)
for(y=110;y>0;y--)
;
}
51单片机控制57步进电机启停,正反转,5档加减速的图纸和程序源码注解
3星 · 超过75%的资源 需积分: 50 187 浏览量
2018-03-22
15:23:26
上传
评论 23
收藏 293KB RAR 举报
yhang18
- 粉丝: 2
- 资源: 1
最新资源
- 卡方数据.sav
- Python实现基于Django框架的二手物品购物网站设计源码+数据库.zip
- 基于Python和Django的二手物品购物网站设计源码+数据库脚本.zip
- 【计算机毕业设计】基于h5的移动网赚项目小程序【源码+lw+部署文档+讲解】
- 【计算机毕业设计】基于ssm-vue的oa系统设计与实现【源码+lw+部署文档+讲解】
- 基于pytorch实现的YOLOV5+SORT的车辆行人目标识别及追踪系统源码.zip
- 【计算机毕业设计】基于servlet+jdbc的在线选房系统设计与实现【源码+lw+部署文档+讲解】
- 投身科技创新,勇担时代先锋.pptx
- 【计算机毕业设计】基于SSM的仿微博系统的设计与实现【源码+lw+部署文档+讲解】
- 使用 Web Components 实现,遵循 Material You 设计规范的 Web 前端组件库
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈