完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
/**************************************************** ========= 直流电机控制+速度显示 ========== ****************************************************/ #include #define uchar unsigned char //宏定义 #define uint unsigned int #define CYCLE 10 //定义PWM的周期T为10ms //数码管段选定义 0 1 2 3 4 5 6 7 8 9 uchar code smg_du[]={0x28,0xee,0x72,0xa2,0xe4,0x41,0x21,0xea,0x70,0xa0, 0x60,0x25,0x34,0x26,0x61,0x71,0xff}; //断码 uchar dis_smg[8] = {0}; /*************************************************** 端口定义 ***************************************************/ ***it PWM1=P2^0; //PWM输出口1(电机正转) ***it PWM2=P2^5; //PWM输出口2(电机反转) ***it K1=P2^7; //加速 ***it K2=P2^6; //减速 ***it K3=P2^3; //正反转 ***it K4=P2^2; //启动停止 //数码管位选定义 ***it smg_we1 = P3^4; //数码管位选定义 ***it smg_we2 = P3^5; ***it smg_we3 = P3^6; ***it smg_we4 = P3^7; /***************************************************/ uchar PWM_ON=0; //PWM高电平时间 uchar count=0; //中断计时 uchar num=0; uchar num1=0; //中断时间计数 uint num2=0; //外部中断次数 uchar flat=0; //正反转标示位 uchar flag=0; //刷新数据标示位 /*************************************************** 函数名称:延时子函数 函数功能:按键消抖 ***************************************************/ void delayms(uint xms) { uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); } /***********************数码位选函数*****************************/ void smg_we_switch(uchar i) { switch(i) { case 0: smg_we1 = 0; smg_we2 = 1; smg_we3 = 1; smg_we4 = 1; break; case 1: smg_we1 = 1; smg_we2 = 0; smg_we3 = 1; smg_we4 = 1; break; case 2: smg_we1 = 1; smg_we2 = 1; smg_we3 = 0; smg_we4 = 1; break; case 3: smg_we1 = 1; smg_we2 = 1; smg_we3 = 1; smg_we4 = 0; break; } } /********************数码显示函数*************************/ void display() { static uchar i; uint shuju; if(flag==1) { flag=0; shuju=num2; //电机一秒转的圈数 num2=0; } if(flat==0) dis_smg[3] = smg_du[10]; //"A" //正转 else dis_smg[3] = smg_du[15]; //"F" //反转 dis_smg[0] = smg_du[shuju % 10]; //显示 dis_smg[1] = smg_du[shuju / 10 % 10]; dis_smg[2] = smg_du[shuju / 100 % 10]; i++; if(i > 4) i = 0; P1 = 0xff; //段选 smg_we_switch(i); //位选 P1 = dis_smg; //段选 delayms(3); } /*************************************************** 函数名称:按键子函数 函数功能: ***************************************************/ void key() { if(K4==0) //启动 停止 { delayms(5); if(K4==0) { while(!K4) display(); //显示函数 num=!num; } } if(K1==0) //加速键 { delayms(5); if(K1==0) { while(!K1) display(); //显示函数 if(num<3) num++; } } if(K2==0) //减速键 { delayms(5); if(K2==0) { while(!K2); if(num>0) num--; } } if(K3==0) //电机正反转按键 { delayms(5); if(K3==0) { while(!K3) ; flat++; if(flat==2) flat=0; num1 = 0; num2 = 0; } } switch(num) { case 0: PWM_ON=0; break; //占空比为00% case 1: PWM_ON=40; break; //占空比为40% case 2: PWM_ON=70; break; //占空比为70% case 3: PWM_ON=100; break; //占空比为100% default: break; } } void init() { PWM1=1; //初始化 PWM2=1; TMOD=0x11; //打开定时器 TH0=(65536-50000)/256; TL0=(65536-50000)%256; ET0=1; TR0=1; EX0=1; IT0=1; TH1=(65536-1000)/256; TL1=(65536-1000)%256; EA=1; ET1=1; TR1=1; } /************************************************** 函数名称:主函数 函数功能: **************************************************/ void main() { init(); while(1) { key(); display(); //显示函数 } } /************************************************** 函数名称:定时器/计数器0中断子函数 函数功能: **************************************************/ void T1_time() interrupt 3 { TH1=(65536-1000)/256; TL1=(65536-1000)%256; count++; if(count>CYCLE) count=0; if(count if(flat==0) { PWM1=0; PWM2=1; } if(flat==1) { PWM1=1; PWM2=0; } } else //如果计时时间大于高电平时时间,电机停 { PWM1=1; PWM2=1; } } void T0_time() interrupt 1 //定时器0 { TH0=(65536-5000)/256; TL0=(65536-5000)%256; num1++; if(num1==20) //每1s刷新一次数据 { num1=0; flag=1; } } void timer() interrupt 0 //外部中断1 { num2++; } |
|
相关推荐
1个回答
|
|
大神帮忙解释下代码,报酬私聊2436849192
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
685 浏览 0 评论
使用Keil建立完整的工程,并使用外部中断0触发数码管显示903
1235 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-使用AHT20进行环境监测之AHT20传感器介绍
1175 浏览 0 评论
896 浏览 0 评论
944 浏览 1 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11849 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-3 04:25 , Processed in 0.572700 second(s), Total 75, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号