久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1788|回復: 1
打印 上一主題 下一主題
收起左側

stc15單片機空調系統源程序設計

[復制鏈接]
跳轉到指定樓層
樓主
ID:528775 發表于 2019-10-12 09:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
基于15單片機進行空調系統的設計

單片機源程序如下:
  1. /****************************************Copyright (c)****************************************************
  2. **                                       
  3. **                                 
  4. **
  5. **--------------File Info---------------------------------------------------------------------------------
  6. ** File name:                       
  7. ** Last modified Date:         
  8. ** Last Version:                  
  9. ** Descriptions:                                                       
  10. **--------------------------------------------------------------------------------------------------------
  11. ** Created by:                        FiYu
  12. ** Created date:                2016-7-1
  13. ** Version:                            1.0
  14. ** Descriptions:                PWM呼吸燈實驗                                       
  15. **--------------------------------------------------------------------------------------------------------
  16. ** Modified by:                        FiYu
  17. ** Modified date:                2016-11-1
  18. ** Version:                                  2.0
  19. ** Descriptions:          
  20. ** Rechecked by:       
  21. **********************************************************************************************************/
  22. /****-----請閱讀ReadMe.txt進行實驗-----***********/
  23. #define MAIN_Fosc                11059200L        //定義主時鐘
  24. #include        "15W4KxxS4.H"

  25. #define  uint16   unsigned int  
  26. #define  uint8    unsigned char  
  27. sbit KEY1=P2^3;
  28. sbit KEY2=P2^4;
  29. sbit KEY3=P2^5;
  30. sbit KEY4=P2^6;            //用戶按鍵S3用IO口P54
  31. sbit ledpwmval=P5^5;   //藍色

  32. /**************************************
  33. 功能描述:延時函數
  34. 入口參數:uint16 x ,該值為1時,延時1ms
  35. 返回值:無
  36. ***************************************/
  37. void delay_ms(uint16 x)
  38. {  
  39.         uint16 j,i;   
  40.         for(j=0;j<x;j++)   
  41.         {   
  42.                 for(i=0;i<1100;i++);   
  43.         }  
  44. }

  45. /**************************************************************************************
  46. 功能描述:對PWM3和PWM3進行初始化
  47. 入口參數:無
  48. 返回值:無
  49. **************************************************************************************/
  50. void PWM2PWM3_Configuration(void)
  51. {
  52.         PWMCFG &= 0xBF;                         //將CBTADC位置0,即PWM計數器歸零時不觸發ADC轉換
  53.         PWMIF &= 0xBF;                         //將CBIF位置0,PWM計數器歸零中斷標志位,需軟件清零
  54.        
  55.         P_SW2 |= 0x80;                         //將EAXSFR位置1,以訪問PWM在擴展RAM區的特殊功能寄存器
  56.         //對PWM2的初始化部分
  57.         PWM2CR |= 0x08;                   //將PWM2_PS位置1,選擇PWM2的輸出引腳是P2.7
  58.         PWMCR |= 0x01;                         //將ENC2O位置1,PWM2的端口為PWM輸出口,受PWM波形發生器控制       
  59.         PWMCFG &= 0xFE;                         //將C2INI位置0,設置PWM2輸出端口的初始電平為低電平
  60.         PWMIF &= 0xFE;                         //將C2IF位置0,PWM2中斷標志位,需軟件清零
  61.         PWM2CR |= 0x04;                   //將EPWM2I位置1,使能PWM2中斷
  62.         PWM2CR &= 0xFD;                   //將EC2T2SI位置0,關閉T2翻轉時中斷
  63.         PWM2CR &= 0xFE;                   //將EC2T1SI位置0,關閉T1翻轉時中斷
  64.    //對PWM3的初始化部分
  65.         PWM3CR |= 0x08;                   //將PWM3_PS位置1,選擇PWM3的輸出引腳是P4.5
  66.         PWMCR |= 0x02;                       //將ENC3O位置1,PWM3的端口為PWM輸出口,受PWM波形發生器控制
  67.         PWMCFG &= 0xFD;                       //將C3INI位置0,設置PWM3輸出端口的初始電平為低電平
  68.         PWMIF &= 0xFD;                       //將C3IF位置0,PWM3中斷標志位,需軟件清零
  69.         PWM3CR |= 0x04;                   //將EPWM3I位置1,使能PWM3中斷
  70.         PWM3CR &= 0xFD;                   //將EC3T2SI位置0,關閉T2翻轉時中斷
  71.         PWM3CR &= 0xFE;                   //將EC3T1SI位置0,關閉T1翻轉時中斷
  72.         //對PWM2和PWM3翻轉計數器賦初值
  73.         PWM2T1 =1;                 //賦值PWM2第一次翻轉計數器值
  74.         PWM2T2 = 0x00FA;           //賦值PWM2第二次翻轉計數器值
  75.         PWM3T1 =0x00FA;                 //賦值PWM3第一次翻轉計數器值
  76.         PWM3T2 = 1;           //賦值PWM3第二次翻轉計數器值
  77.        
  78.   //對PWM波形發生器時鐘源進行初始化
  79.         PWMCKS |= 0x10;                         //將SELT2位置1,PWM時鐘源為定時器2溢出脈沖
  80.         PWMC = 0x00FA;             //PWM計數器賦值(同時對PWMCH和PWMCL進行了賦值)
  81.         AUXR |= 0x04;                           //定時器2時鐘為Fosc,即1T
  82.         T2L = 0xE0;                             //設定定時初值
  83.         T2H = 0xFE;                //設定定時初值
  84.         AUXR |= 0x10;              //啟動定時器2
  85.         P_SW2 &= 0x7F;                         //將EAXSFR位置0,恢復訪問XRAM
  86.        
  87.         //PWM外部異常控制寄存器的操作
  88.         PWMFDCR &= 0xDF;                       //將ENFD位置0,關閉PWM外部異常檢測功能
  89.         PWMFDCR &= 0xF7;                       //將ENDI位置0,關閉PWM異常檢測中斷
  90.         PWMFDCR &= 0xFB;                       //將FDCMP位置0,比較器與PWM無關
  91.         PWMFDCR &= 0xFD;                       //將FDIO位置0,P2.4的狀態與PWM無關
  92.         PWMFDCR &= 0xFE;                       //將FDIF位置0,PWM異常檢測中斷標志位,需軟件清零
  93.        
  94.         IP2 |= 0x40;                           //將PPWM位置1,使能PWM中斷為最高優先級中斷
  95.         //使能PWM波形發生器
  96.         PWMCR |= 0x80;                         //將ENPWM位置1,使能PWM波形發生器,PWM計數器開始計數
  97.         PWMCR &= 0xBF;                         //將ECBI位置0,禁止PWM計數器歸零中斷
  98. }

  99. /***************************************************************************
  100. * 描  述 : PWM中斷服務函數
  101. * 入  參 : 無
  102. * 返回值 : 無
  103. **************************************************************************/
  104. void PWM(void) interrupt PWM_VECTOR using 1
  105. {
  106.         PWMIF &= 0xBF;                         //將CBIF位置0,PWM計數器歸零中斷標志位,需軟件清零
  107.         PWMIF &= 0xFE;                         //將C2IF位置0,PWM2中斷標志位,需軟件清零
  108.         PWMIF &= 0xFD;                         //將C3IF位置0,PWM3中斷標志位,需軟件清零
  109. }





  110.    void KEY_Scan(void)

  111. {          if(KEY1 == 0)
  112.           {
  113.             delay_ms(10);
  114.             
  115.           }
  116.           if(KEY2==0)
  117.           {delay_ms(10);
  118.           }
  119.                    while(1)
  120.   {
  121.                 KEY_Scan();    //按鍵輸入檢測函數

  122.   }       
  123. }
  124. /********************************************************
  125. 功能描述:主函數
  126. 入口參數:無
  127. 返回值:無
  128. *********************************************************/

  129. int main()
  130. {
  131.         uint8 flag=1;
  132.         uint16 ledpwmval=0;
  133.         uint16 ledpwmvala=1;
  134. /////////////////////////////////////////////////
  135. //注意: STC15W4K32S4系列的芯片,上電后所有與PWM相關的IO口均為
  136. //      高阻態,需將這些口設置為準雙向口或強推挽模式方可正常使用
  137. //相關IO: P0.6/P0.7/P1.6/P1.7/P2.1/P2.2
  138. //        P2.3/P2.7/P3.7/P4.2/P4.4/P4.5
  139. /////////////////////////////////////////////////
  140.         P2M1 &= 0x7F;        P2M0 &= 0x7F;          //設置P2.7為準雙向口
  141.         P4M1 &= 0xDF;        P4M0 &= 0xDF;          //設置P4.5為準雙向口
  142.                  P2M1 &= 0x87;        P2M0 &= 0x87;          //設置P0.6為準雙向口
  143.         P5M1 &= 0xCF;        P5M0 &= 0xCF;          //設置P5.4為準雙向口
  144.         PWM2PWM3_Configuration();   //初始化PWM2和PWM3口
  145.         EA = 1;                                  //允許總中斷
  146.        

  147.        
  148.                    while(1)
  149.                 {delay_ms(100);       //延遲每次指示燈亮度的時間,更方便觀察實驗現象
  150.                
  151.          if(KEY1)
  152.                        //如果標識符為1則遞增變量ledpwmval
  153.                         ledpwmval=ledpwmval+10;
  154.                 while (KEY1 == 0); //等待按鍵釋放
  155.                         ledpwmval=ledpwmval;
  156.                        
  157.                 if(KEY2)                //如果標識符為0則遞減變量ledpwmval
  158.                         ledpwmval=ledpwmval-10;       
  159.                  while(KEY2 == 0);
  160.                         ledpwmval=ledpwmval;
  161.                 if(ledpwmval>256)    //如果變量ledpwmval遞增到一定值則控制標識符為0,以實現ledpwmval遞減
  162.                         KEY1=0;
  163.                         KEY2=1;
  164.                        
  165.                 if(ledpwmval==1)     //如果變量ledpwmval遞減到一定值則控制標識符為1,以實現ledpwmval遞增
  166.                         KEY1=1;       

  167.                
  168.                 ledpwmvala=256-ledpwmval;       
  169.                           
  170.    
  171.                 P_SW2 |= 0x80;                            //將EAXSFR位置1,以訪問PWM在擴展RAM區的特殊功能寄存器
  172.                 PWM2T1 =(uint16)ledpwmval;    //賦值PWM2第一次翻轉計數器值(不斷變化值)
  173.                 PWM2T2 = 0x00FA;              //賦值PWM2第二次翻轉計數器值(定值)
  174.                 PWM3T1 =(uint16)ledpwmvala;    //賦值PWM3第一次翻轉計數器值(不斷變化值)
  175.                 PWM3T2 = 0x00FA;              //賦值PWM3第二次翻轉計數器值(定值)
  176.                 P_SW2 &= 0x7F;                            //將EAXSFR位置0,恢復訪問XRAM
  177.                
  178.         }


  179. }
復制代碼

所有資料51hei提供下載:
pwm.rar (322.51 KB, 下載次數: 17)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1 發表于 2019-10-12 23:54 | 只看該作者
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復

使用道具 舉報

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

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 秋霞精品 | 久久中文字幕一区 | 免费在线观看黄网站 | 影音先锋中文字幕在线观看 | 日韩精品一区二区在线 | 色综合久久久 | 久久久精品国产 | 亚洲精品久久久一区二区三区 | 九九热在线观看视频 | 日韩在线免费视频 | 日本成人福利视频 | 蜜桃视频成人 | 久久三区| 91五月婷蜜桃综合 | 亚洲欧洲精品在线 | 日本不卡一区 | 亚洲 欧美 精品 | 精品久久九九 | 男女羞羞视频网站 | 亚洲国产精品99久久久久久久久 | 国产成人a亚洲精品 | 亚洲精品久久久一区二区三区 | 岛国毛片在线观看 | 国产在线a | 免费观看一级毛片 | 欧美日韩网站 | 久久国产免费 | 人人射人人插 | 精品美女 | 成人精品鲁一区一区二区 | 国产精品免费一区二区 | 性视频一区 | 成人网在线观看 | 亚洲一级毛片 | 亚洲天堂av一区 | 日韩免费视频一区二区 | 日韩欧美三区 | 欧美综合一区二区三区 | 青青草综合网 | 黄网站涩免费蜜桃网站 | 国产综合久久久久久鬼色 |