基于51单片机的步进电机调速系统(含完整代码)
基于51系列单片机控制步进电机调速闭环系统设计

摘要:步进电动机是一种将脉冲信号变换成相应的角位移(或线位移)的电磁装置,是一种特殊的电动机。
由于其精确性以及其良好的性能在实际当中得到了广泛的应用。
本文介绍了以51系列单片机AT89S52为控制核心所设计的步进电机(型号42BY G016)控制系统,从系统的硬件电路以及软件的设计方面实现了对步进电机的控制。
并且由传感器E E-EX672采集转速数据进而进行关于速度的闭环控制,经过实际应用电路证明,该仿真控制系统的随动性能好,抗干扰能力强,稳定性好。
关键词:单片机、步进电机、光电开关、PID算法、闭环控制一、步进电机1.1 步进电机的工作原理步进电机是将电脉冲信号转变为角位移或线位移的执行机构。
在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。
这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点,使得在速度、位置等控制领域用步进电机来控制变的非常的简单。
1.2 步进电机的特点本实验所用的步进电机为感应子式步进电机(型号为42B YG016)。
感应子式步进电机与传统的反应式步进电机相比,结构上转子加有永磁体,以提供软磁材料的工作点,而定子激磁只需提供变化的磁场而不必提供磁材料工作点的耗能,因此该电机效率高,电流小,发热低。
因永磁体的存在,该电机具有较强的反电势,其自身阻尼作用比较好,使其在运转过程中比较平稳、噪音低、低频振动小。
感应子式步进电机某种程度上可以看作是低速同步电机。
一个四相电机可以作四相运行,也可以作二相运行。
(必须采用双极电压驱动),而反应式电机则不能如此。
例如:四相八拍运行(A-AB-B-BC-C-CD-D-DA-A)完全可以采用二相八拍运行方式.不难发现其条件为C=,D=. 一个二相电机的内部绕组与四相电机完全一致,小功率电机一般直接接为二相,而功率大一点的电机,为了方便使用,灵活改变电机的动态特点,往往将其外部接线为八根引线(四相),这样使用时,既可以作四相电机使用,可以作二相电机绕组串联或并联使用。
51单片机步进电机正反转调速1602显示

51单片机步进电机正反转调速1602显示51单片机步进电机正反转调速1602显示 - C51源代码#include //51芯片管脚定义头文件#include //内部包含延时函数 _nop_();#define uchar unsigned char#define uint unsigned int#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};uchar code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9}; uchar code REV[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};sbit K1 = P3^2; //运行与停止sbit K2 = P3^3; //设定圈数sbit K3 = P3^4; //方向转换sbit K4 = P3^5; //速率调整sbit BEEP = P3^6; //蜂鸣器sbit LCD_RS = P2^0;sbit LCD_RW = P2^1;sbit LCD_EN = P2^2;bit on_off=0; //运行与停止标志bit direction=1; //方向标志bit rate_dr=1; //速率标志bit snum_dr=1; //圈数标志uchar code cdis1[ ] = {" STEPPING MOTOR "};uchar code cdis2[ ] = {"CONTROL PROCESS"};uchar code cdis3[ ] = {" STOP "};uchar code cdis4[ ] = {"NUM: RATE: "};uchar code cdis5[ ] = {" RUNNING "};uchar m,v=0,q=0;uint number=0,number1=0;uchar snum=10,snum1=10; //预设定圈数uchar rate=2; //预设定速率uchar data_temp,data_temP1,data_temp2;/********************************************************/ /*/* 延时t毫秒/* 11.0592MHz时钟,延时约1ms /*/********************************************************/ void delay(uint t){uchar k;while(t--){for(k=0; k<125; k++){ }}}/********************************************************/ void delayB(uchar x) //x*0.14MS{uchar i;while(x--){for (i=0; i<13; i++){ }}}/********************************************************/ void beep(){uchar j;for (j=0;j<100;j++){delayB(4);BEEP=!BEEP; //BEEP取反}BEEP=1; //关闭蜂鸣器delay(170);}/********************************************************/ /* /*检查LCD忙状态/*lcd_busy为1时,忙,等待。
单片机控制步进电机系统(C语言源代码)

题目:单片机控制步进电机系统摘要很多工业控制设备对位移和角度的控制精度要求较高, 一般电机很难实现, 而步进电机可精确实现所设定的角度和转数。
本设计主要是运用51 单片机控制六线4相步进电机系统, 由单片机产生驱动脉冲信号, 控制步进电机以一定的转速向某一方向产生一定的转动角度。
同时能够利用单片机实现电机的正、反转及速度控制,并能在数码管上显示出相应的速度。
本文中给出了该系统设计的硬件电路,软件设计,人机交互等。
并对各个功能模块进行了详细的说明。
主要内容包括以下几个方面:单片机控制步进电机的一般原理。
电机驱动及控制的实现。
控制系统整体设计以及模块划分说明。
原理图。
代码。
关键词:单片机;步进电机;系统;驱动AbstractMany Industrial control equipment have a highly requirement in displacement and angle with control accuracy, the most motor can't carry out .but the step motor can carry out the displacement and angle that you enactmented in accuracy. This design mainly used SCM to control step motor system.The step motor is formed six lines and four phasic.Through SCM generate the drive pulse signal.Control stepper motor through a certain speed in a direction to get a certain degree of rotation angle.At the same time, It can use SCM to realization of the motor is , reverse and speed control. and showed the speed in the digital tube.In this paper, given the design of the system hardware circuit,software design, human-computer interaction and so on.and it given the details description of each functional module.the main contents include the following:(1) The general principles of signal_chip controlling step motor.(2) The realization of motor driving and controlling(3) Control system overall design and description module division(4) Schematic Diagram(5) CodeKey Words:SCM; stepper motor; system; drive目录引言41 单片机控制步进电机的一般原理41.1 步进电机41.1.1 步进电机介绍41.1.2 步进电机分类51.1.3 技术指标51.1.4 步进电机工作原理51.2 单片机72 步进电机驱动实现82.1简介82.2驱动选择83 系统硬件设计93. 1 单片机控制电机93.2 键盘93.3 显示部分10程序流程图11总结12致谢13参考文献13附录13C代码13引言目前,在工业控制生产以及仪器上应用十分广泛。
51控制步进电机并显示转速

dua=1;
P0=tabledua[shi];
dua=0;
delay (5);
wei=1;
P0=tablewei[1];
wei=0;
dua=1;
P0=tabledua[ge];
dua=0;
delay(5);
//TempData[0]=dofly_DuanMa[Speed/10];//分解显示信息,如要显示68,
unsigned char code tablewei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码
unsigned char TempData[8]; //存储显示值的全局变量
sbit A1=P1^0; //定义步进电机连接端口
void Display(unsigned char FirstBit,unsigned char Num);
void init();
void delay(uint z)
{
uint x,y;
for(x=20;x>0;x--)
for(y=z;y>0;y--);
}
void main()
{
unsigned int i=512;//旋转一周时间
}
sbit B1=P1^1;
sbit C1=P1^2;
sbit D1=P1^3;
#define Coil_AB1 {A1=1;B1=1;C1=0;D1=0;}//AB相通电,其他相断电
#define Coil_BC1 {A1=0;B1=1;C1=1;D1=0;}//BC相通电,其他相断电
#define Coil_CD1 {A1=0;B1=0;C1=1;D1=1;}//CD相通电,其他相断电
51单片机按键控制步进电机加减速及正反转

51单片机按键控制步进电机加减速及正反转之前尝试用单片机控制42步进电机正反转,电机连接导轨实现滑台前进后退,在这里分享一下测试程序及接线图,程序部分参考网上找到的,已经实际测试过,可以实现控制功能。
所用硬件:步进电机及驱动器、STC89C52单片机、直流电源1、硬件连接图•注意:上图为共阳极接法,实际连接参考总体线路连接。
•驱动器信号端定义:PUL+:脉冲信号输入正。
( CP+ )PUL-:脉冲信号输入负。
( CP- )DIR+:电机正、反转控制正。
DIR-:电机正、反转控制负。
EN+:电机脱机控制正。
EN-:电机脱机控制负。
•电机绕组连接A+:连接电机绕组A+相。
A-:连接电机绕组A-相。
B+:连接电机绕组B+相。
B-:连接电机绕组B-相。
•电源连接VCC:电源正端“+”GND:电源负端“-”注意:DC直流范围:9-32V。
不可以超过此范围,否则会无法正常工作甚至损坏驱动器.•总体线路连接输入信号共有三路,它们是:①步进脉冲信号PUL+,PUL-;②方向电平信号DIR+,DIR-③脱机信号EN+,EN-。
输入信号接口有两种接法,可根据需要采用共阳极接法或共阴极接法。
在这里我采用的是共阴极接法:分别将PUL-,DIR-,EN-连接到控制系统的地端(接入单片机地端);脉冲输入信号通过PUL+接入单片机(代码中给的P2^6脚),方向信号通过DIR+接入单片机(代码中给的P2^4脚),使能信号通过EN+接入(不接也可,代码中未接,置空)。
按键连接见代码,分别用5个按键控制电机启动、反转、加速、减速、正反转。
注意:接线时请断开电源,电机接线需注意不要错相,相内相间短路,以免损坏驱动器。
2、代码1.#include<reg51.h>2.#define MotorTabNum 53.unsigned char T0_NUM;4.sbit K1 = P3^5; // 启动5.sbit K2 = P3^4; // 反转6.sbit K3 = P3^3; // 加速7.sbit K4 = P3^2; // 减速8.sbit K5 = P3^1; //正反转9.10.sbit FX = P2^4; // 方向11.//sbit MotorEn = P2^5; // 使能12.sbit CLK = P2^6; // 脉冲13.14.inttable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};15.16.unsigned char g_MotorSt = 0; //17.unsigned char g_MotorDir = 0; //18.unsigned char MotorTab[7] = {12, 10, 8, 6, 4, 2,1};19.20.signed char g_MotorNum = 0;21.22.void delayms(xms);23.void mDelay(unsigned int DelayTime);24.void T0_Init();25.26.void KeyScan(void);27.28.29.30.void main(void)31.{32.T0_Init();33.// MotorEn = 0; //34.FX = 0;35.while(1)36.{37.KeyScan(); //38.}39.40.41.}42.43.void T0_Init()44.{45.TMOD = 0x01;46.TH0 = (65535-100)/256; // 1ms47.TL0 = (65535-100)%256;48.EA = 1;49.ET0 = 1;50.// TR0 = 1;51.52.}53.54.void T0_time() interrupt 155.{56.// TR0 = 0;57.TH0 = (65535-100)/256;58.TL0 = (65535-100)%256;59.T0_NUM++;60.if(T0_NUM >= MotorTab[g_MotorNum]) //61.{62.T0_NUM = 0;63.CLK=CLK^0x01; //64.}65.// TR0 = 1;66.}67.68.69.//--------------------------70.void KeyScan(void)71.{72.if(K1 == 0)73.{74.delayms(10);75.if(K1 == 0)76.{77.g_MotorSt = g_MotorSt ^ 0x01;78.// MotorEn ^= 1;79.TR0 = 1;80.FX ^= 0; //反转81.}82.}83.84.if(K2 == 0)85.{86.delayms(10); //正转87.if(K2 == 0)88.{89.g_MotorDir = g_MotorDir ^ 0x01;90.FX ^= 1; //加速91.}92.}93.94.if(K3 == 0) //95.{96.delayms(5); //加速97.if(K3 == 0)98.{99.g_MotorNum++;100.if(g_MotorNum > MotorTabNum) 101.g_MotorNum = MotorTabNum; 102.}103.}105.if(K4 == 0) //106.{107.delayms(5); // 减速108.if(K4 == 0)109.{110.g_MotorNum--;111.if(g_MotorNum < 0)112.g_MotorNum = 0;113.}114.}115.116.if(K5 == 0) //117.{118.delayms(10); // 正反转119.if(K5 == 0)120.{121.g_MotorSt = g_MotorSt ^ 0x01; 122.g_MotorDir = g_MotorDir ^ 0x01; 123.MotorEn ^= 1;124.TR0 = 1;125.while(1)126.{127.FX ^= 1; //128.delayms(90000);129.FX ^= 0; //130.delayms(90000);131.}132.}133.}135.136.void delayms(xms)//延时137.{138.unsigned int x,y;139.for(x=xms;x>0;x--)140.for(y=110;y>0;y--);141.}3、常见问题解答•控制信号高于5v一定要串联电阻,否则可能会烧坏驱动器控制接口电路。
51单片机电机三档调速程序

/*******************************************一键三档风扇程序 2022年8月28日******************************************/#include<reg52.h> //包含52单片机寄存器定义的头文件#include<intrins.h>unsigned char Tab[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //段码表sbit ON_OFF=P3^2;//开关定义sbit motor=P3^5;//马达控制脚sbit dis=P3^4;int i=0;//档位标志void delay1ms(unsigned int i) //1ms延时程序{unsigned int j;for(;i>0;i--)for(j=0;j<125;j++){;}}/******************************************************************函数功能:延时约0.6ms********************************************************************/void delay(void){unsigned char j;for(j=0;j<200;j++);}void settinglow(){motor=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();motor=1;}/****************************************************************** 函数功能:显示计数次数的子程序入口参数:i********************************************************************/ void Display(unsigned char i){dis=0; //P3.4引脚输出低电平,数码管点亮P1=Tab[i%10]; //显示个位delay();dis=1;P1=0xff;delay();}/*******************************************函数功能:主函数******************************************/void main(void){EA=1; //开放总中断EX0=1; //允许使用外中断IT0=1; //选择负跳变来触发外中断i=0;motor=0;while(1){if(i>0){Display(i);}switch(i){case 0:motor=0;break;case 1:motor=1;break;case 2:settinglow();break;case 3:motor=~motor;break;}}}/************************************************************** 函数功能:外中断T0的中断服务程序**************************************************************/ void it0(void) interrupt 0 using 0 //外中断0的中断编号为0{if(ON_OFF==0){delay1ms(50);if(ON_OFF==0){i++;//按一次开关键,改变一个档位}}if(ON_OFF==0){delay1ms(1000);//长按1秒则关闭风扇if(ON_OFF==0){i=0;}}if(i==4)//最慢档后再按一次到最快档{i=1;}}。
基于单片机控制的步进电机调速系统的设计51单片机步进电机调速

基于单片机控制的步进电机调速系统的设计51单片机步进电机调速基于单片机控制的步进电机调速系统的设计|51单片机步进电机调速前言步进电机最早是在1920年由英国人所开发。
1950年后期晶体管的发明也逐渐应用在步进电机上,这对于数字化的控制变得更为容易。
以后经过不断改良,使得今日步进电机已广泛运用在需要高定位精度、高分解性能、高响应性、信赖性等灵活控制性高的机械系统中。
在生产过程中要求自动化、省人力、效率高的机器中。
步进电机作为执行元件,是机电一体化的关键产品之一, 广泛应用在各种自动化控制系统中。
随着微电子和计算机技术的发展,步进电机的需求量与日俱增,在各个国民经济领域都有应用。
步进电机是将电脉冲信号变换成角位移或直线位移的执行部件。
步进电机可以直接用数字信号驱动,使用非常方便。
一般电动机都是连续转动的,而步进电动机则有定位和运转两种基本状态,当有脉冲输入时步进电动机一步一步地转动,每给它一个脉冲信号,它就转过一定的角度。
步进电动机的角位移量和输入脉冲的个数严格成正比,在时间上与输入脉冲同步,因此只要控制输入脉冲的数量、频率及电动机绕组通电的相序,便可获得所需的转角、转速及转动方向。
在没有脉冲输入时,在绕组电源的激励下气隙磁场能使转子保持原有位置处于定位状态。
因此非常适合于单片机控制。
步进电机还具有快速启动、精确步进和定位等特点,因而在数控机床,绘图仪,打印机以及光学仪器中得到广泛的应用。
步进电动机已成为除直流电动机和交流电动机以外的第三类电动机。
传统电动机作为机电能量转换装置,在人类的生产和生活进入电气化过程中起着关键的作用。
步进电机可以作为一种控制用的特种电机,利用其没有积累误差(精度为100%)的特点,广泛应用于各种开环控制。
第一章步进电机概述第一节步进电机的特点一般步进电机的特点有以下三个特点:1)一般步进电机的精度为步进角的3-5%,且不累积。
2)步进电机的力矩会随转速的升高而下降。
当步进电机转动时,电机各相绕组的电感将形成一个反向电动势;频率越高,反向电动势越大。
51单片机PWM电机调速程序

51单片机PWM电机调速程序#include#define TH0_TL0 (65536-1000)//设定中断的间隔时长unsigned char count0 = 50;//高电平的占空比unsigned char count1 = 0;//比较用的临时变量bit Flag = 1;//电机正反转标志位,1正转,0反转sbit Key_add=P2 ^ 0; //电机减速sbit Key_dec=P2 ^ 1; //电机加速sbit Key_turn=P2 ^ 2; //电机换向sbit PWM1=P2^6;//PWM 通道 1,反转脉冲sbit PWM2=P2^7;//PWM 通道 2,正转脉冲unsigned char Time_delay;void Delay(unsigned char x);void Motor_speed_high(void);void Motor_speed_low(void);void Motor_turn(void);void Timer0_init(void);void Delay(unsigned char x){Time_delay = x;while(Time_delay != 0);//等待中断,可减少PWM输出时间间隔}void Motor_speed_high(void)//{if(Key_add==0){Delay(10);if(Key_add==0){count0 += 5;if(count0 >= 100){count0 = 100;}}while(!Key_add);//等待键松开}}void Motor_speed_low(void){if(Key_dec==0){Delay(10);if(Key_dec==0){count0 -= 5;if(count0 <= 0){count0 = 0;}}while(!Key_dec );}}void Motor_turn(void) {if(Key_turn == 0) {Delay(10);if(Key_turn == 0) {Flag = ~Flag;}while(!Key_turn);}}void Timer0_init(void) {TMOD=0x01; //定时器0工作于方式1 TH0=TH0_TL0/256;TL0=TH0_TL0%6;TR0=1;ET0=1;EA=1;}void main(void){Timer0_init();while(1){Motor_turn();Motor_speed_high();Motor_speed_low();}}void Timer0_int(void) interrupt 1 using 1 {TR0 = 0;//设置定时器初值期间,关闭定时器TL0 = TH0_TL0 % 256;TH0 = TH0_TL0 / 256 ;//定时器装初值TR0 = 1;if(Time_delay != 0)//延时函数用Time_delay--;}if(Flag == 1)//电机正转{PWM1 = 0;if(++count1 < count0) {PWM2 = 1;}elsePWM2 = 0;if(count1 >= 100) {count1=0;}}else //电机反转{PWM2 = 0;if(++count1 < count0) {PWM1 = 1;}elsePWM1 = 0;if(count1 >= 100){count1=0;}}}这个程序是我转来的下载在硬件上是能通过的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告设计题目:遥控小车——基于51单片机的步进电机调速系统学院:专业:班级:学号:姓名:电子邮件:时间:成绩:指导教师:华南农业大学理学院应用物理系课程设计(报告)任务书学生姓名指导教师职称学生学号专业电子信息科学与技术题目基于51单片机的步进电机调速系统(遥控小车)任务与要求1. 设计并制作电路,利用单片计控制步进电机运转。
2. 通过键盘可以不间断地设定改变电机的转速、转向。
3. 利用显示器实时显示转速等参数。
4. 扩展功能:可设定转动步数。
开始日期2014 年3 月完成日期2014 年3 月1引言步进电机是一种将电脉冲转化为角位移的执行机构。
目前,步进机已经广泛应用于领域,例如工业生产中的机械臂的控制,照明装置和监控摄像机转动等。
步进机在装置转动、精确位移方面有很重大的作用。
本系统是基于STC89C51 单片机的遥控小车。
采用STC89C51单片机作为控制核心,通过ULN2003A驱动步进机(28BYJ-48)转动,由按键和显示屏1602组成人机交互模块,同时通过315M无线发射和接收模块向单片机输入控制信号,将整个系统固定于简易小车上,最终实现小车测试和远程遥控功能。
基本达到预定的设计要求以及功能的扩展。
2系统的设计与理论分析2.1系统总体设计2.2理论分析本设计分为两种工作模式:测试模式、遥控模式。
在电路板上有一个带锁的开关进行设置。
测试模式工作时,通过控制小车上的按键进行加速、减速、反转、设置、步数增、步数减等按键,单片机扫描按键,通过软件控制液晶模块显示对应的转速、设置的速度和步数,同时控制步进机模块进行相应的转动。
步进机的是由ULN2003A达林顿管驱动,由单片机控制输入脉冲的频率来控制步进机的转速,单片机是通过程序查表对4个I/O口输出脉冲,本次设计采用的是两相四线减速步进机,步进角为5.625°,减速比为64:1,程序采用的是8拍查表,具有较好的扭矩。
遥控模式工作时,遥控部分五个按键分别输入前、后、左、右、暂停,单片机扫描按键,通过无线发射模块发射串行编码,小车的无线接收模块接收对应的编码,送至单片机进行解码,从而控制液晶模块的显示和步进机模块的工作,进而完成功能。
设定单通道无线收发模块通信协议为:下降沿:1ms的高电平,随后500us的低电平。
起始位:4ms的高电平,随后4ms的低电平。
数据1:2ms的高电平,随后500us的低电平。
数据0:1ms的高电平,随后500us的低电平。
结束位:4ms的低电平。
发送指令程序为:{下降沿,起始位,3个数据位,结束位}发送编码为:右转:000前进:001后退:010左转:011接收程序通过触发外部中断1来接受信号,当P3.3口收到下降沿信号是即开始接收数据。
3硬件系统设计3.1总体电路图3.2单片机最小系统本次设计采用的是两相四线减速步进电机,步进角为5.625°,减速比为64:1 采用ULN2003达林顿管驱动。
3.4液晶显示模块液晶显示模块采用LCD1602显示屏。
3.6遥控器部分4软件系统设计4.1主函数4.2遥控模式程序4.3测试模式程序4.4键盘扫描程序5系统运行情况分析打开小车开关后,按下“测试”按键,小车进入测试模式。
连续按“加速”按键时,小车轮子转速明显变快;连续按“减速”按键时,小车轮子转速逐渐变慢;按“反转”按键轮子转速反向。
按“设置”按键会看到液晶显示屏关标闪烁,按“设置”键使光标移动,按“+”、“-”设置小车速度和步数,再一次按“设置”键,小车会依照这顶要求行驶。
按“测试”按键使其弹起,测试小车进入遥控模式工作时,打开遥控器,分别按下“前”、“后”、“左”、“右”,小车会依照对应的方向行驶,按下“暂停”键时,小车停止。
由此,改系统基本达到设计要求及拓展功能的要求。
不过因为本设计采用的28BYJ-48步进机为减速步进机,转动的上限值比较下,导致小车的行驶效果较慢,这个问题可以通过课后改用其他型号计算机得以解决。
6总结与讨论经过四个星期的单片机课程设计,终于完成了基于51单片机的步进电机调速系统的设计,基本达到设计要求。
同时自己在该系统上扩展无线收发模块,将该系统拓展为遥控小车。
在本次设计的过程中,我们组成员进行了热烈讨论及反复的斟酌、修改。
首先对需要用到的元器件的参数进行充分的了解,然后在计算机上用Proteus进行了与Keil软件的联动仿真。
确认仿真正确看是硬件的焊接与调试。
在实验过程中,我们也遇到了许多问题,如步进机转动不起来、液晶屏显示乱码等,但是经过不断的探索、思考、验证,我们最终克服了种种困难,解决了所遇到的问题,成功地完成了这个课程设计。
在这个过程中,除了学习到关于本次设计的一些专业知识、电路焊接实践经验外,同时,大家的刻苦耐劳、团队合作的品质也得到了充分的锻炼。
图1 遥控小车图2 遥控器附2:参考文献[1] 李朝青. 单片机原理及接口技术[M].第3版. 北京航空航天大学出版社, 2005.[2] 杨素行. 模拟电子技术基础简明教程[M]. 第三版. 高等教育出版社, 2006.A.庞明辕:电路焊接、单片机编程、电路调试、辅助完成设计报告。
B.杜烁:电路焊接、单片机编程、辅助方案改进、辅助完成设计报告。
C.汤安琪:电路焊接、数据采集、完成设计报告。
附4:元器件清单表格评语:成绩:附:程序代码:/**********************单片机课程设计C语言程序************************题目:基于步进机的小车成员:汤安琪、庞明辕、杜烁。
日期:2014-3-1******************************************************************/#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit a = P1^0;//反向sbit b = P1^1; //减速sbit c = P1^2;//加速sbit d = P1^3;//开关sbit f = P1^4;//设置sbit g = P1^5;//加sbit h = P1^6;//减sbit lcden = P3^7; //1602使能sbit lcdrs = P3^6; //1602写命令/数据选择端sbit trans = P3^3;//射频串行输入端bit n,p;uint step,time,flag,flag1,num,snum,setnum,stepnum,count,temp,sum,t,e,j,k,m;uchar v0,v1,v2,count1,num1,temp1;uchar code table1[] = {0x11,0x33,0x22,0x66,0x44,0xcc,0x88,0x99};//左uchar code table2[] = {0x11,0x99,0x88,0xcc,0x44,0x66,0x22,0x33};//右uchar code table3[] = {0x11,0x93,0x82,0xc6,0x44,0x6c,0x28,0x39};//后uchar code table4[] = {0x11,0x39,0x28,0x6c,0x44,0xc6,0x82,0x93};//前uchar code table5[] = {"SPEED: 000 r/h"};uchar code table6[] = {"SET:000 STEP:000"};/*------------------------------------------------延时程序------------------------------------------------*/void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=10;y>0;y--);}void delay1(uint z) //10us{uchar a,b,x;for(x=0;x<z;x++)for(b=1;b>0;b--)for(a=2;a>0;a--);}/*------------------------------------------------ LCD1602写命令程序------------------------------------------------*/ void write_com(uchar com){lcdrs = 0;P0 = com;delay(5);lcden = 1;delay(5);lcden = 0;}/*------------------------------------------------ LCD1602写数据程序------------------------------------------------*/ void write_dat(uchar dat){lcdrs = 1;P0 = dat;delay(5);lcden = 1;delay(5);lcden = 0;}/*------------------------------------------------ 基于LCD1602的显示程序------------------------------------------------*/ void display(uchar add,uchar dat){uint bai,shi,ge;bai = dat/100;shi = (dat-(dat/100)*100)/10;ge = dat%10;write_com(0x80+add);write_dat(0x30+bai);write_dat(0x30+shi);write_dat(0x30+ge);}/*------------------------------------------------小车速度计算程序------------------------------------------------*/void speed_dis(){double n;if(b == 0){delay(5);if(b==0){while(!b);time = time+10;if(time>=300)time=300;}}if(c == 0){delay(5);if(c==0){while(!c);time = time-10;if(time<=70)time=70;}}n = 15*time/1024;count = 60*n;}/*------------------------------------------------步数执行程序:进入设置模式设置步数,确认后执行。