找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9526|回复: 23
打印 上一主题 下一主题
收起左侧

基于51单片机的红外智能风扇程序+电路 超简单

  [复制链接]
跳转到指定楼层
楼主
实用STC12C5A60S2型号的单片机,实现三档风速,利用单片机内部定时器智能定时,可切换自然风和正常风,使用市场上常见的小遥控器。

电路原理图如下:

制作出来的实物图如下:



单片机源程序如下:
  1. #include<STC12C5A60S2.H> //头文件
  2. #include <stc_pwm.H>  
  3. /*====================================
  4. 自定义类型名
  5. ====================================*/
  6. typedef unsigned char INT8U;
  7. typedef unsigned char uchar;

  8. typedef unsigned int INT16U;
  9. typedef unsigned int uint;

  10. sbit PWM_1                =        P1^4;       //PWM1_Boost/Buck   
  11. sbit enlarge        =        P3^0;    //增大
  12. sbit reduce                =        P3^1;       //减小



  13. /*====================================
  14. 硬件接口位声明
  15. ====================================*/
  16. sbit IR  = P3^2;     //定义红外脉冲数据接口        外部中断O输入口
  17. sbit beep = P2^3;                //蜂鸣器的位置
  18. sbit NPN1 = P1^1;      //电机 低档
  19. sbit NPN2 = P1^2;      //电机 中档
  20. sbit NPN3 = P1^3;      //电机 高档

  21. sbit NPNhuxi = P1^5;      //电机 呼吸风

  22. /**************************************
  23. 1602液晶
  24. **************************************/
  25. sbit RS = P2^5;                 
  26. sbit RW =  P2^6;
  27. sbit E  =  P2^4;

  28. uchar IRtime;                 //检测红外高电平持续时间(脉宽)
  29. uchar IRcord[4];    //此数组用于储存分离出来的4个字节的数据(用户码2个字节+键值码2个字节)
  30. uchar IRdata[33];   //此数组用于储存红外的33位数据(第一位为引导码用户码16+键值码16)
  31. bit IRpro_ok, IRok;  //第一个用于红外接收4个字节完毕。IRok用为检测脉宽完毕


  32. void delay4(uchar t)
  33. {
  34.         uint j;
  35.         uchar i;
  36.         for(i=0;i<t;i++)
  37.                 for(j=0;j<1000;j++);
  38. }
  39. //毫秒级延时
  40. void delay(unsigned int z)
  41. {
  42.         unsigned int x,y;
  43.         for(x = z; x > 0; x--)
  44.                 for(y = 114; y > 0 ; y--);
  45. }

  46. void time0() interrupt 1   //定义定时器0
  47. {
  48.         IRtime++;                            //检测脉宽,1次为278us
  49. }
  50. void int0() interrupt 0                          //定义外部中断0
  51. {
  52.         static uchar i;                                 //        声明静态变量(在跳出函数后在回来执行的时候不会丢失数值)i用于把33次高电平的持续时间存入IRdata
  53.         static bit startflag;                //开始储存脉宽标志位
  54.         if(startflag)                                 //开始接收脉宽检测
  55.         {
  56.                 if( (IRtime < 53) && (IRtime >= 32) ) /*判断是否是引导码,底电平9000us+高4500us        
  57.                 这个自己可以算我以11.0592来算了NEC协议的引导码低8000-10000+高4000-5000
  58.                 如果已经接收了引导码那么i不会被置0就会开始依次存入脉宽*/
  59.                         i = 0;                                 //如果是引导码那么执行i=0把他存到IRdata的第一个位
  60.                 IRdata[i] = IRtime;                   //以T0的溢出次数来计算脉宽,把这个时间存到数组里面到后面判断
  61.                 IRtime = 0;                                 //计数清零,下一个下降沿的时候在存入脉宽
  62.                 i++;                                          //计数脉宽存入的次数
  63.                 if(i == 33)                                  //如果存入34次 数组的下标是从0开始i等于33表示执行了34次
  64.                 {
  65.                          IRok = 1;                                 //那么表示脉宽检测完毕
  66.                         i = 0;                                  //把脉宽计数清零准备下次存入
  67.                 }
  68.         }
  69.         else                  
  70.         {
  71.                 IRtime = 0;                                  //引导码开始进入把脉宽计数清零开始计数
  72.                 startflag = 1;                         //开始处理标志位置1
  73.         }
  74. }
  75. void IRcordpro()                                    //提取它的33次脉宽进行数据解码
  76. {
  77.         uchar i, j, k, cord, value;        /*i用于处理4个字节,j用于处理一个字节中每一位,k用于33次脉宽中的哪一位
  78.         cord用于取出脉宽的时间判断是否符合1的脉宽时间*/
  79.         k = 1;                                                 //从第一位脉宽开始取,丢弃引导码脉宽
  80.         for(i = 0; i < 4; i++)
  81.         {
  82.                 for(j = 0; j < 8; j++)
  83.                 {
  84.                         cord = IRdata[k];            //把脉宽存入cord
  85.                         if(cord > 5)                         //如果脉宽大于我11.0592的t0溢出率为约278us*5=1390那么判断为1
  86.                         value = value | 0x80;        /*接收的时候是先接收最低位,
  87.                         把最低位先放到value的最高位在和0x08按位或一下
  88.                         这样不会改变valua的其他位的数值只会让他最高位为1*/
  89.                         if(j < 7)
  90.                         {
  91.                                 value = value >> 1;        //value位左移依次接收8位数据。
  92.                         }
  93.                         k++;                                //每执行一次脉宽位加1
  94.                 }
  95.                 IRcord[i] = value;           //每处理完一个字节把它放入IRcord数组中。
  96.                 value = 0;                            //清零value方便下次在存入数据
  97.         }
  98.         IRpro_ok = 1;                                   //接收完4个字节后IRpro ok置1表示红外解码完成        
  99. }



  100. void init_pwm()
  101. {
  102.   CCON = 0;
  103.         CL = 0;
  104.         CH = 0;
  105.         CMOD = 0X08; //0X08:43KHZ // 0X02,22KHZ // 0X0A,10KHZ //
  106.         CCAPM1        =0x42;//8位PWM输出,无中断
  107.         CCAP1H=255;//占空比控制
  108.         CCAP1L=255;
  109.         CR=1;
  110. }
  111. //呼吸风

  112. /**************************************
  113. 短延时
  114. **************************************/
  115. void delay5ms()   
  116. {
  117.     uchar i,v,k;
  118.     for(i=1;i>0;i--)
  119.         for(v=168;v>0;v--)
  120.             for(k=22;k>0;k--);
  121. }
  122. /**************************************
  123. 写指令
  124. **************************************/
  125. void lcd_Write_com(uchar com)         
  126. {
  127.         RS=0;                        //定义指令寄存器
  128.         RW=0;                                  //写允许
  129.         P0=com;                                          //写指令
  130.         delay5ms();        E=1;                //片选端上拉
  131.         delay5ms();        E=0;                //下降沿锁存
  132. }
  133. /**************************************
  134. 写数据
  135. **************************************/
  136. void lcd_write_date(uchar date)        
  137. {
  138.         RS=1;                                        //定义数据寄存器
  139.         RW=0;                                        //写允许
  140.         P0=date;                                //写数据
  141.         delay5ms();        E=1;                //片选端上拉
  142.         delay5ms();        E=0;                //下降沿锁存
  143. }
  144. /**************************************
  145. 显示程序
  146. **************************************/
  147. void dis_lcd1602(uchar x,uchar y,uchar dat)
  148. {
  149.         uchar add;
  150.         if(y==1)         add=(0x80+x);
  151.         if(y==2)         add=(0xc0+x);
  152.         lcd_Write_com(add);                //写指令
  153.         lcd_write_date(dat);        //写数据
  154. }  
  155. /**************************************
  156. 液晶初始化
  157. **************************************/
  158. void lcd1602_init()
  159. {
  160.         lcd_Write_com(0x38);        //设置8位格式,2行,5*7
  161.         lcd_Write_com(0x01);        //清屏
  162.         lcd_Write_com(0x0c);        //整体显示,关光标,不闪烁
  163.         lcd_Write_com(0x06);        //设定输入方式,增量不移位
  164.         lcd_Write_com(0x80);        //初始坐标
  165. }
  166. /**************************************
  167. 液晶显示汉字程序
  168. **************************************/
  169. void hz_lcdDis(uchar x,uchar y,uchar *p) //汉字显示
  170. {
  171.    uchar i=0,temp;
  172.    if(x)temp = 0x40;   else temp = 0;
  173.    for(i=y;*p!='\0';i++,p++)
  174.    {
  175.                 lcd_Write_com(i|0x80+temp);
  176.                 lcd_write_date(*p);
  177.                 delay5ms();                          
  178.    }
  179. }
  180. /**************************************
  181. 液晶显示数字程序
  182. **************************************/
  183. void  num_lcdDis(uchar X,uchar Y,uint num,uchar n)        
  184. {
  185.         uint i=0,temp,hang;   
  186.         n +=1;
  187.            if(X)hang = 0x40;else hang = 0;
  188.            for(i=(n-1);i>0;i--)
  189.     {           
  190.                   lcd_Write_com((i+Y-1)|0x80+hang);          //从个位开始显示
  191.                   temp = num%10+0x30;
  192.                   lcd_write_date(temp);        
  193.                  
  194.                   num/=10;                                         
  195.         }        
  196. }

  197. void  displayTime30(unsigned int z){
  198.         uchar a=0; //50次数计数
  199.         uchar b=0;//秒计数
  200.         TR1 = 1;//启动T1
  201.         beep = 0; delay(15); beep = 1;
  202. while(1)
  203.                 {
  204.                         if(TF1 == 1)//判断T1是否溢出
  205.                         {
  206.                                 TH1 = 0x4b;
  207.                                 TL1 = 0xfc;//0x4bfc        定时50ms
  208.                                 TF1 = 0;//清零便于下次判断
  209.                                 a++;//50毫秒计数加1        
  210.                         }
  211.                         if(a == 20)//判断是否到1秒
  212.                         {
  213.                                 a = 0;//清零便于下次记录50ms的次数
  214.                                 b++;//秒加1
  215.                         }
  216.                                 num_lcdDis(1,12,b,3);
  217.                 //        display(b);//显示秒的值

  218.                         if(b == z)//检查是否到20秒
  219.                         {
  220.                                 TR1 = 0;//时间到关闭定时器1
  221.                            NPN1=0; NPN2=0;  NPN3=0;;  //引脚高电平
  222.                                            CCAP1H=255;//占空比控制
  223.                                          CCAP1L=255;
  224.                                 delay(10);
  225.                             break ;
  226.                         }
  227.                            if(IRok)    //判断脉宽是否检测完毕                    
  228.                 {   
  229.                         IRcordpro();//根据脉宽解码出4个字节的数据
  230.                         IRok = 0;        //重新等待脉宽检测
  231.                         if(IRpro_ok) //判断是否解码完毕  
  232.                         {
  233.                        if(IRcord[2]==0x18)
  234.                                    {
  235.                                     
  236.                                        
  237.                                  NPN1=0; NPN2=0;  NPN3=0;
  238.                                  CCAP1H=255;//占空比控制
  239.                                  CCAP1L=255;
  240.                                         hz_lcdDis(0,0,"Close");
  241.                                         beep = 0; delay(15); beep = 1;        //按键 上 按键返回
  242.                                     break;

  243.                                    }
  244.                                 IRpro_ok = 0;
  245.                         }
  246.                 }        
  247.                         
  248.                 }
  249. }


  250. void  displayTime30huxi(unsigned int z){
  251.         uchar a=0; //50次数计数
  252.         uchar b=0;//秒计数
  253.         TR1 = 1;//启动T1
  254.         beep = 0; delay(15); beep = 1;
  255.     while(1)
  256.                 {
  257.                         if(TF1 == 1)//判断T1是否溢出
  258.                         {
  259.                                 TH1 = 0x4b;
  260.                                 TL1 = 0xfc;//0x4bfc        定时50ms
  261.                                 TF1 = 0;//清零便于下次判断
  262.                                 a++;//50毫秒计数加1        
  263.                                 NPN1=1; NPN2=0;  NPN3=0;
  264.                                 delay(100);
  265.                                 NPN1=0; NPN2=1;  NPN3=0;
  266.                                 delay(100);
  267.                                 NPN1=0; NPN2=0;  NPN3=1;
  268.                                 delay(100);
  269.                                 
  270.                         }
  271.                         if(a == 20)//判断是否到1秒
  272.                         {
  273.                             NPN1=0; NPN2=0;  NPN3=1;
  274.                                 delay(100);
  275.                                 NPN1=0; NPN2=1;  NPN3=0;
  276.                                 delay(100);
  277.                                 NPN1=1; NPN2=0;  NPN3=0;
  278.                                 delay(100);
  279.                                 a = 0;//清零便于下次记录50ms的次数
  280.                                 b++;//秒加1
  281.                         }
  282.                         num_lcdDis(1,12,b,3);
  283.                 //        display(b);//显示秒的值

  284.                         if(b == z)//检查是否到20秒
  285.                         {
  286.                                 TR1 = 0;//时间到关闭定时器1
  287.                              NPN1=0; NPN2=0;  NPN3=0; NPNhuxi=0;
  288.                                  CCAP1H=255;//占空比控制
  289.                                          CCAP1L=255;
  290.                                 delay(10);
  291.                             break ;
  292.                         }
  293.                            if(IRok)    //判断脉宽是否检测完毕                    
  294.                 {   
  295.                         IRcordpro();//根据脉宽解码出4个字节的数据
  296.                         IRok = 0;        //重新等待脉宽检测
  297.                         if(IRpro_ok) //判断是否解码完毕  
  298.                         {
  299.                        if(IRcord[2]==0x18)
  300.                                    {
  301.                                     
  302.                                        
  303.                                   NPN1=0; NPN2=0;  NPN3=0; NPNhuxi=0;
  304.                                   CCAP1H=255;//占空比控制
  305.                                  CCAP1L=255;
  306.                                         hz_lcdDis(0,0,"Close");
  307.                                         beep = 0; delay(15); beep = 1;        //按键 上 按键返回
  308.                                     break;

  309.                                    }
  310.                                 IRpro_ok = 0;
  311.                         }
  312.                 }        
  313.                         
  314.                 }
  315. }
  316. void huxi(){
  317. NPN1=0; NPN2=0;  NPN3=0;

  318. beep = 0; delay(15); beep = 1;
  319. while(1){
  320. NPN1=1; NPN2=0;  NPN3=0;
  321. CCAP1H=254;//占空比控制
  322. CCAP1L=254;
  323. delay(1000);
  324. NPN1=0; NPN2=1;  NPN3=0;
  325. CCAP1H=200;//占空比控制
  326. CCAP1L=200;
  327. delay(1000);
  328. NPN1=0; NPN2=0;  NPN3=1;
  329. CCAP1H=70;//占空比控制
  330. CCAP1L=70;
  331. delay(1000);
  332. NPN1=0; NPN2=0;  NPN3=1;
  333. CCAP1H=70;//占空比控制
  334. CCAP1L=70;
  335. delay(1000);
  336. NPN1=0; NPN2=1;  NPN3=0;
  337. CCAP1H=200;//占空比控制
  338. CCAP1L=200;
  339. delay(1000);
  340. NPN1=1; NPN2=0;  NPN3=0;
  341. CCAP1H=254;//占空比控制
  342. CCAP1L=254;
  343. delay(1000);

  344.                    if(IRok)    //判断脉宽是否检测完毕                    
  345.                 {   
  346.                         IRcordpro();//根据脉宽解码出4个字节的数据
  347.                         IRok = 0;        //重新等待脉宽检测
  348.                         if(IRpro_ok) //判断是否解码完毕  
  349.                         {
  350.                        if(IRcord[2]==0x18)
  351.                                    {
  352.                                     
  353.                                        
  354.                                   NPN1=0; NPN2=0;  NPN3=0; NPNhuxi=0;
  355.                                         hz_lcdDis(0,0,"Close");
  356.                                         beep = 0; delay(15); beep = 1;        //按键 上 按键返回
  357.                                     break;

  358.                                    }
  359.                                  if(IRcord[2]==0x45){
  360.                                  beep = 0; delay(15); beep = 1;
  361.                                  displayTime30huxi(5);
  362.                                  beep = 0; delay(15); beep = 1;
  363.                                    break;
  364.                                  }
  365.                                   if(IRcord[2]==0x46){
  366.                                  beep = 0; delay(15); beep = 1;
  367.                                  displayTime30huxi(10);
  368.                                  beep = 0; delay(15); beep = 1;
  369.                                    break;
  370.                                  }
  371.                                   if(IRcord[2]==0x47){
  372.                                  beep = 0; delay(15); beep = 1;
  373.                                  displayTime30huxi(15);
  374.                                  beep = 0; delay(15); beep = 1;
  375.                                    break;
  376.                                  }
  377.                                 IRpro_ok = 0;
  378.                         }
  379.                 }        
  380. }
  381. }


  382. void main()
  383. {        
  384.         init_pwm();
  385.         lcd1602_init();

  386.         NPN1=0; NPN2=0;  NPN3=0;NPNhuxi=0;
  387.         delay(750);
  388.         lcd_Write_com(0x01);        //清屏

  389.         hz_lcdDis(0,0,"Close Timer    Z");
  390.         hz_lcdDis(1,0,"LV=0   Long=000s");

  391.         TR1 = 0;//时间到关闭定时器1
  392.         TR1 = 1;//启动T1
  393.         TMOD |= 0x10;//T1为定时器,工作模式1 16位计数器
  394.         TH1 = 0x4b;
  395.         TL1 = 0xfc;//0x4bfc        定时50ms
  396.         EA        = 1;//总中断允许

  397.         TMOD |= 0x02; //定时器0工作方式2,8位自动重装
  398.         TH0 = 0x00;  //高8位装入0那么定时器溢出一次的时间是256个机器周期
  399.         TL0 = 0x00;
  400.         ET0 = 1;           //定时器0中断
  401.         TR0 = 1;     //启动定时器0
  402.         IT0 = 1;           //设置外部中断0为跳沿触发方式,来一个下降沿触发一次
  403.         EX0 = 1;           //启动外部中断0

  404.         //delay(2000);
  405.         while(1)
  406.         {
  407.                
  408.                 if(IRok)    //判断脉宽是否检测完毕                    
  409.                 {   
  410.                         IRcordpro();//根据脉宽解码出4个字节的数据
  411.                         IRok = 0;        //重新等待脉宽检测
  412.                         if(IRpro_ok) //判断是否解码完毕  
  413.                         {
  414.                         switch(IRcord[2])
  415.                                    {
  416.                                      case 0x45:    //按键1         定时30分钟
  417.                                          displayTime30(5);
  418.                                          beep = 0; delay(15); beep = 1;
  419.                                      break;

  420.                                      case 0x46:    //按键2        定时1小时
  421.                                          displayTime30(10);
  422.                                          beep = 0; delay(15); beep = 1;
  423.                                          break;

  424.                                           case 0x47:   //按键3        定时1.5小时
  425.                                          displayTime30(15);
  426.                                          beep = 0; delay(15); beep = 1;
  427.                                          break;
  428.                                        
  429.                                          case 0x18:           NPN1=0; NPN2=0;  NPN3=0;        NPNhuxi=0;
  430.                                          CCAP1H=255;//占空比控制
  431.                                          CCAP1L=255;
  432.                                          hz_lcdDis(0,0,"Close Timer    Z");
  433.                                          hz_lcdDis(1,0,"LV=0   Long=000s");
  434.                                          beep = 0; delay(15); beep = 1;        //按键 上 关机按键        
  435.                                      break;

  436.                                          case 0x08:           NPN1=1; NPN2=0;  NPN3=0; NPNhuxi=0;
  437.                                          CCAP1H=140;//占空比控制
  438.                                          CCAP1L=140;
  439.                                          hz_lcdDis(0,0,"Open ");
  440.                                          hz_lcdDis(1,3,"1");
  441.                                          beep = 0; delay(15); beep = 1;        //按键 左 抵挡速度
  442.                                      break;

  443.                                          case 0x1C:      NPN1=0; NPN2=1;  NPN3=0; NPNhuxi=0;
  444.                                           CCAP1H=190;//占空比控制
  445.                                          CCAP1L=190;
  446.                                           hz_lcdDis(0,0,"Open ");
  447.                                          hz_lcdDis(1,3,"2");
  448.                                          beep = 0; delay(15); beep = 1;  //按键 中 中挡速度        
  449.                                      break;

  450.                                          case 0x5A:             NPN1=0; NPN2=0;  NPN3=1; NPNhuxi=0;
  451.                                          CCAP1H=254;//占空比控制
  452.                                          CCAP1L=254;
  453.                                           hz_lcdDis(0,0,"Open ");
  454.                                          hz_lcdDis(1,3,"3");
  455.                                          beep = 0; delay(15); beep = 1;        //按键 右 高档速度        
  456.                                      break;
  457.                                           case 0x52:
  458.                                           hz_lcdDis(0,0,"Open ");         
  459.                                           hz_lcdDis(0,15,"H");
  460.                                          hz_lcdDis(1,3,"S");
  461.                                          huxi();
  462.                                          beep = 0; delay(15); beep = 1;        //按键 右 呼吸        
  463.                                      break;
  464.                                    }
  465.                                 IRpro_ok = 0;
  466.                         }
  467.                 }        
  468.         
  469.         }
  470. }
复制代码

所有资料51hei提供下载:
stc12c5a60s2红外PWM可调占空比.zip (52.18 KB, 下载次数: 122)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏18 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:128463 发表于 2019-5-24 20:01 | 只看该作者
谢谢分享!!
回复

使用道具 举报

板凳
ID:490458 发表于 2019-5-24 21:56 | 只看该作者
谢谢分享!
回复

使用道具 举报

地板
ID:454039 发表于 2019-11-12 16:15 | 只看该作者
你好,这个有定时功能吗?
回复

使用道具 举报

5#
ID:639912 发表于 2019-11-12 17:10 | 只看该作者
超级好用
回复

使用道具 举报

6#
ID:546335 发表于 2019-11-13 16:27 | 只看该作者
很实用的一个设计
回复

使用道具 举报

7#
ID:785221 发表于 2020-6-20 18:25 | 只看该作者
很有实用意义的一个设计
回复

使用道具 举报

8#
ID:71535 发表于 2020-8-25 19:14 | 只看该作者
炎热的夏天这个设计很实用、
回复

使用道具 举报

9#
ID:808399 发表于 2020-8-26 08:27 | 只看该作者
compiling main.c...
main.c(1): warning C318: can't open file 'STC12C5A60S2.H'
main.c(2): warning C318: can't open file 'stc_pwm.H'
main.c(12): error C202: 'P1': undefined identifier
main.c(13): error C202: 'P3': undefined identifier
main.c(14): error C202: 'P3': undefined identifier
main.c(21): error C202: 'P3': undefined identifier
main.c(22): error C202: 'P2': undefined identifier
main.c(23): error C202: 'P1': undefined identifier
main.c(24): error C202: 'P1': undefined identifier
main.c(25): error C202: 'P1': undefined identifier 打开源码进行编译,  这么多变量没有定义,如何解决。。。。。。
回复

使用道具 举报

10#
ID:63400 发表于 2020-8-26 10:51 | 只看该作者
sunboy888888 发表于 2020-8-26 08:27
compiling main.c...
main.c(1): warning C318: can't open file 'STC12C5A60S2.H'
main.c(2): warning C ...

要添加这个芯片的头文件
回复

使用道具 举报

11#
ID:808399 发表于 2020-8-26 13:42 | 只看该作者
在keil中,把#include<STC12C5A60S2.H>头文件改成   #include<reg51.H>后,两百多个提示错误,变成了36个,但main.c(2): warning C318: can't open file 'stc_pwm.H'
main.c(116): error C202: 'CCON': undefined identifier
main.c(117): error C202: 'CL': undefined identifier
main.c(118): error C202: 'CH': undefined identifier
main.c(119): error C202: 'CMOD': undefined identifier
main.c(120): error C202: 'CCAPM1': undefined identifier
main.c(121): error C202: 'CCAP1H': undefined identifier
main.c(122): error C202: 'CCAP1L': undefined identifier
main.c(123): error C202: 'CR': undefined identifier
main.c(239): error C202: 'CCAP1H': undefined identifier
main.c(240): error C202: 'CCAP1L': undefined identifier
main.c(255): error C202: 'CCAP1H': undefined identifier
main.c(256): error C202: 'CCAP1L': undefined identifier
main.c(309): error C202: 'CCAP1H': undefined identifier
main.c(310): error C202: 'CCAP1L': undefined identifier
main.c(325): error C202: 'CCAP1H': undefined identifier
main.c(326): error C202: 'CCAP1L': undefined identifier
main.c(344): error C202: 'CCAP1H': undefined identifier
main.c(345): error C202: 'CCAP1L': undefined identifier
main.c(348): error C202: 'CCAP1H': undefined identifier
main.c(349): error C202: 'CCAP1L': undefined identifier
main.c(352): error C202: 'CCAP1H': undefined identifier
main.c(353): error C202: 'CCAP1L': undefined identifier
main.c(356): error C202: 'CCAP1H': undefined identifier
main.c(357): error C202: 'CCAP1L': undefined identifier
main.c(360): error C202: 'CCAP1H': undefined identifier
main.c(361): error C202: 'CCAP1L': undefined identifier
main.c(364): error C202: 'CCAP1H': undefined identifier
main.c(365): error C202: 'CCAP1L': undefined identifier
main.c(464): error C202: 'CCAP1H': undefined identifier
main.c(465): error C202: 'CCAP1L': undefined identifier
main.c(472): error C202: 'CCAP1H': undefined identifier
main.c(473): error C202: 'CCAP1L': undefined identifier
main.c(480): error C202: 'CCAP1H': undefined identifier
main.c(481): error C202: 'CCAP1L': undefined identifier
main.c(488): error C202: 'CCAP1H': undefined identifier
main.c(489): error C202: 'CCAP1L': undefined identifier
main.c - 36 Error(s), 1 Warning(s).这些如何解决?请高人指点下。。。
回复

使用道具 举报

12#
ID:808399 发表于 2020-8-26 13:56 | 只看该作者
我把stc12c5A60s2.H的头文件改成了      reg51.H      编译时从200个错误,变成了main.c - 36 Error(s), 1 Warning(s).    这个头文件如何处里?如下main.c(2): warning C318: can't open file 'stc_pwm.H'
回复

使用道具 举报

13#
ID:814885 发表于 2020-8-28 10:49 | 只看该作者
能否请教下 PWM 调速, PWM 的频率是多少?
回复

使用道具 举报

14#
ID:595237 发表于 2020-8-28 16:53 | 只看该作者
sunboy888888 发表于 2020-8-26 13:56
我把stc12c5A60s2.H的头文件改成了      reg51.H      编译时从200个错误,变成了main.c - 36 Error(s), 1  ...

用这个可以的

STC12C5A60S2.rar

4.14 KB, 下载次数: 20, 下载积分: 黑币 -5

回复

使用道具 举报

15#
ID:595237 发表于 2020-8-28 16:54 | 只看该作者
小颖! 发表于 2020-8-26 10:51
要添加这个芯片的头文件

用这个可以的

STC12C5A60S2.rar

4.14 KB, 下载次数: 15, 下载积分: 黑币 -5

回复

使用道具 举报

16#
ID:899605 发表于 2021-4-1 17:31 | 只看该作者
can't open file 'stc_pwm.H'怎么解决啊?
回复

使用道具 举报

17#
ID:328014 发表于 2021-4-1 17:45 | 只看该作者
言笑晏晏 发表于 2021-4-1 17:31
can't open file 'stc_pwm.H'怎么解决啊?

把14,15楼发的头文件加进入就编译ok了

51hei.png (29.95 KB, 下载次数: 90)

51hei.png

stc12c5a60s2红外PWM可调占空比.7z

34.58 KB, 下载次数: 15, 下载积分: 黑币 -5

回复

使用道具 举报

18#
ID:899605 发表于 2021-4-1 18:23 | 只看该作者
51hei团团 发表于 2021-4-1 17:45
把14,15楼发的头文件加进入就编译ok了

14 15楼发的是同一个头文件吧  已经加进去了啊  还是报错  还是同样的不能打开stc_pwm.h
C:\Users\Administrator\Desktop
回复

使用道具 举报

19#
ID:731755 发表于 2021-4-3 18:20 | 只看该作者
楼主真的是个有心人,结构清晰,标注详细
回复

使用道具 举报

20#
ID:899605 发表于 2021-4-6 13:57 | 只看该作者
这个用什么板子可以烧录出来啊?
是要用自己做的板子还是可以网上买啊?
回复

使用道具 举报

21#
ID:915425 发表于 2021-5-7 22:26 来自手机 | 只看该作者
谢谢分享,51黑有你更精彩!
回复

使用道具 举报

22#
ID:917603 发表于 2021-5-8 15:29 | 只看该作者
谢谢分享,51黑有你更精彩!
回复

使用道具 举报

23#
ID:832201 发表于 2021-5-11 12:27 | 只看该作者
不错的创意,牛啊
回复

使用道具 举报

24#
ID:981872 发表于 2021-11-17 16:18 | 只看该作者

谢谢解决问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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