控制多路电机的启停,用74hc595串转并来控制多路继电器从而控制电机的启停,按键使用74hc165来实现并转串,以此识别按键值,一共搞了12路电机,电机速度也可以调节,看着图很大,但功能很基础,实际上做起来并不麻烦。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #include<reg52.h>
- #include<intrins.h>
- #include<74HC595.h>
- #include<74HC165.h>
- #include<dianji.h>
- #define uchar unsigned char
- #define uint unsigned int
- /**********函数声明********************/
- void init();
- /***********************************/
- uchar time;
- uchar m;
- void main()//主函数
- {
- init();
- while(1)
- {
- m=CPWM();
- dianji();
- }
- while(1)
- {};
- }
- void init()//初始化函数
- {
- _74hc165_init();//调速按键检测初始化
- _74hc165dianji_init();//电机切换检测初始化
- SendTo595(0x00);//电机停止
- SendTo595(0x00);
- OutFrom595();
- SendTo5952(0xff);//显示档位的数码管初始化
- OutFrom595led1();
- TMOD=0x01;//定时/计数器工作方式1
- TH0=(65536-1000)/256;//设定时间为1ms
- TL0=(65536-1000)%256;
- EA=1;//打开总中断
- TR0=1;//启动T0
- ET0=1; //定时/计数器0允许
- }
- void t0int() interrupt 1//产生PWM波,1000Hz,时钟周期就是1ms,就是1000us
- {
- TR0=0;
- TH0=(65536-1000)/256;
- TL0=(65536-1000)%256;
- TR0=1;
- time++;
- if(time>=100) time=0;
- if(time<=m)
- {
- SendTo595PWM(0x0f);
- SendTo595PWM(0xff);
- OutFrom595PWM();
- }
- else
- {
- SendTo595PWM(0x00);
- SendTo595PWM(0x00);
- OutFrom595PWM();
- };
- }
复制代码
所有资料51hei提供下载:
电机控制.zip
(293.12 KB, 下载次数: 29)
|