有没有活跃一点的51交流QQ群呀?

2020-02-02 09:18发布

        本人菜鸟一名,自学51一段时间(机械专业),其中很多不懂,有问题来论坛发帖也很久才有人回复,大多稍稍点到为止,所以本人想找个好一点的51QQ群,及时交流,更多更好的向51大神们学习。

另外发一下最近一直困扰我的一段程序,发了几次贴,问题还没有解决,再发一次,目的和问题都在里边,望大神们指点,本人不胜感激。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
24条回答
daxiaolijun
2020-02-04 14:36
Anqi90 发表于 2012-11-21 18:45
只有一个说明:

尊敬的用户:

呵呵,对不起,我用的压缩文件就是快压的,没想到这软件这么霸道。我把程序发在下面吧,认为哪有问题希望大神不吝赐教。

//目的:两个按键控制两个直流电机的加速和减速,长按(>=2S)加速,短按减速,上电时两电机均有个初速。
//问题:在该程序下连接两个电机时按键操作没反应,去掉一个电机按键全都是减速,加速没反应。
//有人给的建议键盘扫描不要一起扫,我分开扫,毛病同上;有人说开关语句里没有default,我觉得不重要,但还是加了,毛病依然。
//(补充:我按这个程序写一个按键控制一个电机时达到目的,到两个按键就没反应了)        帖子发了几篇,还没解决问题,我也没辙了。               
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

sbit U1=P1^1;
sbit U2=P1^2;
sbit KEY1=P3^4;
sbit KEY2=P3^3;

uchar num,num1,num2,keytime,numt,num1_speed,num2_speed;

void delayms(uchar xms)
{
        uint i,j;
        for(i=xms;i>0;i--)
                for(j=110;j>0;j--);
}

void keyscan()
{
        uchar keynum=0;

        if((KEY1==0)||(KEY2==0))
        {
                delayms(10);
                if((KEY1==0)||(KEY2==0))
                {
                        while((!KEY1)||(!KEY2))
                        {
                                TR1=1;
                                if(KEY1==0) keynum=1;
                                if(KEY2==0) keynum=2;
                        }
                        TR1=0;
                        keytime=numt;
                        numt=0;
                }

                if(keytime>=40)
                {
                        switch(keynum)
                        {
                                case 1:       
                                {
                                        num1_speed=num1_speed+1;               
                                        if(num1_speed>17)
                                                num1_speed=8;
                                }
                                        keynum=0;
                                        break;

                                case 2:
                                {
                                        num2_speed=num2_speed+1;               
                                        if(num2_speed>17)
                                                num2_speed=8;
                                }       
                                        keynum=0;
                                        break;

                                default: break;                //keynum=0的情况直接跳出
                        }
                }

                if(keytime<40)
                {
                        switch(keynum)
                        {
                                case 1:       
                                {
                                        num1_speed=num1_speed-1;
                                        if(num1_speed<8)
                                                num1_speed=8;
                                }
                                        keynum=0;
                                        break;
                       
                                case 2:
                                {
                                        num2_speed=num2_speed-1;
                                        if(num2_speed<8)
                                                num2_speed=8;
                                }
                                        keynum=0;
                                        break;
                               
                                default: break;
                        }
                }
       
        keytime=0;
        }
}

void init()
{
        TMOD|=0x11;
        TH0=(65536-20)/256;                //20us
        TL0=(65536-20)%256;
        TH1=(65536-45872)/256;
        TL1=(65536-45872)%256;
        EA=1;
        ET0=1;                                //开定时器0中断
        ET1=1;                                //开定时器1中断
        TR0=1;                                //启动定时器0
}

void main()
{       
        init();
        num1_speed=12;
        num2_speed=12;
        while(1)
        {
                keyscan();
        }
}

void Time0_Init() interrupt 1    //定时器0作用是控制PWM
{
        TH0=(65536-20)/256; //20us        
        TL0=(65536-20)%256;
        num1++;       
        num2++;

        if(num1<num1_speed)       
                U1=1;
                else U1=0;
                if(num1>17)
                        num1=0;

        if(num2<num2_speed)
                U2=1;
                else U2=0;
                if(num2>17)
                        num2=0;
}

void Time1_Init() interrupt 3       
{
        TH1=(65536-45872)/256;
        TL1=(65536-45872)%256;
        numt++;                               
}

一周热门 更多>