搜索
bottom↓
回复: 23

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

[复制链接]

出0入0汤圆

发表于 2012-11-21 14:54:06 | 显示全部楼层 |阅读模式
        本人菜鸟一名,自学51一段时间(机械专业),其中很多不懂,有问题来论坛发帖也很久才有人回复,大多稍稍点到为止,所以本人想找个好一点的51QQ群,及时交流,更多更好的向51大神们学习。

另外发一下最近一直困扰我的一段程序,发了几次贴,问题还没有解决,再发一次,目的和问题都在里边,望大神们指点,本人不胜感激。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-11-21 15:10:37 | 显示全部楼层
q群是个最不方便交流的东西,,

出0入0汤圆

 楼主| 发表于 2012-11-21 15:40:57 | 显示全部楼层
wkman 发表于 2012-11-21 15:10
q群是个最不方便交流的东西,,

关键是自己学,我觉得找个交流群总比自己想当然要好得多。

出0入0汤圆

发表于 2012-11-21 15:47:14 | 显示全部楼层
没有东西啊

出0入0汤圆

 楼主| 发表于 2012-11-21 16:08:39 | 显示全部楼层
WXF_mabg 发表于 2012-11-21 15:47
没有东西啊

不会吧?我把hex文件压缩了,再传下吧

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出20入186汤圆

发表于 2012-11-21 16:14:37 | 显示全部楼层
活跃意味着全是新手

出0入0汤圆

发表于 2012-11-21 16:31:45 | 显示全部楼层
qq群,一帮人问问题,即使有人回答,也都是日经问题,,没有一点积累。。。有问题还是论坛比较好

出0入0汤圆

发表于 2012-11-21 16:39:26 | 显示全部楼层
感觉51没多少东西,做个数码管时钟基本就了解的差不多了,剩下的就是熟悉相关的外设了
要找个专门讨论51的恐怕不太容易吧

出0入0汤圆

 楼主| 发表于 2012-11-21 17:12:07 | 显示全部楼层
yuyu87 发表于 2012-11-21 16:14
活跃意味着全是新手

呵呵,好像是这样的

出0入0汤圆

 楼主| 发表于 2012-11-21 17:15:23 | 显示全部楼层
Anqi90 发表于 2012-11-21 16:39
感觉51没多少东西,做个数码管时钟基本就了解的差不多了,剩下的就是熟悉相关的外设了
要找个专门讨论51的 ...

我觉得你说的这些有道理,大部分我也按这个做的,但是到实际脱离书本自己想做点东西的时候还是好多无从下手。能看下我那个程序问题出在哪吗?谢谢!

出0入0汤圆

 楼主| 发表于 2012-11-21 17:18:48 | 显示全部楼层
renpeng009 发表于 2012-11-21 16:30
楼上说的是实情

哎,俺也知道事实就这样,但论坛我也发了,没什么结果,估计大神们都不屑看这些新手帖。帮我看下我的程序到底出在哪好吗?给点提示,谢谢。折腾我好久了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2012-11-21 17:19:18 | 显示全部楼层
daxiaolijun 发表于 2012-11-21 17:15
我觉得你说的这些有道理,大部分我也按这个做的,但是到实际脱离书本自己想做点东西的时候还是好多无从下 ...

给点提示吧,谢谢!!!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-11-21 17:20:23 | 显示全部楼层
不是用的rar打的包吗,怎么还要安什么软件...

出0入0汤圆

 楼主| 发表于 2012-11-21 17:21:07 | 显示全部楼层
daxiaolijun 发表于 2012-11-21 17:12
呵呵,好像是这样的

帮我看看问题出在哪,不一定非得找出来,给点你认为有问题的地方就OK,3Q!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-11-21 17:43:18 | 显示全部楼层
只有卖开发板的才会建一些群,你找一下。

出0入0汤圆

 楼主| 发表于 2012-11-21 18:34:43 | 显示全部楼层
Anqi90 发表于 2012-11-21 17:20
不是用的rar打的包吗,怎么还要安什么软件...

压缩文件属性石Zip的,应该是一样的吧?能打开,直接点开里面就是hex的文本文档呀。

出0入0汤圆

发表于 2012-11-21 18:45:13 | 显示全部楼层
只有一个说明:

尊敬的用户:

    您当前使用的压缩软件无法直接查看或解压这个压缩包,因其在打包过程中采用
了快压的超高压缩技术。

这里为您列出压缩包中的内容:
1、试验.c


    如要使用压缩包的全部内容,请您使用以下链接下载并安装快压压缩软件。
http://www.kuaizip.com/down/KuaiZip_installer.exe

=======================================================================
快压简介:快压(KuaiZip)是一款免费、方便、快速的压缩和解压缩利器,拥有
一流的压缩技术,是国内第一款具备自主压缩格式的软件。快压自身的压缩格式KZ
具有超大的压缩比和超快的压缩解压速度,兼容 RAR, ZIP 和 7Z 等40余种压缩文
件。快压特有的虚拟化技术,还可挂载压缩包、光驱镜像和虚拟机。
=======================================================================

像这种强行推广的软件我是不会用的

出0入0汤圆

 楼主| 发表于 2012-11-21 19:04:55 | 显示全部楼层
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++;                               
}

出0入0汤圆

发表于 2012-11-22 01:53:19 | 显示全部楼层
我修改了下,Keil软仿通过。因为我没有你的实物,请自行测试。
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. sbit U1=P1^1;
  5. sbit U2=P1^2;
  6. sbit KEY1=P3^4;
  7. sbit KEY2=P3^3;

  8. uchar num,num1,num2,num1_speed,num2_speed;
  9. volatile uint keytime,numt;

  10. void delayms(uchar xms)
  11. {
  12.         uint i,j;
  13.         for(i=xms;i>0;i--)
  14.                 for(j=110;j>0;j--);
  15. }

  16. void keyscan()
  17. {
  18.         uchar keynum=0;

  19.         if((KEY1==0)||(KEY2==0))
  20.         {
  21.                 delayms(5);
  22.                 if((KEY1==0)||(KEY2==0))
  23.                 {
  24.                         TR0=1;
  25.                                                                                                 while((!KEY1)||(!KEY2))
  26.                         {
  27.                                 
  28.                                 if(KEY1==0) keynum=1;
  29.                                 else keynum=2;
  30.                         }
  31.                         TR0=0;
  32.                         keytime=numt;
  33.                         numt=0;
  34.                 }

  35.                 if(keytime>=40)
  36.                 {
  37.                         switch(keynum)
  38.                         {
  39.                                 case 1:        
  40.                                 {
  41.                                         num1_speed=num1_speed+1;               
  42.                                         if(num1_speed>17)
  43.                                                 num1_speed=8;
  44.                                 }
  45.                                         keynum=0;
  46.                                         break;

  47.                                 case 2:
  48.                                 {
  49.                                         num2_speed=num2_speed+1;               
  50.                                         if(num2_speed>17)
  51.                                                 num2_speed=8;
  52.                                 }        
  53.                                         keynum=0;
  54.                                         break;

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

  58.                 if(keytime<40)
  59.                 {
  60.                         switch(keynum)
  61.                         {
  62.                                 case 1:        
  63.                                 {
  64.                                         num1_speed=num1_speed-1;
  65.                                         if(num1_speed<8)
  66.                                                 num1_speed=8;
  67.                                 }
  68.                                         keynum=0;
  69.                                         break;
  70.                         
  71.                                 case 2:
  72.                                 {
  73.                                         num2_speed=num2_speed-1;
  74.                                         if(num2_speed<8)
  75.                                                 num2_speed=8;
  76.                                 }
  77.                                         keynum=0;
  78.                                         break;
  79.                                 
  80.                                 default: break;
  81.                         }
  82.                 }
  83.         
  84.         keytime=0;
  85.         }
  86. }

  87. void init()
  88. {
  89.         TMOD|=0x11;
  90.         TH0=(65536-20)/256;                //20us
  91.         TL0=(65536-20)%256;
  92.         TH1=(65536-45872)/256;
  93.         TL1=(65536-45872)%256;
  94.         
  95.         ET0=1;                                //开定时器0中断
  96.         ET1=1;                                //开定时器1中断
  97.         TR1=1;                                //启动定时器0
  98.                                 EA=1;
  99. }

  100. void main()
  101. {        
  102.         init();
  103.         num1_speed=12;
  104.         num2_speed=12;
  105.         while(1)
  106.         {
  107.                 keyscan();
  108.         }
  109. }

  110. void Time0_Init() interrupt 1    using 1//定时器0作用是控制PWM
  111. {

  112.         TH0=(65536-45872)/256;
  113.         TL0=(65536-45872)%256;
  114.         numt++;   
  115. }

  116. void Time1_Init() interrupt 3     using 2   
  117. {
  118.         TH1=(65536-20)/256; //20us        
  119.         TL1=(65536-20)%256;
  120.         num1++;        
  121.         num2++;

  122.         if(num1<num1_speed)        
  123.                 U1=1;
  124.                 else U1=0;
  125.                 if(num1>17)
  126.                         num1=0;

  127.         if(num2<num2_speed)
  128.                 U2=1;
  129.                 else U2=0;
  130.                 if(num2>17)
  131.                         num2=0;                    
  132. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2012-11-22 08:21:13 | 显示全部楼层
renpeng009 发表于 2012-11-22 01:53
我修改了下,Keil软仿通过。因为我没有你的实物,请自行测试。

非常非常感谢,我会好好看看,好人一生平安!!!

出0入0汤圆

发表于 2012-11-22 10:25:24 | 显示全部楼层
本帖最后由 Anqi90 于 2012-11-22 14:56 编辑

按键检测里最好加一个超时跳出,这里面: while((!KEY1)||(!KEY2))
这样就不会是松开按键以后才有反应,而是按到两秒就开始动作了
不过这样的话还要加一个标志位,标志按键按下后是否抬起来过,不然一循环又检测到按键按下了,其实是上次的还没抬起来

按键的记录最好也是分开保存, 而不是把两个按键都放一个变量里,这样两个键同时操作也没问题
当然相应的控制部分也需要变一下

总之就是设4个变量,比如key1_down, key2_down, key1_up, key2_up
只有在up之后才检测是否down,down之后只检测是否up

同样的按键时间也会用到两个,可以在按键按下的时候记录一个起始时间,抬起时再记录一个终止时间,这样就可以计算出按下时间,也不复杂


以上只是看了你的代码后的一些想法,可能对你目前的问题没有多大帮助,不过根据你的描述感觉可能和两个按键的检测有关
先把按键检测的逻辑理清楚吧,感觉问题不是很复杂,要有信心啊

=========修改错别字

出0入0汤圆

发表于 2012-11-22 11:17:42 | 显示全部楼层
170548848这个群还不错

出0入0汤圆

 楼主| 发表于 2012-11-22 13:52:46 | 显示全部楼层
上路新手 发表于 2012-11-22 11:17
170548848这个群还不错

加进去看看。3Q

出0入0汤圆

 楼主| 发表于 2012-11-22 13:57:19 | 显示全部楼层
Anqi90 发表于 2012-11-22 10:25
按键检测里最好加一个超时跳出,这里面: while((!KEY1)||(!KEY2))
这样就不会是松开按键以后才有反应,而 ...

乍一听起来有点晕,得好好消化你的意见。非常感谢你的意见,好人一生平安!3Q!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 20:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表