#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit EN=P2^6; //使能
sbit A1=P2^7;
sbit B1=P2^5;
sbit led1=P3^6;
sbit led2=P3^7;
sbit p23=P2^3;
sbit p22=P2^2;
sbit p21=P2^1;
sbit p20=P2^0;
sbit KG=P1^0; //按键 启动/暂停
sbit ZX=P1^1; //按键 正‘反转
sbit add=P3^0; // 减速
sbit min=P3^1; //按键! 加速
bit flag,fg;
uint V,y;
uchar num,R=1,flg;
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//延时1US
void delay(uint cnt)
{
while(--cnt);
}
//延时1mS
void delayms(uint time)
{
uint x;
for(x=0; x<time; x++)
delay(120);
}
//void D_MS(void){
// uint i; //速度 (快60-10000慢)(B-04螺距为3mm时600=200转/分钟,即每秒滑块走10mm)(B-05螺距为2mm时500=250转/分钟,即8.3mm/S)
// for(;i>0;i--) //(B-05螺距为2mm时1200=100转/分钟,即3.3mm/S)(B-05螺距为2mm时2200=25转/分钟,即2mm/S)
// ;
//}
void RRM(void){ //右转
EN=1;
A1=1;
TR0=1;
}
void LLM(void){ //左转
EN=1;
B1=0;
TR0=1;
}
void dis()
{
// float j;
y=R*20; // r/min;
V=150/R; //
// V=j;
P0=table[y/1000];
p23=0; p22=p21=p20=1;
delayms(1);
P0=table[y%1000/100];
p22=0;p20=p21=p23=1;
delayms(1);
P0=table[y%100/10];
p21=0;p20=p22=p23=1;
delayms(1);
P0=table[y%10];
p20=0;p22=p21=p23=1;
delayms(1);
}
void interrupt_init()
{
ET0=1;//定时器0溢出中断允许
TR0=0;//启动定时器0
TMOD=0X01;
TH0=(65536-600)/256;
TL0=(65536-600)%256;
EA=1;
}
void main(void){
flg=0;
interrupt_init();
A1=0;
B1=0;
EN=0;
while(1){
dis();
if(KG==0)
{
while(!KG);
flag=1;
}
while(flag)
{
dis();
if(KG==0)
{
while(!KG);
flag=0;
}
if(ZX==0)
{
TR0=0;
if(fg==0)
flg=1;
else
flg=0;
while(!ZX);
}
if(min==0)
{
while(!min);
R--;
if(R==255)
{
TR0=0;
R=0;
flg=3;
}
}
if(add==0)
{
while(!add);
R++;
flg=fg;
if(R==31)
{
R=30;
}
}
if(flg==0)
{flg=2;
fg=0;
RRM();
led1=0;
led2=1;
}
if(flg==1)
{fg=1;
flg=3;
LLM();
led1=1;
led2=0;
}
}
}
}
// }
void tim0_() interrupt 1
{
uchar n;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
n++;
if(n==V)
{
n=0;
num++;
}
if(fg==0)
{
switch (num)
{
case 1 : B1=1;break;
case 2 : A1=0;break;
case 3 : B1=0;break;
case 4 : TR0=0;EN=0;A1=0;B1=0;num=0;flg=0;break;
}
}
if(fg==1)
{
switch (num)
{
case 1 : A1=0;break;
case 2 : B1=1;break;
case 3 : A1=1;break;
case 4 : EN=0;TR0=0;num=0;flg=1;break;
}
}
}
20、51单片机两相步进电机LB1848驱动数码管显示
需积分: 5 65 浏览量
2023-07-12
10:38:28
上传
评论
收藏 349KB RAR 举报
>行者<
- 粉丝: 205
- 资源: 135
最新资源
- yolo目标检测项目实验
- downloadFile-1.hc
- Centos7.9环境下离线安装开源版Nginx(亲测版)
- C++课程设计:基于Qt的航班信息管理系统
- ADS7822UVerilog驱动,前面传的有点问题
- 基于python的高性能爬虫程序,使用了多线程+缓存+xpath实现的,这里以彼-岸图库为例,实现,仅用于学习交流
- 中分辨率成像光谱仪(MODIS)烧毁面积产品信息MODIS-C6-BA-User-Guide-1.2.pdf
- Screenshot_20240427_172613_com.huawei.browser.jpg
- 关于学习Python的相关资源网站链接及相关介绍.docx
- (HAL库)基于STM32F103C8T6的温控PID系统[Dht11、ESP8266、无线透传、L298N……]
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈