基于MSP430高效LED驱动程序部分精编.docx

上传人:b****6 文档编号:15837744 上传时间:2023-07-08 格式:DOCX 页数:17 大小:17.34KB
下载 相关 举报
基于MSP430高效LED驱动程序部分精编.docx_第1页
第1页 / 共17页
基于MSP430高效LED驱动程序部分精编.docx_第2页
第2页 / 共17页
基于MSP430高效LED驱动程序部分精编.docx_第3页
第3页 / 共17页
基于MSP430高效LED驱动程序部分精编.docx_第4页
第4页 / 共17页
基于MSP430高效LED驱动程序部分精编.docx_第5页
第5页 / 共17页
基于MSP430高效LED驱动程序部分精编.docx_第6页
第6页 / 共17页
基于MSP430高效LED驱动程序部分精编.docx_第7页
第7页 / 共17页
基于MSP430高效LED驱动程序部分精编.docx_第8页
第8页 / 共17页
基于MSP430高效LED驱动程序部分精编.docx_第9页
第9页 / 共17页
基于MSP430高效LED驱动程序部分精编.docx_第10页
第10页 / 共17页
基于MSP430高效LED驱动程序部分精编.docx_第11页
第11页 / 共17页
基于MSP430高效LED驱动程序部分精编.docx_第12页
第12页 / 共17页
基于MSP430高效LED驱动程序部分精编.docx_第13页
第13页 / 共17页
基于MSP430高效LED驱动程序部分精编.docx_第14页
第14页 / 共17页
基于MSP430高效LED驱动程序部分精编.docx_第15页
第15页 / 共17页
基于MSP430高效LED驱动程序部分精编.docx_第16页
第16页 / 共17页
基于MSP430高效LED驱动程序部分精编.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于MSP430高效LED驱动程序部分精编.docx

《基于MSP430高效LED驱动程序部分精编.docx》由会员分享,可在线阅读,更多相关《基于MSP430高效LED驱动程序部分精编.docx(17页珍藏版)》请在冰点文库上搜索。

基于MSP430高效LED驱动程序部分精编.docx

基于MSP430高效LED驱动程序部分精编

//********************************************************************

//基于tps61040的led

//********************************************************************

#include"msp430x14x.h"

#include"BoardConfig.h"

#include"1602.c"

#definekeyin(P1IN&0x0f)

#defineN10

//***********************************************************************

//端口的初始化

//***********************************************************************

voidPort_Init()

{

P1SEL=BIT6+BIT7;

P1DIR=BIT6+BIT7;

P1IES=BIT0+BIT1+BIT2+BIT3;

P1IE=BIT0+BIT1+BIT2+BIT3;

P2DIR=BIT0;

P2OUT=0x7e;

//P6IN=BIT0;

P6DIR=0xfe;

P6OUT=0xfe;

}

//*********************************************************************

//变量定义

//*********************************************************************

uintResults[32];

uintAverage;

staticucharFlag=0;//标志变量

uintTEMP=0;//ADC值暂存变量

uinttemp,A1,A2,A3,A4,A5,A6,A7;//定义的变量,显示数据处理

volatileuintCount=0,a=0,b=0;//步进计数

intBujin[N]={29,27,25,21,19,17,15,11,9};

intBujin_test[30]={23,67,110,149,186,200,24};//步进3mA

//uintLedwei[N]={0xff,0xfd,0xf9,0xf1,0xe1,0xc1,0x80,0x01};

intBujin1[30]={23,37,52,67,81,94,108,122,136,149,160,173,187};

unsignedintwidth[10]={0,0,0,0,0,0,0,0,0,0};//TB使用

unsignedinti=0;//TB使用

//******************************************************************

//延时去抖

//*********************************************************************

voiddelay(uintt)//延时

{

while(t--);

}

/*

voiddelay_key(void)//按键去抖延时

{

uinttmp;

uchari;

for(i=7;i>0;i--)

{

for(tmp=12000;tmp>0;tmp--);

}

}

*/

//TB初始化

voidTB_Init(void)

{

P4SEL|=BIT0;

BCSCTL1&=~XT2OFF;

do

{

IFG1&=~OFIFG;

for(i=256;i>0;i--);

}

while((IFG1&OFIFG)!

=0);

BCSCTL2=SELM_2+SELS;

TBCCTL0&=~(CCIS1+CCIS0);

TBCCTL0|=CM_2+SCS+CAP;

TBCCTL0|=CCIE;

TBCTL|=ID_3;

TBCTL|=TBSSEL_2;

TBCTL|=TBCLR;

TBCTL|=MC_2;

_EINT();

}

//*******************************************************************

//TA12

//*********************************************************************

voidTA12PWM(uintTA0,uintTA1,uintTA2)//TA12控制函数

{

TACTL|=MC_1+TASSEL_1;

TACCTL1=OUTMOD_7;

TACCTL2=OUTMOD_7;

TACCR0=TA0;

TACCR1=TA1;

TACCR2=TA2;

}

//***********************************************************************

//AD采样显示

//***********************************************************************

voidLCD_DisplayADC()

{

LCD_write_char(0x0b,0,0x30+A1);

LCD_write_char(0x0c,0,0x30+A2);

LCD_write_char(0x0d,0,0x30+A3);

LCD_write_char(0x0e,0,0X30+A4);

}

voidLCD_DisplayVoltage()

{

LCD_write_char(0x0b,1,0x30+A5);

LCD_write_char(0x0c,1,'.');

LCD_write_char(0x0d,1,0x30+A6);

LCD_write_char(0x0e,1,0X30+A7);

LCD_write_char(0x0f,1,'V');

}

//*************************************************************************

//数字量显示处理函数

//*************************************************************************

voidData_do(uinttemp_d)

{

uinttemp_1,temp_2;

A1=temp_d/1000;//分出千,百,十,和个位

temp_1=temp_d%1000;

A2=temp_1/100;

temp_2=temp_1%100;

A3=temp_2/10;

A4=temp_2%10;

}

//*************************************************************************

//电压数据显示处理函数

//*************************************************************************

voidVoltage_do(uinttemp_d)

{

uinttemp_1,temp_2;

ulongtemp_3;

temp_3=(ulong)(temp_d)*250;//转换公式,ADC数字量转换为电压大小,注意数据类型

temp_d=temp_3/4095;//12位精度,除以4095

A5=temp_d/100;//分出百,十,和个位

temp_1=temp_d%100;

A6=temp_1/10;

temp_2=temp_1%10;

A7=temp_2;

}

//*************************************************************************

//ADC初始化程序,用于配置ADC相关寄存器

//*************************************************************************

voidADC_Init()

{

P6SEL|=0x01;//选择ADC通道

ADC12CTL0|=ADC12ON+SHT0_15+REF2_5V+REFON;//ADC电源控制开,16个CLK,内部基准2.5V

ADC12CTL1|=ADC12SSEL1+ADC12SSEL0;//SMCLK做时钟源

ADC12MCTL0=SREF0+INCH_0;//参考控制位及通道选择,这里选择通道0

ADC12IE|=0x01;//中断允许

ADC12CTL0|=ENC;//使能转换器

}

//*************************************************************************

//按键中断执行函数

//****************************************************************************

voidP10_key(void)

{

Count++;

TA12PWM(199,Bujin_test[Count],Bujin_test[Count]);

if(Count==6)

Count=0;

P6OUT=0xef;

//if(Count==4)

//P16DIR=0x

//TACCR0=65;//32.768500KHZ

//P6OUT=Ledwei[Count];

}

voidP11_key(void)

{

a++;

TA12PWM(199,Bujin[a],Bujin[Count]);

if(a==3)

P6OUT=0xff;

if(a==6)

P6OUT=0xef;

//TACCR0=65;//32.768500KHZ

//P6OUT=Ledwei[Count];

}

voidP12_key(void)

{

TA12PWM(199,16,17);

P6OUT=0xef;

delay_ms(1000);

//TA12PWM(199,15,17);

delay_ms(1000);

//TA12PWM(199,14,17);

delay_ms(1000);

delay_ms(1000);

delay_ms(1000);

TA12PWM(199,15,17);

P6OUT=0xff;

delay_ms(1000);

TA12PWM(199,12,17);

delay_ms(1000);

TA12PWM(199,11,17);

//TA12PWM(199,6,17);

delay_ms(1000);

TA12PWM(199,7,17);

delay_ms(1000);

TA12PWM(199,5,17);

delay_ms(3000);

TA12PWM(199,2,17);

delay_ms(5000);

TA12PWM(199,0,17);

}

voidP13_key(void)

{

b++;

TA12PWM(199,Bujin1[b],Bujin1[Count]);

}

//*************************************************************************

//ADC中断服务程序

//*************************************************************************

/*

#pragmavector=ADC_VECTOR

__interruptvoidADC12ISR(void)

{

ucharj;

while((ADC12CTL1&0x01)==1);//如果ADC忙,则等待,否则读取ADC转换数值

Flag=1;

TEMP=ADC12MEM0;//读取ADC转换值

Data_do(TEMP);//处理ADC值,用于显示,数字量

Voltage_do(TEMP);//处理ADC值,用于显示,模拟电压值

for(j=0;j<15;j++)

{

LCD_DisplayADC();//显示ADC的数据,ADC数字量

LCD_DisplayVoltage();//显示ADC的电压值

}

}

*/

/*

#pragmavector=ADC_VECTOR

__interruptvoidADC12ISR(void)

{

staticucharindex=0;

uchari;

Results[index++]=ADC12MEM0;//Moveresults,IFGiscleared

if(index==31)

{

//uchari;

Average=0;

for(i=0;i<32;i++)

Average+=Results[i];

Average>>=5;//除以32求平均值

index=0;

_BIC_SR_IRQ(LPM0_bits);//ClearLPM0

}

Data_do(width[1]);//处理ADC值,用于显示,数字量

Voltage_do(width[1]);//处理ADC值,用于显示,模拟电压值

for(i=0;i<15;i++)

{

LCD_DisplayADC();//显示ADC的数据,ADC数字量

LCD_DisplayVoltage();//显示ADC的电压值

}

}

*/

//*************************************************************************

//P1中断服务函数

//************************************************************************

#pragmavector=PORT1_VECTOR//p1中断

__interruptvoidPORT1_ISR(void)

{

//volatileuintCount=1;

if(P1IFG&0x0f)

{

switch(P1IFG)

{

case0x01:

if(keyin==0x0e)

{

delay_ms(7);

if(keyin==0x0e)

{

//while(keyin!

=0x0f);

P10_key();

//TA12PWM(199,89,199);

//delay_ms(2000);

P1IFG=0;

return;

}

}

case0x02:

if(keyin==0x0d)

{

delay_ms(7);

if(keyin==0x0d)

{

//while(keyin!

=0x0f);

P11_key();

//TA12PWM(199,159,199);

//delay_ms(2000);

P1IFG=0;

return;

}

}

case0x04:

if(keyin==0x0b)

{

delay_ms(7);

if(keyin==0x0b)

{

//while(keyin!

=0x0f);

P12_key();

//delay_ms(2000);

P1IFG=0;

return;

}

}

case0x08:

if(keyin==0x07)

{

delay_ms(7);

if(keyin==0x07)

{

//while(keyin!

=0x0f);

P13_key();

//delay_ms(2000);

P1IFG=0;

return;

}

}

default:

while(keyin!

=0x0f);//等待按键放开

P1IFG=0;

return;

}

}

P1IFG=0;

}/*

//定时器TB的CCR0的中断:

用于检测脉冲上升与下降沿

#pragmavector=TIMERB0_VECTOR

__interruptvoidTimerB0(void)

{

if(TBCCTL0&CM1)

{

TBCTL|=TBCLR;

TBCCTL0=(TBCCTL0&(~CM1))|CM0;

}

elseif(TBCCTL0&CM0)

{

width[i++]=TBCCR0;

TBCCTL0=(TBCCTL0&(~CM0))|CM1;

if(i==10)i=0;

}

}

*/

//***********************************************************************

//main主程序

//***********************************************************************

voidmain(void)

{

WDT_Init();//看门狗初始化

Clock_Init();//时钟初始化

Port_Init_1602();//1602端口初始化,用于控制IO口输入或输出

Port_Init();//端口的初始化

ADC_Init();//初始化ADC配置

delay_ms(100);//延时100ms

LCD_init();//液晶参数初始化设置

LCD_clear();//清屏

LCD_Desk();

_EINT();//使能中断

Flag=1;//标志位先置1

//TB_Init();

TA12PWM(199,Bujin_test[0],Bujin_test[7]);

//P4SEL|=BIT0;

//BCSCTL1&=~XT2OFF;//打开XT2振荡器

P6OUT=0xef;

while

(1)

{

//P6OUT=Ledwei[Count];

//inti=9;

/*

while(Flag==1)

{

ADC12CTL0|=ADC12SC;//开启转换

ADC12CTL0&=~ADC12SC;//清零

Flag=0;//清零标志位

}

Data_do(width[1]);//处理ADC值,用于显示,数字量

Voltage_do(width[1]);//处理ADC值,用于显示,模拟电压值

for(i=0;i<15;i++)

{

LCD_DisplayADC();//显示ADC的数据,ADC数字量

LCD_DisplayVoltage();//显示ADC的电压值

}

*/

}

//}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2