历史上的今天
今天是:2024年12月11日(星期三)
2019年12月11日 | 单片机+ULN2003A步进电机控制系统(正反转+加减速)
2019-12-11 来源:51hei
51单片机步进电机的正反转。加减速控制
电路原理图如下:
仿真原理图如下
单片机源程序如下:
#include #include #include #define uchar unsigned char #define uint unsigned int sbit RS = P2^4;//1602数据/命令选择端(H:数据寄存器L:指令寄存器) sbit RW = P2^5;//1602读/写选择端 sbit E = P2^6;//1602使能信号端 sbit key1=P3^0;//用户按键 sbit key2=P3^1; sbit key3=P3^2; sbit key4=P3^3; sbit key5=P3^4; uchar code B_Rotation[8]={0x7f,0x3f,0xbf,0x9f,0xdf,0xcf,0xef,0x6f}; //反转表格 uchar code F_Rotation[8]={0xef,0xcf,0xdf,0x9f,0xbf,0x3f,0x7f,0x6f}; //正转表格 uchar table1[]="dir: + spe:005"; uchar table2[]="cir:000 ang:000"; uchar num; uint key,flag,speed=5,zflag,znum,fflag,fnum,select,pp,qq; //1键值2键值标志3速度4正转标志5正转圈数6反转标志7反转圈数8正转角度9反转角度10选择 float zang,fang; /******************************************************************/ /* 延时函数 Xms */ /******************************************************************/ void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } /******************************************************************/ /* LCD1602写命令操作 */ /******************************************************************/ void WriteCommand(uchar com) { delay(5);//操作前短暂延时,保证信号稳定 E=0; RS=0; RW=0; P0=com; E=1; delay(5); E=0; } /******************************************************************/ /* LCD1602写数据操作 */ /******************************************************************/ void WriteData(uchar dat) { delay(5); //操作前短暂延时,保证信号稳定 E=0; RS=1; RW=0; P0=dat; E=1; delay(5); E=0; } /******************************************************************/ /* 1602初始化程序 */ /******************************************************************/ void InitLcd()//1602初始化程序 { delay(15); WriteCommand(0x38); //display mode WriteCommand(0x38); //display mode WriteCommand(0x38); //display mode WriteCommand(0x06); //当读或写一个字符后地址指针加一,且光标加一 WriteCommand(0x0c); //显示开及光标不显示 WriteCommand(0x01); //清屏 WriteCommand(0x80); for(num=0;num<15;num++)//第一行的显示 { WriteData(table1[num]); delay(15); } WriteCommand(0x80+0x40);//第二行的显示 for(num=0;num<15;num++) { WriteData(table2[num]); delay(15); } } /******************************************************************/ /* 独立键盘扫描函数 */ /******************************************************************/ void keyscan() { P3=0xff;//拉高P3口,以读取P3口的值 if(key1==0)//键1被按下 { delay(5);//延时消抖 if(key1==0) { flag=1; } while(!key1); delay(5);//延时消抖 while(!key1);//松手检测 } if(key2==0) { delay(5); if(key2==0) { flag=2; } while(!key2); delay(5); while(!key2); } if(key3==0)//键1被按下 { delay(5);//延时消抖 if(key3==0) { flag=3; } while(!key3); delay(5);//延时消抖 while(!key3);//松手检测 } if(key4==0) { delay(5); if(key4==0) { flag=4; } while(!key4); delay(5); while(!key4); } if(key5==0) { delay(5); if(key5==0) { flag=5; } while(!key5); delay(5); while(!key5); } } /******************************************************************/ /* 1602显示3位数 */ /******************************************************************/ void write_sfm(uchar add,uint date)//1602显示 { uchar bai,shi,ge; bai=date/100; shi=date%100/10; ge=date%10; WriteCommand(0x80+add);//设置数据地址指针 WriteData(0x30+bai); WriteData(0x30+shi); WriteData(0x30+ge); WriteData(0x20); } /******************************************************************/ /* 键值处理 */ /******************************************************************/ void handle_flag() { uchar select1; if(TR0==0&&TR1==0) { if(flag==1) //正转 { WriteCommand(0x80+0x05); WriteData('+'); delay(20); select=0; } if(flag==2) //反转 { WriteCommand(0x80+0x05); WriteData('-'); delay(20);
史海拾趣
|
http://www.abab123.com/bbs/down.asp?html=1316213 今天晚上我在网上找到的一个网站,里面有很多课程的视频教程,当然也包括电子学科,所以我来推荐一下。直接链接进去就可以看到了, 反正我觉得对我这样的学生很有用。呵呵!共享了~~~~~… 查看全部问答> |
|
1.汇编程序调用C程序 C_add.c #include int g(int a,int b ,int c, int d ,int e) { return (a+b+c+d+e); } ARM_add.s AREA ARM_add,CODE ,READONLY EXPORT ARM_add IMPORT g ENTRY STR LR ,[SP,#-4]! ;保存返回地址 MOV ...… 查看全部问答> |
|
STM32 的ADC 施加干扰时应该是ADC的配置参数丢失了,所以数据会放错误,而一旦错误就一直错下去(即使干扰消失),除非重新上电复位,重新初始化ADC,现在我只能在每个周波20ms重新初始化ADC,这样再加干扰时就不会出现数据错位,产品的问 ...… 查看全部问答> |
|
我是自动化专业的,九月份就大三了。大二期间学过C语言和51单片机,自我感觉理论知识还学得不错,编程上可能实践少了点。在我哥的建议下我正在学AVR单片机,感觉和51单片机差不多,只是资源多一点罢了!不知道我理解得对不对?但自己真正想做一个项 ...… 查看全部问答> |
|
【EEWORLD全球独家】TI 原装MSP430 LaunchPad千人大团购!!! 25元包邮!!! 我看到这个活动的第一个感觉就是:这么便宜啊,真有这样的活动吗? 25块钱,包邮,真不贵,我也买了一个!看看怎样… 查看全部问答> |




