今日热门

2

回答

STC单片机将收到的数据通过RS485通信方式传给上位机,发现每过4天多就会有一个位会在一秒钟之内突变,从0变为1再变为0,一直找不到此问题的原因

小葱拌豆腐 2019-09-10 阅读:621

4

回答

  STC12C5A60S2怎么现断电保存

d0edd3b20e3e01a5 2019-09-09 阅读:1627

6

回答

51单片机可以同时检测多个电压电流吗?

91647efd2870fb8f 2019-09-08 阅读:1177

1

回答

..............#define RF    P00unsigned char RF_Code[3];      //遥控码值bit RF_SyncFlag;               //同步信号标志,为1表示已接受到同步信号//unsigned char RF;           unsigned char Decode_ok;               //解码成功unsigned char High_WidthLow_Width;    //高低电平宽度unsigned char RF_BitCount;           //接收到第几位编码unsigned char bma1bma2bma3bma4;    //接收编码unsigned char mma1mma2mma3mma4;    //用于接收过程存放遥控编码,编码比较两次,这是第一次unsigned char mmb1mmb2mmb3mmb4;    //用于接收过程存放遥控编码,这是第二次unsigned char rf_ok1rf_ok2rf_ok;   //解码过程中的临时接收成功编码标志,接收到一个完整的遥控命令后置1,通知解码程序可以解码了unsigned char Last_state;           //保存上一个查询到的电平状态unsigned char temp_htemp_l;#define  LED1     P03#define  LED2     P01bit bt_auto;unsigned ss1;void RF_MainLoop(void){   TMOD=0x10;   TH1=0xff;   TL1=0x88;    ET1=1;    TR1=1;    EA=1;     if(Decode_ok==1)  {        if(RF_Code[0]==0xc8) {           LED1=0;           Delay_ms(50); }   if(RF_Code[1]==0xc4) {    LED1=1;           Delay_ms(50); }      if(RF_Code[2]==0xc2) {    LED2=0;           Delay_ms(50); } if(RF_Code[3]==0xc1) {    LED2=1;           Delay_ms(50); }   }  }void Timer1 (void) interrupt 3{ if(!bt_auto) { TL1=0x70; TH1=0xfb; } else { TL1=temp_l; TH1=temp_h; } TF1=0;               // 清除T1中断标志 if(!RF)                   { Low_Width++; Last_state=0;        // 检测到低电平 低电平时间加1记录本次电平状态 } else                   // 检测到高电平   { High_Width++;               if(!Last_state)       // 检测到从低到高的跳变已检测到一个完整(高-低)电平周期 { if(((High_Width>=2)&&(High_Width<=8))&&((Low_Width>=50)&&(Low_Width<=190)))     //判同步码   2/5 110/140 { if((Low_Width>=110)&&(Low_Width<=140))                 //根据不同 同步码 宽度,T0加载不同初值 { RF_BitCount=0; RF_SyncFlag=1; bma1=0; bma2=0; bma3=0; bt_auto=0; } else { if((Low_Width>=140)&&(Low_Width<=160)) { RF_BitCount=0; RF_SyncFlag=1; bma1=0; bma2=0; bma3=0; bt_auto=0; temp_h=0xfe; temp_l=0x6b; } else { if((Low_Width>=160)&&(Low_Width<=190)) { RF_BitCount=0; RF_SyncFlag=1; bma1=0; bma2=0; bma3=0; bt_auto=0; temp_h=0xfd; temp_l=0xdc; } else { if((Low_Width>=70)&&(Low_Width<=90)) { RF_BitCount=0; RF_SyncFlag=1; bma1=0; bma2=0; bma3=0; bt_auto=0; temp_h=0xff; temp_l=0x30; }       else {   if((Low_Width>=90)&&(Low_Width<=110)) { RF_BitCount=0; RF_SyncFlag=1; bma1=0; bma2=0; bma3=0; bt_auto=0; temp_h=0xff; temp_l=0x00; } else { if((Low_Width>=50)&&(Low_Width<=70)) { RF_BitCount=0; RF_SyncFlag=1; bma1=0; bma2=0; bma3=0; bt_auto=0; temp_h=0xff; temp_l=0x7a; }                       }       }     }     }            } } else if ((RF_SyncFlag)&&((Low_Width>=10)&&(Low_Width<=14)))       //   10/14 { RF_BitCount++;           //已经接收到同步码判0 if(RF_BitCount==24) { if(!rf_ok1) { mma1=bma1;mma2=bma2;mma3=bma3;mma4=bma4;       //将接收到的编码复制到解码寄存器中      rf_ok1=1;                                    // 通知解码子程序可以解码了      RF_SyncFlag=0; bt_auto=0; s=1500; } else  { if(!rf_ok2)                                        mmb1=bma1;mmb2=bma2;mmb3=bma3;mmb4=bma4;       //将接收到的编码复制到解码寄存器中       rf_ok2=1;                                   // 通知解码子程序可以解码了      RF_SyncFlag=0; bt_auto=0; } }   } else if((RF_SyncFlag)&&((Low_Width>=2)&&(Low_Width<=8)))         //   3/5 { switch(RF_BitCount) {            case 0 : { bma1=bma1 | 0x80; break; }//遥控编码第1位                       case 1 : { bma1=bma1 | 0x40; break; }                       case 2 : { bma1=bma1 | 0x20; break; }                       case 3 : { bma1=bma1 | 0x10; break; }                       case 4 : { bma1=bma1 | 0x08; break; }                       case 5 : { bma1=bma1 | 0x04; break; }                       case 6 : { bma1=bma1 | 0x02; break; }                       case 7 : { bma1=bma1 | 0x01; break; }                       case 8 : { bma2=bma2 | 0x80; break; }                       case 9 : { bma2=bma2 | 0x40; break; }                       case 10: { bma2=bma2 | 0x20; break; }                       case 11: { bma2=bma2 | 0x10; break; }                       case 12: { bma2=bma2 | 0x08; break; }                       case 13: { bma2=bma2 | 0x04; break; }                       case 14: { bma2=bma2 | 0x02; break; }                       case 15: { bma2=bma2 | 0x01; break; }                       case 16: { bma3=bma3 | 0x80; break; }                       case 17: { bma3=bma3 | 0x40; break; }                       case 18: { bma3=bma3 | 0x20; break; }                       case 19: { bma3=bma3 | 0x10; break; }                       case 20: { bma4=bma4 | 0x80; break; }//按键状态第1位                       case 21: { bma4=bma4 | 0x40; break; }                       case 22: { bma4=bma4 | 0x20; break; }                       case 23: { bma4=bma4 | 0x10;           if(!rf_ok1)   {   mma1=bma1;mma2=bma2;mma3=bma3;mma4=bma4;//将接收到的编码复制到解码寄存器中                                                                rf_ok1=1;                                // 通知解码子程序可以解码了                                   RF_SyncFlag=0;   bt_auto=0;   s=1500;   break; } else {   mmb1=bma1;mmb2=bma2;mmb3=bma3;mmb4=bma4;//将再次接收到的编码复制到解码寄存器中,                                                                rf_ok2=1;                                // 通知解码子程序可以解码了                                   RF_SyncFlag=0;   bt_auto=0;   break; }                                                                    }                     }                     RF_BitCount++;                   }            else { RF_BitCount=0; RF_SyncFlag=0; bt_auto=0;bma1=0; bma2=0; bma3=0; bma4=0; High_Width=1; Low_Width=0;       }      //接收到不符合的高-低电平序列                 Low_Width=0;High_Width=1;   }           Last_state=1;      // 记录本次电平状态       } if(rf_ok1) //规定时间内接受到2帧相同的编码数据才有效 { s--; if(!s) rf_ok1=0; if(rf_ok2)  {   if((mma1==mmb1)&&(mma2==mmb2)&&(mma3==mmb3)&&(mma4==mmb4))   {   rf_ok=1;   rf_ok1=0;   rf_ok2=0;      } else    {   rf_ok=0;   rf_ok1=0;   rf_ok2=0;      }   } }        if((rf_ok))      //判断是否接收成功        {           EA=0;           rf_ok=0;                     RF_Code[0]=mma4&0x80; //取按键码           RF_Code[1]=mma4&0x40;            RF_Code[2]=mma4&0x20;            RF_Code[3]=mma4&0x10;   Decode_ok=1; EA=1; } }

I Miss You 2019-08-28 阅读:810

4

回答

怎么知道一个子程序有没有函数参数,有几个函数参数,函数参数的数据类型是什么,还有是否有返回值,返回值的数据类型是什么,这些个怎么判断。。

Gwvfbukn 2019-08-25 阅读:1390

3

回答

假如要读p1.1的io电平,要怎么写可以不读p1&0x02直接读出一个位吗?

Gwvfbukn 2019-08-24 阅读:955

5

回答

用51单片机控制直流电机转动圈数,在电位计旋转至不同位置转动不同圈数。

小葱拌豆腐 2019-08-21 阅读:1504

3

回答

有谁计算过执行一条语句的最长时间和最短时间,看过有人用nop写延时,但是应该也是估算

oh_耗子 2019-08-11 阅读:1379

7

回答

在进行单片机开发时,由于测量数据有精度要求,不知道如何进行ADC的选型和精度控制,还有成本考虑,哪位大佬可以给我讲讲如何进行ADC选型吗?还有现在主流的ADC芯片型号是那些,非常感谢!

dee4394d5a0f34eb 2019-08-04 阅读:2065

8

回答

51单片机有没有想armcc这样的SDK,不使用keil等IDE开开发。

牛妞小小 2019-07-29 阅读:1041

10

回答

51单片机pwm怎么设置用按键 进行调节占空比定时器的的pwm我看啦一下还行;但是在进行按键调节我就搞蒙啦有没有大佬解答一下,小白:谢谢

120fcfd46fb9900c 2019-07-24 阅读:4031

11

回答

5V的单片机怎么使用3.3V的模块

7a33f1ab2e30f770 2019-07-24 阅读:2858

2

回答

STC的单片机如何加密代码啊

7a33f1ab2e30f770 2019-07-20 阅读:4834

7

回答

8051单片机控制8*8点阵时,不用译码器可以吗?8*8总共灯的数量大于51单片机接口数量,但是又不会用译码器,有没有不用译码器实现控制的方法啊,比如显示特定两位数字之类的。

2741aa8666f6c9e3 2019-05-24 阅读:1085

6

回答

我做的超声波测距,需要数码管显示的同时还要把数据通过蓝牙芯片传到电脑上,现在遇到的问题就是 两个程序不能结合在一起,求大神帮忙

77355126a795f672 2019-05-24 阅读:1053

5

回答

本人是个新手刚刚接触51单片机,怎么编程去计算51单片机某个io口的输入高低电平时间,比如我从P1.0口输入了一个方波信号,那么怎么通过单片机编程去检测我这个方波高电平的时间(或者说长度),还有低电平的时间(或者说长度),这个检测时间要精确到ms。

d772899434a28000 2019-05-24 阅读:3629

12

回答

是用c语言吗?和用什么软件烧录?能不能分享几本书,或者几个 案例

wangdiy 2019-05-24 阅读:944

0

回答

迪文配套提供的《迪文 DGUS 屏用户开发指南Ver4.3》里面的C51例程实在是看不懂,厂家表示也不反馈给技术部门,实在没办反了,跪求各位大神给详细标注一下,尤其是打问号的地方,跪谢!!!#include <REG52.h>sbit JDQ1=P1^0;         //温度控制继电器 //串口变量  unsigned char RCVOKRCVDATARX5ARXA5RXLENRXCMDRXADRHRXADRLRXDLENTXTIME; unsigned char TX_PRX_P; //收发缓冲区的指针位置//配置参数区(DGUS 0x83 指令)32B对应 DGUS 0x1000-0x100F 地址    ???unsigned char CFGBUF[32];     ???//发送给 DGUS 屏的数据读取指令和写指令缓冲区//TXBUF[12]:TXBUF[13]用于显示曲线 CH1 接口    ???//TXBUF[20]-TXBUF[84]0x82 写 DGUS 屏的 64B 变量数据,对应 DGUS 0x0000-0x001F 地址    ???unsigned char TXBUF[84]={0x5A0xA50x40x830x100x00x10                         0x5A0xA50x40x840x10x00x00x5A0xA50x430x820x000x00};    ???void main(void){   int ij;      /@@*开始设置串口*/  PCON=PCON|0x80; //配置串口波特率为 115200bps,22.1184MHz 晶体  SCON=0x50;   TMOD=0x21;  TH1=255;  TL1=255;  TR1=1;  TH0=0xb8; //10ms 定时器中断  TL0=0x00;  TR0=1;  JDQ1=0;   JDQ1=0; //关闭加热继电器  RCVOK=0; //清除数据接收 OK 标记    ???  RCVDATA=0;     ???  TXTIME=100; //上电 1 秒后开始数据读写  ES=1;  ET0=1;  EA=1;  /@@*串口设置完毕*/  while(RCVOK==0x00); //delate     ???  //用户测量和控制温度,显示温度值和实时温度曲线  while(1)     ???整个while???  {     i=Readtemp(); //测量当前温度    j=CFGBUF[0]*256+CFGBUF[1]; //设定温度,DGUS 0x1000 地址,整形变量    if(i<j)    {      JDQ1=1;     }    else    {      JDQ1=0;    }    TXBUF[20]=i/256;  //显示当前温度值,DGUS 0x0000 地址,整形变量    TXBUF[21]=i%256;    TXBUF[12]=i/256;  //显示当前温度曲线,CH1 曲线通道    TXBUF[13]=i%256;  }}//温度测量函数int Readtemp( )     ???{  return(500); }//定时器 2 中断函数10mS 定时器中断,用于定时 200mS 发送指令给 DGUS 屏void Timer0_interrupt(void) interrupt 2 {    TF0=0;    TH0=0xb8;  TL0=0x00;    TXTIME--;   if(TXTIME==0x00) ​  {    TXTIME=20;     TX_P=0;       ???    TI=0;     SBUF=TXBUF[0];      ???  }}//串口中断方式处理和 DGUS 屏的数据交换//定时从 DGUS 屏的 1000-100F 存储区读取 32Byte 数据保存到单片机的 CFGBUF//定时把单片机的 DSPBUF 的 64B 内容写到 DGUS 屏的 0000-001FH 存储区void Uart_interrupt(void) interrupt 4 ???此处直到结束???{   unsigned char i;  if(RI)  //接收中断    {     i=SBUF;      RI=0;    if(RCVDATA==0)     {       RX5A=RXA5;      RXA5=RXLEN;      RXLEN=RXCMD;      RXCMD=RXADRH;      RXADRH=RXADRL;      RXADRL=RXDLEN;      RXDLEN=i;//检查帧同步数据 5A A5 24 83 10 00 10 +32B DATA      if((RX5A==0x5A)&&(RXA5==0xA5)&&(RXLEN==0x24)&&(RXCMD==0x83)&&(RXADRH=0x10)&&      (RXADRL=0x00)&&(RXDLEN=0x10))      {         RCVDATA=0xff;        RX_P=0;      }     }    else    {       CFGBUF[RX_P]=i;      RX_P++;      if(RX_P==32)      {         RCVDATA=0;        RCVOK=0xff;      }    }  }  if(TI) //发送中断  {     TI=0;    TX_P++;    if(TX_P<84)    {       SBUF=TXBUF[TX_P];    }  }}

084ea927e58f37bf 2019-05-23 阅读:1927

3

回答

3功率因数检测系统设计(1)能实时显示功率因素值。(2)显示电路用数码管显示,亮度适中,显示稳定。(3)通过动态投切电容,使电路工作时,功率因素值始终保持在0.85~0.95期间。(4)主控芯片采用AT89系列。(5)电路额定电压交流220V,额定电流40A,频率50Hz。

7f4f1d6361458523 2019-05-23 阅读:849

4

回答

我用的proteus7.5和keil3,按照书上说的在debug上边应该有proteus VSM Simultor。我找不到

2019-05-23 阅读:1127
  • 帮助人数
  • 0
  • 获得赞数
  • 0
  • 一周积分
  • 0

问题达人换一批

本月问答

排名
用户名
问答积分
< >