啦啦啦啦一二三

    1. nmg 发表于 2017-5-4 08:10 看1楼,我编辑了一下。以后嵌入代码的时候,点击下面所示的按钮,贴进去提交即可。
      :Cry:
    2. #include #include sbit IR = P3^2; sbit BEEP = P3^6; sbit PWM_OUT = P0^0; bit inf_flag = 1;  //ºìÍâ½ÓÊյĿªÆô¹Ø±Õ¿ØÖÆ룬ÔÚºìÍâ½âÂë¹ý³ÌÖÐÒª¹Ø±ÕºìÍâ½ÓÊÕ bit ecode_ok;      //½âÂë³É¹¦±ê־λ unsigned char ircode[4]; unsigned int LowTime,HighTime;  //ºìÍâ½ÓÊÕ¹ý³ÌÖб£´æ¸ß¡¢µÍµçƽµÄ¿í¶È unsigned char se_PWM =15;  //³õʼ»¯¶æ»úµÄPWM£¨¸ßµçƽʱ¼ä£© unsigned char key_stime_counter; //¼Ç¼×ܵÄÖжϴÎÊý£¬³¬¹ý200(20ms)´Î¾Í»Ø0 void delay1ms() {         unsigned char i,j;         for(i=0;i 7800) && (LowTime < 8800) && (HighTime > 3600) && (HighTime > 4700))                 //Èç¹ûÊÇÒýµ¼Â룬¾Í¿ªÊ¼½âÂ룬·ñÔò·ÅÆú£¬Òýµ¼ÂëµÄµÍµçƽ¼Æʱ                 //µÍµçƽ´ÎÊý = 9000us /(12/11.0592) = 8294 ,ÅжÏÇø¼ä£º8300-500 = 7800£¬ 8300+500 = 8800                 {                         DeCode();                         if(ecode_ok == 1)   //Ö´ÐÐÒ£¿Ø½âÂ빦ÄÜ                         {                                 beep();//·äÃùÆ÷ÏìÒ»Éù£¬Ìáʾ½âÂë³É¹¦                         }                 }                 inf_flag = 1; //¿ªÆôºìÍâ¼ì²â                         } } void main() {         EA = 1; //´ò¿ª×ÜÖÐ¶Ï         EX0 = 1; //´ò¿ªÍⲿÖжÏ0         //ET0 = 1; //¶¨Ê±Æ÷0ÖжÏÔÊÐí         IT0 = 1; //ÍⲿÖжÏ0ϽµÑØ´¥·¢                 TMOD = 0x11;//ʹÓö¨Ê±Æ÷0·½Ê½1         TR0 = 0;  //¶¨Ê±Æ÷0¹Ø±Õ                 PWM_OUT = 0;  //³õʼ»¯¶æ»ú                 ET1 = 1; //¶¨Ê±Æ÷1ÖжÏÔÊÐí         TH1 = 0xFF;         TL1 = 0xA4;         TR1 = 1; //Æô¶¯¶¨Ê±Æ÷1                 while(1)  //µÈ´ýºìÍâÐźŲúÉúµÄÖÐ¶Ï         {                 inf();         } } //¶¨Ê±Æ÷1ÖжϷþÎñº¯Êý //Ö÷Òª¸ºÔð²úÉú¶æ»úËùÐèµÄPWM²¨ void timer1()interrupt 3 using 0   {         TH1 = 0xFF;         TL1 = 0xA4;  //¶¨Ê±Æ÷1ÖØÐÂ×°ÈëÊýÖµ0.1ms                 if(++key_stime_counter >= 200) //20msʱ¼äµ½         {                 key_stime_counter = 0;         }         if(key_stime_counter
    3. huo_hu 发表于 2017-5-3 16:48 看代码是个很头疼的事儿,你这么求恐怕很难,别人也不会拿出几个小时时间给你解决这个问题。 另外不能确定 ...
      现在就是两个单独放在不同程序里的话都可以,但是放在同一个程序就不可以
    4. 改进版本,帮忙看下哪里有问题:Cry: #include #define uchar unsigned char #define uint unsigned int uchar irtimer; uchar irdata[33];      //接收红外发送的数据 uchar bitnum; uchar ircode[4]; uchar duoji_timer; uchar state = 0; sbit PWM1 = P2^0; sbit K1=P2^7; sbit K2=P2^6; sbit K3=P2^5; bit IRstart_Flag;    //红外发送标志位 bit IR_rec_ok_Flag;    //接收红外发送的数据完毕标志位 bit IR_code_ok_Flag;    //数据解码完成标志位 void delay(uint t) {         uchar i,j;         for(i=t;i>0;i--)                 for(j=110;j>0;j--); } void INT0_Init()     //外部中断0初始化 {         IT0 = 1;         //下降沿触发外部中断0         EX0 = 1;         //打开外部中断0         EA = 1;          //打开总中断 } void Timer0_Init() //定时器0初始化 {         TMOD |= 0x02;           TH0 = 0x00;         TL0 = 0x00;            ET0 = 1;                            TR0 = 1;                      } void Timer1_Init() //定时器1初始化 {         TMOD = 0x10;         TH1 = 0xff;         TL1 = 0x1a;   //0.25ms            EA = 1;         ET1 = 1;         TR1 = 1; } void irdata_pros() //红外数据判断处理函数,逻辑“0” OR 逻辑“1” {         uchar i,j,n;         uchar value;         n = 1;         for(j=0;j1;                         if(irdata[n] > 6)   //判断是逻辑“0” OR 逻辑“1”,根据两者间的中间值6来判断                         {                                 value |= 0x80;                         }                         n++;                 }                 ircode[j] = value;         }         IR_code_ok_Flag = 1; } void main() {                                         while(1)                 {                         INT0_Init();             //红外部分                         Timer0_Init();                         if(IR_rec_ok_Flag == 1)                         {                                 irdata_pros();                                 IR_rec_ok_Flag = 0;                         }                         if(IR_code_ok_Flag == 1)                         {                                 EA = 0;                                 IR_code_ok_Flag = 0;                         }                                                                         Timer1_Init();          //舵机部分                         if (ircode[3] == 0xbc)                         {                                 delay(2);                                 state = -1;                     }                                                if (ircode[3] == 0xbb )                                 {                                         delay(2);                                         state = 0 ;                                                                 }                         if (ircode[3] == 0xbf )                                 {                                         delay(2);                                         state = 1 ;                                                                }                 } } void INT0_ISP() interrupt 0                //外部中断0服务函数 {         if(IRstart_Flag)            //红外遥控开始发送         {                 if(irtimer > 30)        //  9ms/277.8us = 32   开头的引导码                 {                         bitnum = 0;                 }                 irdata[bitnum] = irtimer;//接收红外发送的数据                 irtimer = 0;                 bitnum++;                 if(bitnum==33)            //接收红外发送的数据完毕                 {                                        EA = 0;                         bitnum = 0;                         IR_rec_ok_Flag = 1;                 }                         }         else         {                        IRstart_Flag = 1;                 irtimer = 0;         } } void Timer0_ISP()interrupt 1      //定时器0服务函数 {         irtimer++;                   //每隔(256*12/11.0592)加一   277.8us } void Timer1_ISP() interrupt 3  //定时器1服务函数 {                 TR1 = 0;                 TH1 = 0xff;                 TL1 = 0x1A; //0.25ms                 TR1 =1;                 duoji_timer++;                 switch(state)                 {                         case -1 :                         {                                 if(duoji_timer
    5. #include #define uchar unsigned char #define uint unsigned int uchar code table[]={                                  //段选数组定义             0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,             0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; uchar code aable[]={                                   //位选数组定义             0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; uchar irtimer; uchar irdata[33];      //接收红外发送的数据 uchar bitnum; uchar ircode[4]; uchar disp[8]; uchar duoji_timer; uchar state = 0; sbit PWM1 = P2^0; sbit K1=P2^7; sbit K2=P2^6; sbit K3=P2^5; bit IRstart_Flag;    //红外发送标志位 bit IR_rec_ok_Flag;    //接收红外发送的数据完毕标志位 bit IR_code_ok_Flag;    //数据解码完成标志位 bit turn_flag; void delay(uint t) {         uchar i,j;         for(i=t;i>0;i--)                 for(j=110;j>0;j--); } void INT0_Init()     //外部中断0初始化 {         IT0 = 1;         //下降沿触发外部中断0         EX0 = 1;         //打开外部中断0         EA = 1;          //打开总中断 } void Timer0_Init() //定时器0初始化 {         TMOD |= 0x02;           TH0 = 0x00;         TL0 = 0x00;            ET0 = 1;                            TR0 = 1;                      } void Timer1_Init() //定时器1初始化 {         TMOD = 0x10;         TH1 = 0xff;         TL1 = 0x1a;   //0.25ms            EA = 1;         ET1 = 1;         TR1 = 1; } void irdata_pros() //红外数据判断处理函数,逻辑“0” OR 逻辑“1” {         uchar i,j,n;         uchar value;         n = 1;         for(j=0;j1;                         if(irdata[n] > 6)   //判断是逻辑“0” OR 逻辑“1”,根据两者间的中间值6来判断                         {                                 value |= 0x80;                         }                         n++;                 }                 ircode[j] = value;         }         IR_code_ok_Flag = 1; } void main() {                                         while(1)                 {                         INT0_Init();                         Timer0_Init();                         if(IR_rec_ok_Flag == 1)                         {                                 irdata_pros();                                 IR_rec_ok_Flag = 0;                         }                         if(IR_code_ok_Flag == 1)                         {                                 EA = 0;                                 IR_code_ok_Flag = 0;                         }                                                                         Timer1_Init();                         if (K3==0)                         {                                 delay(2);                                 state = -1;                     }                                                if (K2==0 )                                 {                                         delay(2);                                         state = 0 ;                                                                 }                         if (K1==0 )                                 {                                         delay(2);                                         state = 1 ;                                                                }                 } } void INT0_ISP() interrupt 0                //外部中断0服务函数 {         if(IRstart_Flag)            //红外遥控开始发送         {                 if(irtimer > 30)        //  9ms/277.8us = 32   开头的引导码                 {                         bitnum = 0;                 }                 irdata[bitnum] = irtimer;//接收红外发送的数据                 irtimer = 0;                 bitnum++;                 if(bitnum==33)            //接收红外发送的数据完毕                 {                                        EA = 0;                         bitnum = 0;                         IR_rec_ok_Flag = 1;                 }                         }         else         {                        IRstart_Flag = 1;                 irtimer = 0;         } } void Timer0_ISP()interrupt 1      //定时器0服务函数 {         irtimer++;                   //每隔(256*12/11.0592)加一   277.8us } void Timer1_ISP() interrupt 3  //定时器1服务函数 {                 TR1 = 0;                 TH1 = 0xff;                 TL1 = 0x1A; //0.25ms                 TR1 =1;                 duoji_timer++;                 switch(state)                 {                         case -1 :                         {                                 if(duoji_timer
    6. 汤权 发表于 2017-5-3 16:08 懂得人很多,但是冲你这个代码排版也不会有人仔细看的,建议用发代码的功能。
      -------------------------------------

最近访客

< 1/1 >

统计信息

已有2人来访过

  • 芯积分:--
  • 好友:--
  • 主题:1
  • 回复:6

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言