/*****************************************************************************
程序功能:实现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;
评论3