⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 基于MAX1968的TEC控制程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/*****************************************************************************
程序功能:实现SLED光源的控制。
--------------------------------------------------------------------------------
测试说明:观察液晶显示
***************************头文件包含*********************/
#include <msp430x44x.h>
#include "BoardConfig.h"
#include "cry1602.h"                      //包含液晶操作函数
#include "clock.h"                        //包含时钟计算函数
#include  "pid.h"                         //包含pid运算函数
#include  "key.h"                         //包含键盘处理程序
#include  "M430IICBUS.h"                  //包含I2C总线操作函数
//#define Num_of_Results 8

void Init_MSP430F449(void);    //MSP430F449初始化函数声明
void TimerA_Init(void);        //Timer_A定时器初始化函数声明
void ADC12_Init(void);         //A/D转换初始化函数声明


/*************************变量定义************************/

//uint results[Num_of_Results];
uchar *s1 = "   SLED Source";            //显示SLED 光源初始化
//uchar *s2 = "Cui Hai Peng";              //显示SLED 光源初始化
uchar tishi1[]={"  SLED Source  "};       //提示信息
uchar tishi2[]={"Initializing..."};       //提示信息,初始化中
//extern uchar second,minute,hour,hour0;
//extern uchar pmin,phour,ps1;
//#define SetTime(H,M,S) {second=S;minute=M;hour=H;hour0=H;}
// uchar i;
//uint given=2048;                           //unsigned int=0~65535,这里初始值设置为2048,MAX5812输出1.5V,不制冷,也不加热。作为给定值
uint MAX5812_vout=0;                    //MAX5812设置的电压输出初始值为2048,输出大约1.5V。
//uint AD_feedback=0;                        //12AD采样的结果,初始值设置为0
//unsigned int AD_result;                  //存放AD转换的结果 
//unsigned char MAX5812_vout_high;         //电压输出的高字节
//unsigned char MAX5812_vout_low;          //电压输出的低字节
//uchar LCD1602_buffer1[16];
//uchar LCD1602_buffer2[16];
//static unsigned char fun_buffer;           //功能键缓存
static unsigned char key_flag;             //按键标志
//       unsigned char key_temp;             //按键时间累加


/*************************主函数************************/
void main(void)
{     
    //=======================初始化程序=========================================
    //uint i;
    //unsigned int ADT,ADT_Z,ADT_S,ADT_B,ADT_Q; //定义变量???
    //unsigned long ADT1,MAX5812_VOUT1;
    //unsigned char MAX5812_vout_high;         //电压输出的高字节
    //unsigned char MAX5812_vout_low;  
    //unsigned int ad;
    Init_MSP430F449();                         //调用MSP430F449初始化子程序
    //TimerA_Init();                             //调用Timer_A初始化子程序
    //ADC12_Init();                              //调用AD转换初始化子程序
    //Delay400ms();
    //LcdReset();                                //调用LCD1602初始化子程序,同时液晶显示初始化是否成功情况
    //LcdReset();
    //LcdReset();
    //LcdReset();
    //LcdReset();                              //多次初始化,以避免不能初始化。两行灰色显示
    _EINT();                                   //中断使能
    //DispNChar(0,0,15,tishi1);                  //显示提示文字,测试液晶,SLED Light Source
    //DispNChar(0,1,15,tishi2);                  //显示提示文字

    //=======================外设初始化程序=====================================
    DAC_MAX5812_Wakeup();                   //首先唤醒MAX5812DA转换芯片,使之能正常工作。液晶显示是否正常
    
    //initialize_pid_value();                 //PID参数初始化设置      
    
    //=======================主循环程序=========================================
    //BoardConfig(0xb8);                    //关闭74LVC4245,数码管和流水灯   
    //请在此处设置正确时间
    //SetTime(3,8,0);                       //顺序:时,分,秒,格式:BCD码      
    while(1)
   {
       unsigned int i;                            //循环使用
       unsigned char MAX5812_vout_high;           //MAX5812电压输出的高字节
       unsigned char MAX5812_vout_low;            //                 低  
         
     //LPM3;                              //进入LPM3低功耗模式
       //WDTCTL = WDT_ADLY_250;             //间隔定时器,定时16ms 
        _EINT();
     //LcdClear();                        //每次都得清一次屏
       //ADC12CTL0|=ADC12SC;                //开始转换
       P5OUT=0xFF;                        //使能MAX1968
       //while((ADC12IFG&ADC12BUSY)==1);
       for(i=0;i<4095;i++)
       {
          MAX5812_vout = i;  
          MAX5812_vout_high = (MAX5812_vout&0xff00)>>8;             //取高8位
          MAX5812_vout_low = (MAX5812_vout&0x00ff);                 //取低8位
          DAC_MAX5812(0xc0,MAX5812_vout_high,MAX5812_vout_low);     //DAC更新输出
          if(i>2048)
          {
            P3OUT=0xFF;
          }
          else
            P3OUT=0x00;
       }
       //MAX5812_vout = ypid(given,AD_feedback);                      //PI计算
    
    //============================ DAC输出======================================
       
       //MAX5812_vout_high = (MAX5812_vout&0xff00)>>8;             //取高8位
       //MAX5812_vout_low = (MAX5812_vout&0x00ff);                 //取低8位
       //DAC_MAX5812(0xc0,MAX5812_vout_high,MAX5812_vout_low);     //DAC更新输出

   }
}

void Init_MSP430F449(void)      //MSP430F449初始化子程序
{
    uint i;
    WDTCTL = WDTPW + WDTHOLD;                //停止看门狗
    //===========P5口用来控制TEC的状态,必要时可以关闭MAX1968===================
    P5SEL=0x00;                              //P5口为一般I/O引脚
    
    P3SEL=0x00;                              //P3口为一般I/O引脚,P3.0显示波形的状态显示!!!!
    P3DIR=0xFF;                              //P3口为输出口  1---out  0----in
    P3OUT=0x00;                              //输出为0,初始输出,LED不亮
    
    P5DIR=0xFF;                              //P5口为输出口  1---out  0----in
    P5OUT=0x08;                              //P5.3输出1,使得MAX1968有效
    //======================键盘初始化程序======================================
    P1DIR&=~key_inc+key_dec+key_fun;         //端口1初始化,0----in   1---out
    P1IES=key_inc+key_dec+key_fun;           //1下降沿触发中断       0---上升沿触发
    P1IE=key_inc+key_dec+key_fun;            //允许键盘口线可以中断  0---不能中断       
    
    //======================时钟初始化程序======================================
    //FLL_CTL1=FLL_CTL1&~XT2OFF;              //打开外部高频晶振
    //FLL_CTL1=~SMCLKOFF+~XT2OFF+SELM_XT2;    //关闭SMCLK,并且打开XT2振荡器,并且设MCLK时钟源为XT2振荡器
    //FLL_CTL1=0x54;                          //XT2OFF=0,打开XT2;SELS=1,子系统时钟SMCLK----XT2CLK,0---DCOCLK,FLL_DIV=00------不分频
    //FLL_CTL0=FLL_CTL0&~XT2OF;               //高频振荡器失效标志位清零,XT2OF=0---没有失效;1----失效
    FLL_CTL0=XCAP18PF;                        //设置振荡电容为18pF
    FLL_CTL1=FLL_CTL1&~XT2OF;                 //XT2打开
    do
    {
      FLL_CTL0=FLL_CTL0&~XT2OF;             //高频振荡器标志位清零
      for(i=0;i<50000;i++);
    }
    while(FLL_CTL0&XT2OF);                  //测试高频振荡器失效标志
    
    FLL_CTL1=SELS;                          //SMCLK=XT2CLK
    //FLL_CTL0&=0xBF;                       //实际光源系统中,主时钟为4M
    //for(i=10;i>0;i--);                    //延迟,使得晶振起振
    _EINT();                                //允许总中断开放

}
/*
void TimerA_Init(void)                     //Timer_A定时器初始化函数声明
{
    //=======================Timer_A初始化程序==================================
    //FLL_CTLO|=XCAP14PF;                  //配置电容,什么作用????????????????
    TACTL=TASSEL1+TACLR;                   //TASSEL1,TASSEL0=10----系统时钟,SMCLK,清除TAR--定时器清除位
    //CCTL0=CCIE;                          //CCR0中断开放
    TACCTL0=CCIE;                          //CCR0中断开放
    TACCR0=1049;                           //!!!!!!!!!!
    P1DIR|=0X04;                           //P1.2 输出
    TACTL|=MC0;                            //Timer_A增计数方式 00--停止模式 01---增计数模式 10---连续计数模式 11增/减计数模式
    //_EINT();                             //系统总中断开放
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -