完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
用STC12C5A60S2编写的程序不能正常运行,进入for中正反转循环就跳不出来,数码管也不亮了,其他红外按键也没用了,还有就是PWM给电机调速只有CCAP1H的值在200至255中间有效,跪求大神解惑。
#include #include #define uchar unsigned char #define uint unsigned int typedef uchar INT8U; typedef uint INT16U; ***it PWM_1=P1^4; //PWM输出端口 ***it A1=P1^5; //定义直流电机正端口 ***it A2=P1^6; //定义直流电机负端口 ***it IR = P3^2; //定义红外脉冲数据接口 ***it beep = P3^6; //蜂鸣器的位置 ***it P2_0 = P2^0; //数码管位选接口 ***it P2_1 = P2^1; ***it P2_2 = P2^2; ***it P2_3 = P2^3; ***it S1=P2^5; //限位开关1 ***it S2=P2^6; //限位开关2 #define D_A1 {A1=1;A2=0;} //电机正转 #define D_A2 {A1=0;A2=1;} //电机反转 #define D_AOFF {A1=1;A2=1;} //电机停 uint W=0; //定义速度等级 uchar A=0; //方向标记 0,1 uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82, 0xf8,0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e}; uchar IRtime; //检测红外高电平持续时间(脉宽) uchar IRcord[4]; //此数组用于储存分离出来的4个字节的数据(用户码2个字节+键值码2个字节) uchar IRdata[33]; //此数组用于储存红外的33位数据(第一位为引导码用户码16+键值码16) bit IRpro_ok, IRok; //第一个用于红外接收4个字节完毕。IRok用为检测脉宽完毕 void delay(uint z) { uint x,y; for(x = z; x > 0; x--) for(y = 112; y > 0 ; y--); } void time0() interrupt 1 //定义定时器0 { IRtime++; //检测脉宽,1次为278us } void int0() interrupt 0 //定义外部中断0 { static uchar num; // 声明静态变量 static bit startflag; //开始储存脉宽标志位 if(startflag) //开始接收脉宽检测 { if( (IRtime < 53) && (IRtime >= 32) ) num= 0; IRdata[num] = IRtime; IRtime = 0; num++; if(num== 33) { IRok = 1; num= 0; } } else { IRtime = 0; startflag = 1; } } void IRcordpro() { uchar i, j, k, cord, value; cord k = 1; for(i = 0; i < 4; i++) { for(j = 0; j < 8; j++) { cord = IRdata[k]; if(cord > 5) value = value | 0x80; if(j < 7) { value = value >> 1; } k++; } IRcord[i] = value; value = 0; } IRpro_ok = 1; } void init_pwm() { CCON = 0; CL = 0; CH = 0; CMOD = 0X00; CCAPM1 =0x42; CCAP1H=0x00; CCAP1L=0x00; CR=1; } void pwm1_set (uchar a) { CCAP1L= a; CCAP1H= a; } /********************************************************************** 数码管显示 **********************************************************************/ void disp(void) { P2_0 = 1;P2_1 = 1;P2_2 = 1;P2_3 = 0; P0=table[W%10]; //显示占空比个位 delay(1); P2_0 = 1;P2_1 = 1;P2_2 = 1;P2_3 = 1; P2_0 = 1;P2_1 = 0;P2_2 = 1;P2_3 = 1; P0=table[W/100]; //显示占空比十位 delay(1); P2_0 = 1;P2_1 = 1;P2_2 = 1;P2_3 = 1; P2_0 = 1;P2_1 = 1;P2_2 = 0;P2_3 = 1; P0=table[W/10%10]; //显示占空比百位 delay(1); P2_0 = 1;P2_1 = 1;P2_2 = 1;P2_3 = 1; P2_0 = 0;P2_1 = 1;P2_2 = 1;P2_3 = 1; P0=table[A]; //显示方向 delay(1); P2_0 = 1;P2_1 = 1;P2_2 = 1;P2_3 = 1; } void san() { uchar i; while(1) { for(i=0;i<2;i++) { if(S1==0) D_A1; if(S2==0) D_A2; } if(i==2) { i=0; } D_AOFF; beep = 0; delay(100); beep = 1; } } void qi() { uchar i; while(1) { for(i=0;i<6;i++) { if(S1==0) D_A1; if(S2==0) D_A2; } if(i==6) { i=0; } D_AOFF; beep = 0; delay(100); beep = 1; } } void main() { init_pwm(); EA = 1; TMOD |= 0x02; TH0 = 0x00; TL0 = 0x00; ET0 = 1; TR0 = 1; IT0 = 1; EX0 = 1; disp(); pwm1_set (1); W = 220; while(1) { if(IRok) { IRcordpro(); IRok = 0; if(IRpro_ok) { switch(IRcord[2]) { case 0x45: //按键1 beep = 0; delay(15); beep = 1; san(); break; case 0x46: //按键2 beep = 0; delay(15); beep = 1; qi(); break; case 0x47: //按键3 beep = 0; delay(15); beep = 1; D_AOFF; break; case 0x5a: //按键 左 占空比控制 速度增加 beep = 0; delay(15); beep = 1; W+=5; pwm1_set(W); if(W > 255) { W=255; } break; case 0x08: //按键 右 占空比控制 速度减小 beep = 0; delay(15); beep = 1; W-=5; pwm1_set(W); if(W < 200) { W=200; } break; } IRpro_ok = 0; } } } } |
|
相关推荐
5个回答
|
|
|
|
|
|
你先一个模块一个模块单独调试,都弄好了再往一起组合,现在问题出在哪里都不知道,看着很累
|
|
|
|
|
|
|
|
scan里面既然有while(1)可以加break跳出,不然就进入死循环,或者就不要用while(1)
|
|
|
|
void san()
{ uchar i; while(1) { for(i=0;i<2;i++) { if(S1==0) D_A1; if(S2==0) D_A2; } if(i==2) { i=0; } D_AOFF; beep = 0; delay(100); beep = 1; } } void qi() { uchar i; while(1) { for(i=0;i<6;i++) { if(S1==0) D_A1; if(S2==0) D_A2; } if(i==6) { i=0; } D_AOFF; beep = 0; delay(100); beep = 1; } } 我也是新手不知说的对不对 程序只要进入上面这2段内就出不来了。 把这2段代码中的“while(1)”去掉,打包直接放到main()内的while(1)san();qi();内。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
《DNESP32S3使用指南-IDF版_V1.6》第三十五章 摄像头实验
757 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第三十章 DHT11数字温湿度传感器
728 浏览 0 评论
826 浏览 0 评论
【敏矽微ME32G070开发板免费体验】之原厂2812测试例程解析
1459 浏览 0 评论
1208 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12059 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-29 09:59 , Processed in 0.623284 second(s), Total 81, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号