找回密码
 立即注册

QQ登录

只需一步,快速开始

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

HT66f0025项目单片机程序,ADC例程

[复制链接]
跳转到指定楼层
楼主
这是我第一次用合泰单片机写程序,里面用到定时器和ADC,分享一下。

单片机源程序如下:



  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. //设备的实际开关机状态位,0为关机,1为开机
  12. unsigned char SYS_ON_OFF_SATE;   



  13. //灯亮度设置函数
  14. void LightSet(unsigned char setvalue)         
  15. {
  16.         _stm0al=setvalue; _stm0ah=0;
  17. }


  18. //AD转换函数
  19. unsigned int AD_CaiJi()  //unsigned char Channel
  20. {
  21.         unsigned int AD_Data;
  22.        
  23.         AD_Data=0;       

  24.     //开启转换
  25.         _start = 0;                     
  26.         _start = 1;               
  27.         _start = 0;       
  28.                
  29.                
  30.         while(_adbz==1);                    //轮询转换       
  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参数定义
  40.         unsigned int  adcx;
  41.         unsigned char ADC_Sate;
  42.         unsigned char ADC_Sate1=0;
  43.        
  44.         //adc数据存储变量
  45.         unsigned int  adcx1;
  46.     unsigned int  adcx2;
  47.     unsigned int  adcx3;
  48.         unsigned int  adcx4;
  49.         unsigned int  adcx5;
  50.        
  51.         //I/O口初始化设置
  52.            _papu = 0b11011011;    //上拉设置,1为上拉,0为不上拉
  53.         _pac  = 0b11111011;    //IO口方向设置,0为输出,1为输入
  54.                
  55.         //引脚功能设置       
  56.         _pas4=1; //PA2=STP0               
  57.     _pas6=1; //_pas6和_pas7用来设置PA5 功能选择,选择为ADC的通道AN3
  58.         _pas7=1;

  59.         //STM PWM 输出设置               
  60.         _stm0c1=0b10101000; //fINT=fSYS/4, PWM Mode 256/2M=pres
  61.         LightSet(0);
  62.         _stm0c0=0b00001010;                            //打开定时器
  63.        
  64.     //AD初始化设置,参照数据手册A/D转换器章节
  65.     _sadc0 = 0b00100011;                                        //使能ADC        AN3
  66.         _sadc1 = 0b00000010;                                        //fsys/4
  67.         _sadc2 = 0b00000000;                                        //除能OPA
  68.        
  69.         //系统参初始化
  70.     _hlclk=1;                  //时钟初始化
  71.     ms1000set=MS1000HSPINIT;
  72.     ms_10000=31;     
  73.     minute1=1860;
  74.     minute360=361;       
  75.     SYS_ON_OFF_SATE=0;         //关开机起始状态设置
  76.     levelstore=125;            //亮度初始化
  77.    
  78.    while(1)
  79.   {
  80.                          
  81.         if(_stmp0f)                   //判断STM中断标志位是否为1,everay 1ms/次
  82.         {       
  83.                 _clrwdt();         //清除看门狗定时器计数器
  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;         //关机状态
  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;         //开机状态
  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. }
复制代码

所有资料51hei提供下载:
HT66F0025单片机例程.rar (23.63 KB, 下载次数: 99)


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

使用道具 举报

沙发
ID:78392 发表于 2018-7-21 22:05 | 只看该作者
谢谢分享
回复

使用道具 举报

板凳
ID:78702 发表于 2019-1-2 15:44 | 只看该作者
有电路图
回复

使用道具 举报

地板
ID:78702 发表于 2019-1-2 15:45 | 只看该作者
谢谢你的分享
回复

使用道具 举报

5#
ID:431827 发表于 2021-5-12 10:18 | 只看该作者
谢谢分享,现在免费能下的网站越来越少了。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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