用51单片机控制直流电机 实现调速等功能
电路原理图如下:
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载):
单片机源程序如下:
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit key2=P3^2;
- sbit key1=P3^1;
- sbit CLOCK=P2^4;
- sbit ST=P2^5;
- sbit EOC=P2^6;
- sbit OE=P2^7;
- sbit PWM=P3^7;
- uint temp;
- uchar start;
- void keyscan();
- void delay(uint zz);
- void main()
- {
- P3=0;P0=0xff;
- TMOD=0x02;
- TH0=0x01;
- TL0=0X00;
- IE=0x82;
- TR0=1;
- start=0;
- while(1)
- {
-
- keyscan();
- while(start)
- {
- ST=0;ST=1;ST=0; //启动ADC0809
- while(!EOC); //查询EOC是否为1;
- OE=1;
- temp=P1; //读取A/D转化的结果
- OE=0;
- PWM=1; //PWM输出高电平
- keyscan();
- delay(temp); //正脉冲宽度
- PWM=0; //PWM输出低电平
- keyscan();
- delay(255-temp); //低脉冲宽度
- }
- }
- }
- void keyscan()
- {
- key2=1;
- key1=1;
- if(!key1)
- {
- delay(5);
- if(!key1)
- {
- start=1;
- }
- while(!key1);
- delay(5);
- while(!key1);
- }
- key2=1;
- key1=1;
- if(!key2)
- {
- delay(5);
- if(!key2)
- {
-
- if(!PWM)PWM=1;
- else PWM=0;
- if(start)PWM=0;
- start=0;
- }
- while(!key2);
- delay(5);
- while(!key2);
- }
- }
- void clockwave() interrupt 1
- {
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
直流电机控制proteus仿真.rar
(291.46 KB, 下载次数: 142)
|