控制多路電機的啟停,用74hc595串轉并來控制多路繼電器從而控制電機的啟停,按鍵使用74hc165來實現并轉串,以此識別按鍵值,一共搞了12路電機,電機速度也可以調節(jié),看著圖很大,但功能很基礎,實際上做起來并不麻煩。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
P1%2_M41LE8A3)NATXJDG.png (132.62 KB, 下載次數: 44)
下載附件
2021-1-27 00:12 上傳
GB7}7~L[RB%R}R5@I41K(O7.png (224.68 KB, 下載次數: 52)
下載附件
2021-1-27 00:12 上傳
單片機源程序如下:
- #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)
2021-1-27 00:07 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|