ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:17.34KB ,
资源ID:15837744      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-15837744.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于MSP430高效LED驱动程序部分精编.docx)为本站会员(b****6)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

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

1、基于MSP430高效LED驱动程序部分精编/*/ 基于tps61040的led/*#include msp430x14x.h#include BoardConfig.h #include 1602.c#define keyin (P1IN & 0x0f)#define N 10/*/端口的初始化/*void Port_Init() P1SEL = BIT6 + BIT7; P1DIR = BIT6 + BIT7; P1IES = BIT0 + BIT1 + BIT2 + BIT3; P1IE = BIT0 + BIT1 + BIT2 + BIT3; P2DIR = BIT0; P2OUT =

2、0x7e; /P6IN = BIT0; P6DIR = 0xfe; P6OUT = 0xfe;/*/变量定义/*uint Results32;uint Average;static uchar Flag=0; /标志变量uint TEMP=0; /ADC值暂存变量 uint temp,A1,A2,A3,A4,A5,A6,A7; /定义的变量,显示数据处理volatile uint Count=0,a=0,b=0; / 步进计数int BujinN = 29,27,25,21,19,17,15,11,9; int Bujin_test30 = 23,67,110,149,186,200,24;/

3、 步进3mA /uint LedweiN = 0xff,0xfd,0xf9,0xf1,0xe1,0xc1,0x80,0x01;int Bujin130 = 23,37,52,67,81,94,108,122,136,149,160,173,187;unsigned int width10=0,0,0,0,0,0,0,0,0,0;/ TB 使用unsigned int i=0; /TB 使用/*/延时去抖/*void delay( uint t) /延时 while (t-);/*void delay_key(void) /按键去抖延时 uint tmp; uchar i; for(i = 7;

4、 i 0; i-) for(tmp = 12000;tmp 0;tmp-); */ TB 初始化void TB_Init(void) P4SEL|=BIT0; BCSCTL1&=XT2OFF; do IFG1 &= OFIFG; for (i=256;i0;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_

5、2; _EINT(); /*/TA12/*void TA12PWM(uint TA0,uint TA1,uint TA2) /TA12控制函数 TACTL |= MC_1 + TASSEL_1; TACCTL1 = OUTMOD_7; TACCTL2 = OUTMOD_7; TACCR0 = TA0; TACCR1 = TA1; TACCR2 = TA2; /*/ AD采样显示/*void LCD_DisplayADC() LCD_write_char(0x0b,0,0x30+A1); LCD_write_char(0x0c,0,0x30+A2); LCD_write_char(0x0d,0,

6、0x30+A3); LCD_write_char(0x0e,0,0X30+A4);void LCD_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);/*/ 数字量显示处理函数/*void Data_do(uint temp_d) uint temp_1,temp_2; A1=temp_d/1000; /分出千,百,十,

7、和个位 temp_1=temp_d%1000; A2=temp_1/100; temp_2=temp_1%100; A3=temp_2/10; A4=temp_2%10;/*/ 电压数据显示处理函数/*void Voltage_do(uint temp_d) uint temp_1,temp_2; ulong temp_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

8、=temp_1/10; temp_2=temp_1%10; A7=temp_2;/*/ ADC初始化程序,用于配置ADC相关寄存器/*void ADC_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; /中断允许 A

9、DC12CTL0|= ENC; /使能转换器/*/按键中断执行函数/*void P10_key(void) Count +; TA12PWM(199,Bujin_testCount,Bujin_testCount); if(Count = 6) Count = 0; P6OUT = 0xef; /if(Count = 4) /P16DIR = 0x /TACCR0 = 65; /32.768 500KHZ / P6OUT = LedweiCount;void P11_key(void) a +; TA12PWM(199,Bujina,BujinCount); if(a=3) P6OUT = 0

10、xff; if(a =6) P6OUT = 0xef; /TACCR0 = 65; /32.768 500KHZ / P6OUT = LedweiCount;void P12_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(10

11、00); 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); void P13_key(void) b +; TA12PWM(199,Bujin1b,Bujin1Count); /*/ADC中断服务程序/*/*#prag

12、ma vector=ADC_VECTOR_interrupt void ADC12ISR(void) uchar j; while(ADC12CTL1&0x01)=1); /如果ADC忙,则等待,否则读取ADC转换数值 Flag = 1 ; TEMP = ADC12MEM0; /读取ADC转换值 Data_do(TEMP); /处理ADC值,用于显示,数字量 Voltage_do(TEMP); /处理ADC值,用于显示,模拟电压值 for(j=0;j15;j+) LCD_DisplayADC(); /显示ADC的数据,ADC数字量 LCD_DisplayVoltage(); /显示ADC的电压

13、值 */*#pragma vector=ADC_VECTOR_interrupt void ADC12ISR (void) static uchar index = 0; uchar i; Resultsindex+ = ADC12MEM0; / Move results, IFG is cleared if(index = 31) /uchar i; Average = 0; for(i = 0; i = 5; /除以32求平均值 index = 0; _BIC_SR_IRQ(LPM0_bits); / Clear LPM0 Data_do(width1); /处理ADC值,用于显示,数字量

14、 Voltage_do(width1); /处理ADC值,用于显示,模拟电压值 for(i=0; i15; i+) LCD_DisplayADC(); /显示ADC的数据,ADC数字量 LCD_DisplayVoltage(); /显示ADC的电压值 */*/P1中断服务函数/*#pragma vector=PORT1_VECTOR /p1中断_interrupt void PORT1_ISR(void) /volatile uint Count = 1; if(P1IFG & 0x0f) switch(P1IFG) case 0x01: if(keyin = 0x0e) delay_ms(7

15、); if(keyin = 0x0e) / while(keyin != 0x0f); P10_key(); / TA12PWM(199,89,199); / delay_ms(2000); P1IFG = 0; return; case 0x02: if(keyin = 0x0d) delay_ms(7); if(keyin = 0x0d) /while(keyin != 0x0f); P11_key(); /TA12PWM(199,159,199); / delay_ms(2000); P1IFG = 0; return; case 0x04: if(keyin = 0x0b) delay

16、_ms(7); if(keyin = 0x0b) / while(keyin != 0x0f); P12_key(); / delay_ms(2000); P1IFG = 0; return; case 0x08: 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;/*/定时器

17、TB的CCR0的中断:用于检测脉冲上升与下降沿#pragma vector=TIMERB0_VECTOR_interrupt void TimerB0(void) if(TBCCTL0&CM1) TBCTL|=TBCLR; TBCCTL0 = (TBCCTL0&(CM1)|CM0; else if(TBCCTL0&CM0) widthi+ = TBCCR0; TBCCTL0 = (TBCCTL0&(CM0)|CM1; if (i=10) i=0; */*/main主程序/*void main(void) WDT_Init(); /看门狗初始化 Clock_Init(); /时钟初始化 Port

18、_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_test0,Bujin_test7); /P4SEL|=BIT0; /BCSCTL1&=XT2OFF; /打开XT2振荡器 P6OUT = 0xef; while(1) / P6OUT = LedweiCount; / int i=9; /* while(Flag=1) ADC12CTL0 |= ADC12SC; /开启转换 ADC12CTL0 &= ADC12SC; /清零 Flag=0; /清零标志位 Data_do(width1); /处理ADC值,用于显示,数字量 Voltage_do(width1); /处理ADC值,用于显示,模拟电压值 for(i=0; i15; i+) LCD_DisplayADC(); /显示ADC的数据,ADC数字量 LCD_DisplayVoltage(); /显示ADC的电压值 */ /

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

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