1、单片机控制定速往复运动实验一、实验目的1、了解行程开关和减速电机的结构和原理2、熟练掌握单片机和键盘显示电路的应用3、学会利用单片机对运动小车的控制二、实验器材1、DCP-002 单片机 89S51 电路、2、DCP-003 键盘及 LED 数字显示电路、3、DCP-006 功率输出电路。4、运动小车平台5、万用表和导线三、实验原理根据行程开关的触发信号,以外部中断方式,通过单片机判断后使 I/O 口输出高低电平,控制 DCP-006 的继电器的导通和关闭,控制加到直流电机输入端的电压的正负方向,改变电机的转动方向,从而改变小车的运动方向。同时在 LED 数码显示电路上运用跑马灯原理来显示小车
2、运动的方向。如下图所示:四、实验步骤1、 把 DCP-003 的 CS、RST 短接后接到 DCP-002 的 GND,DCP-003 的 CLK 接到 DCP-002 的 ALE。把 DCP-003 的 P1 接到 DCP-002 的 P2。2、 把运动小车平台上左右两个行程开关的 COM 接电源的 GND,左边的行程开关的 NO接 DCP-002 的 P3.2,右边的 NO 接 P3.3,电机输入的红色接线柱接 DCP-006 的COM1,黑色接线柱接电源的 GND。3、 把 DCP-006 的 IN1 接到 DCP-002 的 P1.1,NC1 接电源的+12V,NO1 接电源的-12V
3、 。4、 把各模块的电源都接上并注意共地。5、 把“单片机控制的定速往复运动实验.HEX”文件下载到单片机中,并运行。接线图参考程序/-头文件引用-#include#include /XBYTE 函数在该库中/-宏声明-#define D8279 XBYTE0x9000 /8279 数据口地址#define C8279 XBYTE0xB000 /8279 命令口地址/*变量定义 */#define uchar unsigned char#define uint unsigned intsbit qianjin=P32;sbit houtui=P33;sbit shuchu=P11;uchar
4、flag;unsigned char code dispbitcode188 = 0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00
5、,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04;unsigned char code dispbitcode288 = 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x0
6、0,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00;/*延时函数 */void delays(unsigned char k) unsigned char i,j;for(i=0;ik;i+)for(j=0;j50;j+);/*显示函数 */void display1(void) uint i,j;C8279=0x90; /写显示命令for(j=0;j8;j+)for(i=0;i8;i+) D8279=dispbi
7、tcode1ji;delays(300);void display2(void)uint i,j;C8279=0x90; /写显示命令for(j=0;j8;j+)for(i=0;i8;i+) D8279=dispbitcode2ji;delays(300);/*8279 初始化函数 */void init8279(void)C8279=0x00 ; /左端进入 8x8 显示,二键封锁,编码扫描C8279=0x32 ;/扫描速率,设置内部分频约为 11.0592/6/100=18,CLK 接 ALEC8279=0xD1 ;/清除/*外部中断 0 函数*/void intr0() interrupt 0flag=0;/*外部中断 1 函数*/void intr1() interrupt 2flag=1;/*主函数*/void main() shuchu=1;flag=1;display2();IT0=1;EX0=1;IT1=1;EX1=1;EA=1;init8279(); /初始化 8279while(1)if(flag=0)shuchu=0;display1();if(flag=1)shuchu=1;display2();