1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 单片机课程设计-基于单片机直流电机控制器设计

单片机课程设计-基于单片机直流电机控制器设计

时间:2020-07-31 03:46:17

相关推荐

单片机课程设计-基于单片机直流电机控制器设计

本科单片机课程设计,附Proteus仿真效果图

要求:

思路很简单,使用定时器0控制单片机IO口输出不同占空比的触发脉冲即可控制转速

代码参考:

#include <reg52.h>#define uchar unsigned charsbit key1=P1^0;//¿ª¹Øsbit out1=P1^1;//Êä³öÕýתsbit out2=P1^2;//Êä³ö·´×ªsbit key2=P1^3;//Õýתsbit key3=P1^4;//·´×ªsbit key4=P1^5;//Õ¼¿Õ±È+1sbit key5=P1^6;//Õ¼¿Õ±È-1sbit led1=P2^2;//ָʾÕýתsbit led2=P2^1;//ָʾ·´×ª+sbit led3=P2^0;//ָʾ¿ªÊ¼/ÔÝÍ£void Key_Scan();void Delayms(int ms);void Timer0Init(void);uchar start=0;uchar intr;uchar zheng=1;uchar fan=0;uchar m=3;unsigned int tt,time;void main(){Timer0Init();while(1){if(m==3)time=100;else if(m==7)time=200;else if(m==11)time=400;else if(m==15)time=800;else if(m==19)time=1200;Key_Scan();}}/************************°´¼üɨÃè***************************/void Key_Scan() //°´¼üɨÃè{if(key1==0){Delayms(5);if(key1==0){start=!start;}while(!key1);}if(key2==0){Delayms(5);if(key2==0){zheng=1;fan=0;}while(!key2);}if(key3==0){Delayms(5);if(key3==0){zheng=0;fan=1;}while(!key3);}if(key4==0){Delayms(5);if(key4==0){if(m<=15){m=m+4;}}while(!key4);}if(key5==0){Delayms(5);if(key5==0){if(m>=7){m=m-4;}}while(!key5);}}/******************Èí¼þÑÓʱ 5ms*****************/void Delayms(int ms) //ÑÓʱº¯Êý{int x,y;for(x=0;x<ms;x++)for(y=0;y<110;y++);}/******************¶¨Ê±Æ÷0²úÉú1msÑÓʱ*******************/void Timer0Init(){TMOD|=0X01;TH0=0XFC;TL0=0X18;ET0=1;EA=1;TR0=1;}/*******************¶¨Ê±Æ÷0ÖÐ¶Ï ²úÉúPWM¡¢¿ØÖÆLED*****************************************/void Timer0() interrupt 1{TH0=0XFC;TL0=0X18;if(start==1){intr++;if(zheng==1){if(intr==1) {out1=1;out2=0;}else if(intr==m){out1=0;out2=0;}else if(intr==20){intr=0;}}else if(fan==1){if(intr==1) {out1=0;out2=1;}else if(intr==m){out1=0;out2=0;}else if(intr==20){intr=0;}}}if(start==1){if(zheng==1){led1=0;led2=1;}if(fan==1){led1=1;led2=0;}tt++;if(tt<=time){led3=0;}else if(tt==time*2){tt=0;led3=1;}}else if(start==0){led1=1;led2=1;led3=1;}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。