找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12151|回復: 23
收起左側(cè)

基于51單片機的紅外智能風扇程序+電路 超簡單

  [復制鏈接]
ID:396513 發(fā)表于 2019-5-22 08:54 | 顯示全部樓層 |閱讀模式
實用STC12C5A60S2型號的單片機,實現(xiàn)三檔風速,利用單片機內(nèi)部定時器智能定時,可切換自然風和正常風,使用市場上常見的小遙控器。

電路原理圖如下:
紅外風扇原理圖1.png
制作出來的實物圖如下:
A8ACBCF79EF7B93395A3E0B707AF4CA7.png


單片機源程序如下:
  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;     //定義紅外脈沖數(shù)據(jù)接口        外部中斷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;                 //檢測紅外高電平持續(xù)時間(脈寬)
  29. uchar IRcord[4];    //此數(shù)組用于儲存分離出來的4個字節(jié)的數(shù)據(jù)(用戶碼2個字節(jié)+鍵值碼2個字節(jié))
  30. uchar IRdata[33];   //此數(shù)組用于儲存紅外的33位數(shù)據(jù)(第一位為引導碼用戶碼16+鍵值碼16)
  31. bit IRpro_ok, IRok;  //第一個用于紅外接收4個字節(jié)完畢。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;                                 //        聲明靜態(tài)變量(在跳出函數(shù)后在回來執(zhí)行的時候不會丟失數(shù)值)i用于把33次高電平的持續(xù)時間存入IRdata
  53.         static bit startflag;                //開始儲存脈寬標志位
  54.         if(startflag)                                 //開始接收脈寬檢測
  55.         {
  56.                 if( (IRtime < 53) && (IRtime >= 32) ) /*判斷是否是引導碼,底電平9000us+高4500us        
  57.                 這個自己可以算我以11.0592來算了NEC協(xié)議的引導碼低8000-10000+高4000-5000
  58.                 如果已經(jīng)接收了引導碼那么i不會被置0就會開始依次存入脈寬*/
  59.                         i = 0;                                 //如果是引導碼那么執(zhí)行i=0把他存到IRdata的第一個位
  60.                 IRdata[i] = IRtime;                   //以T0的溢出次數(shù)來計算脈寬,把這個時間存到數(shù)組里面到后面判斷
  61.                 IRtime = 0;                                 //計數(shù)清零,下一個下降沿的時候在存入脈寬
  62.                 i++;                                          //計數(shù)脈寬存入的次數(shù)
  63.                 if(i == 33)                                  //如果存入34次 數(shù)組的下標是從0開始i等于33表示執(zhí)行了34次
  64.                 {
  65.                          IRok = 1;                                 //那么表示脈寬檢測完畢
  66.                         i = 0;                                  //把脈寬計數(shù)清零準備下次存入
  67.                 }
  68.         }
  69.         else                  
  70.         {
  71.                 IRtime = 0;                                  //引導碼開始進入把脈寬計數(shù)清零開始計數(shù)
  72.                 startflag = 1;                         //開始處理標志位置1
  73.         }
  74. }
  75. void IRcordpro()                                    //提取它的33次脈寬進行數(shù)據(jù)解碼
  76. {
  77.         uchar i, j, k, cord, value;        /*i用于處理4個字節(jié),j用于處理一個字節(jié)中每一位,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的其他位的數(shù)值只會讓他最高位為1*/
  89.                         if(j < 7)
  90.                         {
  91.                                 value = value >> 1;        //value位左移依次接收8位數(shù)據(jù)。
  92.                         }
  93.                         k++;                                //每執(zhí)行一次脈寬位加1
  94.                 }
  95.                 IRcord[i] = value;           //每處理完一個字節(jié)把它放入IRcord數(shù)組中。
  96.                 value = 0;                            //清零value方便下次在存入數(shù)據(jù)
  97.         }
  98.         IRpro_ok = 1;                                   //接收完4個字節(jié)后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. 寫數(shù)據(jù)
  135. **************************************/
  136. void lcd_write_date(uchar date)        
  137. {
  138.         RS=1;                                        //定義數(shù)據(jù)寄存器
  139.         RW=0;                                        //寫允許
  140.         P0=date;                                //寫數(shù)據(jù)
  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);        //寫數(shù)據(jù)
  154. }  
  155. /**************************************
  156. 液晶初始化
  157. **************************************/
  158. void lcd1602_init()
  159. {
  160.         lcd_Write_com(0x38);        //設(shè)置8位格式,2行,5*7
  161.         lcd_Write_com(0x01);        //清屏
  162.         lcd_Write_com(0x0c);        //整體顯示,關(guān)光標,不閃爍
  163.         lcd_Write_com(0x06);        //設(shè)定輸入方式,增量不移位
  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. 液晶顯示數(shù)字程序
  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次數(shù)計數(shù)
  199.         uchar b=0;//秒計數(shù)
  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毫秒計數(shù)加1        
  210.                         }
  211.                         if(a == 20)//判斷是否到1秒
  212.                         {
  213.                                 a = 0;//清零便于下次記錄50ms的次數(shù)
  214.                                 b++;//秒加1
  215.                         }
  216.                                 num_lcdDis(1,12,b,3);
  217.                 //        display(b);//顯示秒的值

  218.                         if(b == z)//檢查是否到20秒
  219.                         {
  220.                                 TR1 = 0;//時間到關(guān)閉定時器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();//根據(jù)脈寬解碼出4個字節(jié)的數(shù)據(jù)
  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次數(shù)計數(shù)
  252.         uchar b=0;//秒計數(shù)
  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毫秒計數(shù)加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的次數(shù)
  280.                                 b++;//秒加1
  281.                         }
  282.                         num_lcdDis(1,12,b,3);
  283.                 //        display(b);//顯示秒的值

  284.                         if(b == z)//檢查是否到20秒
  285.                         {
  286.                                 TR1 = 0;//時間到關(guān)閉定時器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();//根據(jù)脈寬解碼出4個字節(jié)的數(shù)據(jù)
  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();//根據(jù)脈寬解碼出4個字節(jié)的數(shù)據(jù)
  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;//時間到關(guān)閉定時器1
  392.         TR1 = 1;//啟動T1
  393.         TMOD |= 0x10;//T1為定時器,工作模式1 16位計數(shù)器
  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;           //設(shè)置外部中斷0為跳沿觸發(fā)方式,來一個下降沿觸發(fā)一次
  403.         EX0 = 1;           //啟動外部中斷0

  404.         //delay(2000);
  405.         while(1)
  406.         {
  407.                
  408.                 if(IRok)    //判斷脈寬是否檢測完畢                    
  409.                 {   
  410.                         IRcordpro();//根據(jù)脈寬解碼出4個字節(jié)的數(shù)據(jù)
  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;        //按鍵 上 關(guān)機按鍵        
  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可調(diào)占空比.zip (52.18 KB, 下載次數(shù): 125)


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:128463 發(fā)表于 2019-5-24 20:01 | 顯示全部樓層
謝謝分享!
回復

使用道具 舉報

ID:490458 發(fā)表于 2019-5-24 21:56 | 顯示全部樓層
謝謝分享!
回復

使用道具 舉報

ID:454039 發(fā)表于 2019-11-12 16:15 | 顯示全部樓層
你好,這個有定時功能嗎?
回復

使用道具 舉報

ID:639912 發(fā)表于 2019-11-12 17:10 | 顯示全部樓層
超級好用
回復

使用道具 舉報

ID:546335 發(fā)表于 2019-11-13 16:27 | 顯示全部樓層
很實用的一個設(shè)計
回復

使用道具 舉報

ID:785221 發(fā)表于 2020-6-20 18:25 | 顯示全部樓層
很有實用意義的一個設(shè)計
回復

使用道具 舉報

ID:71535 發(fā)表于 2020-8-25 19:14 | 顯示全部樓層
炎熱的夏天這個設(shè)計很實用、
回復

使用道具 舉報

ID:808399 發(fā)表于 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 打開源碼進行編譯,  這么多變量沒有定義,如何解決。。。。。。
回復

使用道具 舉報

ID:63400 發(fā)表于 2020-8-26 10:51 | 顯示全部樓層
sunboy888888 發(fā)表于 2020-8-26 08:27
compiling main.c...
main.c(1): warning C318: can't open file 'STC12C5A60S2.H'
main.c(2): warning C ...

要添加這個芯片的頭文件
回復

使用道具 舉報

ID:808399 發(fā)表于 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).這些如何解決?請高人指點下。。。
回復

使用道具 舉報

ID:808399 發(fā)表于 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'
回復

使用道具 舉報

ID:814885 發(fā)表于 2020-8-28 10:49 | 顯示全部樓層
能否請教下 PWM 調(diào)速, PWM 的頻率是多少?
回復

使用道具 舉報

ID:595237 發(fā)表于 2020-8-28 16:53 | 顯示全部樓層
sunboy888888 發(fā)表于 2020-8-26 13:56
我把stc12c5A60s2.H的頭文件改成了      reg51.H      編譯時從200個錯誤,變成了main.c - 36 Error(s), 1  ...

用這個可以的

STC12C5A60S2.rar

4.14 KB, 下載次數(shù): 21, 下載積分: 黑幣 -5

回復

使用道具 舉報

ID:595237 發(fā)表于 2020-8-28 16:54 | 顯示全部樓層
小穎! 發(fā)表于 2020-8-26 10:51
要添加這個芯片的頭文件

用這個可以的

STC12C5A60S2.rar

4.14 KB, 下載次數(shù): 16, 下載積分: 黑幣 -5

回復

使用道具 舉報

ID:899605 發(fā)表于 2021-4-1 17:31 | 顯示全部樓層
can't open file 'stc_pwm.H'怎么解決。
回復

使用道具 舉報

ID:328014 發(fā)表于 2021-4-1 17:45 | 顯示全部樓層
言笑晏晏 發(fā)表于 2021-4-1 17:31
can't open file 'stc_pwm.H'怎么解決?

把14,15樓發(fā)的頭文件加進入就編譯ok了
51hei.png

stc12c5a60s2紅外PWM可調(diào)占空比.7z

34.58 KB, 下載次數(shù): 15, 下載積分: 黑幣 -5

回復

使用道具 舉報

ID:899605 發(fā)表于 2021-4-1 18:23 | 顯示全部樓層
51hei團團 發(fā)表于 2021-4-1 17:45
把14,15樓發(fā)的頭文件加進入就編譯ok了

14 15樓發(fā)的是同一個頭文件吧  已經(jīng)加進去了啊  還是報錯  還是同樣的不能打開stc_pwm.h
C:\Users\Administrator\Desktop
回復

使用道具 舉報

ID:731755 發(fā)表于 2021-4-3 18:20 | 顯示全部樓層
樓主真的是個有心人,結(jié)構(gòu)清晰,標注詳細
回復

使用道具 舉報

ID:899605 發(fā)表于 2021-4-6 13:57 | 顯示全部樓層
這個用什么板子可以燒錄出來?
是要用自己做的板子還是可以網(wǎng)上買?
回復

使用道具 舉報

ID:915425 發(fā)表于 2021-5-7 22:26 來自觸屏版 | 顯示全部樓層
謝謝分享,51黑有你更精彩!
回復

使用道具 舉報

ID:917603 發(fā)表于 2021-5-8 15:29 | 顯示全部樓層
謝謝分享,51黑有你更精彩!
回復

使用道具 舉報

ID:832201 發(fā)表于 2021-5-11 12:27 | 顯示全部樓層
不錯的創(chuàng)意,牛啊
回復

使用道具 舉報

ID:981872 發(fā)表于 2021-11-17 16:18 | 顯示全部樓層

謝謝解決問題
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表