標(biāo)題: HT66f0025項(xiàng)目單片機(jī)程序,ADC例程 [打印本頁]

作者: 牧師    時(shí)間: 2018-7-9 15:18
標(biāo)題: HT66f0025項(xiàng)目單片機(jī)程序,ADC例程
這是我第一次用合泰單片機(jī)寫程序,里面用到定時(shí)器和ADC,分享一下。

單片機(jī)源程序如下:



  1. #include "HT66F002.h"


  2. #define MS1000HSPINIT 250  //高速模式



  3. unsigned char ms_1000;      //定義1/31S

  4. unsigned int  ms1000set;    //定義1S
  5. unsigned char ms_10000;     
  6. unsigned int  minute1;
  7. unsigned int  minute360;

  8. unsigned char chargedetect;
  9. unsigned char chargemode;

  10. unsigned char levelstore;

  11. //設(shè)備的實(shí)際開關(guān)機(jī)狀態(tài)位,0為關(guān)機(jī),1為開機(jī)
  12. unsigned char SYS_ON_OFF_SATE;   



  13. //燈亮度設(shè)置函數(shù)
  14. void LightSet(unsigned char setvalue)         
  15. {
  16.         _stm0al=setvalue; _stm0ah=0;
  17. }


  18. //AD轉(zhuǎn)換函數(shù)
  19. unsigned int AD_CaiJi()  //unsigned char Channel
  20. {
  21.         unsigned int AD_Data;
  22.        
  23.         AD_Data=0;       

  24.     //開啟轉(zhuǎn)換
  25.         _start = 0;                     
  26.         _start = 1;               
  27.         _start = 0;       
  28.                
  29.                
  30.         while(_adbz==1);                    //輪詢轉(zhuǎn)換       
  31.         AD_Data = _sadoh;
  32.         AD_Data <<=4;
  33.         AD_Data += (_sadol>>4);                                                                       
  34.                                
  35.     return         AD_Data;
  36. }




  37. void main()
  38. {
  39.         //adc參數(shù)定義
  40.         unsigned int  adcx;
  41.         unsigned char ADC_Sate;
  42.         unsigned char ADC_Sate1=0;
  43.        
  44.         //adc數(shù)據(jù)存儲(chǔ)變量
  45.         unsigned int  adcx1;
  46.     unsigned int  adcx2;
  47.     unsigned int  adcx3;
  48.         unsigned int  adcx4;
  49.         unsigned int  adcx5;
  50.        
  51.         //I/O口初始化設(shè)置
  52.            _papu = 0b11011011;    //上拉設(shè)置,1為上拉,0為不上拉
  53.         _pac  = 0b11111011;    //IO口方向設(shè)置,0為輸出,1為輸入
  54.                
  55.         //引腳功能設(shè)置       
  56.         _pas4=1; //PA2=STP0               
  57.     _pas6=1; //_pas6和_pas7用來設(shè)置PA5 功能選擇,選擇為ADC的通道AN3
  58.         _pas7=1;

  59.         //STM PWM 輸出設(shè)置               
  60.         _stm0c1=0b10101000; //fINT=fSYS/4, PWM Mode 256/2M=pres
  61.         LightSet(0);
  62.         _stm0c0=0b00001010;                            //打開定時(shí)器
  63.        
  64.     //AD初始化設(shè)置,參照數(shù)據(jù)手冊(cè)A/D轉(zhuǎn)換器章節(jié)
  65.     _sadc0 = 0b00100011;                                        //使能ADC        AN3
  66.         _sadc1 = 0b00000010;                                        //fsys/4
  67.         _sadc2 = 0b00000000;                                        //除能OPA
  68.        
  69.         //系統(tǒng)參初始化
  70.     _hlclk=1;                  //時(shí)鐘初始化
  71.     ms1000set=MS1000HSPINIT;
  72.     ms_10000=31;     
  73.     minute1=1860;
  74.     minute360=361;       
  75.     SYS_ON_OFF_SATE=0;         //關(guān)開機(jī)起始狀態(tài)設(shè)置
  76.     levelstore=125;            //亮度初始化
  77.    
  78.    while(1)
  79.   {
  80.                          
  81.         if(_stmp0f)                   //判斷STM中斷標(biāo)志位是否為1,everay 1ms/次
  82.         {       
  83.                 _clrwdt();         //清除看門狗定時(shí)器計(jì)數(shù)器
  84.                 _stmp0f=0;
  85.                
  86.                 if(--ms_1000==0)   //every 1/31s/次
  87.                 {
  88.                         ms_1000=ms1000set;
  89.                        
  90.                         if(--ms_10000==0)   //every 1s/次
  91.                         {
  92.                                 ms_10000=31;
  93.                                 adcx=AD_CaiJi();
  94.                     adcx1=AD_CaiJi();
  95.                         adcx2=AD_CaiJi();
  96.                         adcx3=AD_CaiJi();
  97.                         adcx4=AD_CaiJi();
  98.                                                                     
  99.                             if((adcx>=2550)&&(adcx1>=2550)&&(adcx2>=2550)&&(adcx3>=2550)&&(adcx4>=2550))      //1.7V   1800
  100.                             {
  101.                                     ADC_Sate=0;
  102.                                     ADC_Sate1=ADC_Sate;
  103.                                     SYS_ON_OFF_SATE=0;         //關(guān)機(jī)狀態(tài)
  104.                                        
  105.                             }
  106.                             else if((adcx<=2150)&&(adcx1<=2150)&&(adcx2<=2150)&&(adcx3<=2150)&&(adcx4<=2150)) //1.4V   1511
  107.                             {
  108.                                     ADC_Sate=1;
  109.                                     ADC_Sate1=ADC_Sate;
  110.                                     SYS_ON_OFF_SATE=1;         //開機(jī)狀態(tài)
  111.                             }          
  112.                             else
  113.                             {
  114.                                 ADC_Sate=ADC_Sate1;  
  115.                             }

  116.                        
  117.                             if(chargemode==0)   
  118.                         {
  119.                                 if(ADC_Sate)   //adc值小于1.6V
  120.                                     {
  121.                                                chargedetect=0;       
  122.                                             LightSet(levelstore);                                        
  123.                                     }
  124.                                     else if(++chargedetect>5)
  125.                                     {
  126.                                             chargemode=1;//start charge       
  127.                                             LightSet(0);       
  128.                                     levelstore=125;
  129.                                         minute1=1860;       
  130.                                         minute360=361;                                                               
  131.                                     }
  132.                             }
  133.                             else
  134.                             {
  135.                                 if(!ADC_Sate)    //adc值大于1.6V
  136.                                 {
  137.                                             chargedetect=0;
  138.                                             LightSet(0);
  139.                                     }
  140.                                     else if(++chargedetect>5)
  141.                                     {
  142.                                         chargemode=0;//stop charge
  143.                                             LightSet(levelstore);
  144.                                             minute1=1860;       
  145.                                         minute360=361;       
  146.                                     }                               
  147.                             }
  148.                                
  149.                         }
  150.                        
  151.                        
  152.                        
  153.                        
  154.                 if(--minute1==0)           //everay minute/次
  155.                 {
  156.                                 minute1=1860;       
  157.                                
  158.                                 if(--minute360==0) //everay 6h/次
  159.                                 {
  160.                                         minute360=361;       
  161.                             levelstore=30;                        
  162.                                 }                              
  163.                 }
  164.                
  165.             }
  166.                
  167.                
  168.                
  169.               
  170.                                                         
  171.         }
  172.       
  173.   
  174.          
  175.   }

  176. }
復(fù)制代碼

所有資料51hei提供下載:
HT66F0025單片機(jī)例程.rar (23.63 KB, 下載次數(shù): 102)



作者: cool900    時(shí)間: 2018-7-21 22:05
謝謝分享
作者: kmtbm    時(shí)間: 2019-1-2 15:44
有電路圖
作者: kmtbm    時(shí)間: 2019-1-2 15:45
謝謝你的分享
作者: tangkuan660    時(shí)間: 2021-5-12 10:18
謝謝分享,現(xiàn)在免費(fèi)能下的網(wǎng)站越來越少了。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1