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

2020-02-02 09:18发布

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

另外发一下最近一直困扰我的一段程序,发了几次贴,问题还没有解决,再发一次,目的和问题都在里边,望大神们指点,本人不胜感激。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
24条回答
renpeng009
2020-02-04 14:43
我修改了下,Keil软仿通过。因为我没有你的实物,请自行测试。

无标题.png (51.52 KB, 下载次数: 0)

下载附件

2012-11-22 01:52 上传

  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. }
复制代码

一周热门 更多>