MSP430学习笔记11-八路ADC采集诺基亚5110液晶显示

发布者:jingyan最新更新时间:2018-04-18 来源: eefocus关键字:MSP430  ADC采集诺  液晶显示 手机看文章 扫描二维码
随时随地手机看文章

本程序采用的是八路ADC单次采集的模式,根据配置,在单次的模式下转换完成后ADC12SC会自动复位,因此需要在循环中进行ADC12CTL0 |= ADC12SC;操作,而如果配置成连续采集的模式,只需要在程序开始将ADC12SC置位一次就可以,但是就需要注意当进入中断后如果不手动禁止中断会一直停留在循环中,因此在采集到需要的数据后需要将ADC关闭或者中断使能禁止才能重新回到主函数,这一点需要注意。

八路单次采集的程序如下:

  1. /*************************************** 

  2. 八路AD多路单次采集基亚5110液晶显示 

  3. 采集模式:多路单次 

  4. ****************************************/  

  5.   

  6. #include   

  7. #include "LCD5110.h"  

  8. #define   uint  unsigned int  

  9. #define   uchar unsigned char  

  10.   

  11. unsigned char ad0[]="1:0.0V";  

  12. unsigned char ad1[]="2:0.0V";  

  13. unsigned char ad2[]="3:0.0V";  

  14. unsigned char ad3[]="4:0.0V";  

  15. unsigned char ad4[]="5:0.0V";  

  16. unsigned char ad5[]="6:0.0V";  

  17. unsigned char ad6[]="7:0.0V";  

  18. unsigned char ad7[]="8:0.0V";  

  19. uchar flag=1;  

  20.   

  21. uint temp0,temp1,temp2,temp3,temp4,temp5,temp6,temp7;  

  22.   

  23. void Init_Clk()  

  24. {  

  25.     uchar i;  

  26.     BCSCTL1&=~XT2OFF;  //打开XT振荡器      

  27.     do  

  28.     {  

  29.         IFG1 &= ~OFIFG;                 //清除振荡错误标志   

  30.         for(i = 0; i < 100; i++)  

  31.       _NOP();           //延时等待  

  32.         }  

  33.     while ((IFG1 & OFIFG) != 0);    //如果标志为1继续循环等待  

  34.     IFG1&=~OFIFG;  

  35.     BCSCTL2|=SELM1+SELS;//MCLK 8M and SMCLK 1M   

  36. }  

  37. void Init_ADC()  

  38. {  

  39.     P6SEL|=0XFF;                                //信号采集端口选择第二功能  

  40.     ADC12CTL0 = ADC12ON+SHT0_8+MSC;             // 打开ADC+设置采样时间  

  41.     ADC12CTL1 = SHP+CONSEQ_1;                   // 使用采样时序电路信号+多路单次模式  

  42.     //上面的寄存器配置采样保持触发源选择时ADC12SC,采集信号使用采样时序电路产生的信号  

  43.     // 转换模式为多路单次复转换 上面的设置必须在ENC=0的情况下设置  

  44.     //设置每个通道的输入端口和参考电压,参考电压默认为AVCC 3.3V  

  45.     ADC12MCTL0 = INCH_0;     

  46.     ADC12MCTL1 = INCH_1;    

  47.     ADC12MCTL2 = INCH_2;    

  48.     ADC12MCTL3 = INCH_3;   

  49.     ADC12MCTL4 = INCH_4;     

  50.     ADC12MCTL5 = INCH_5;    

  51.     ADC12MCTL6 = INCH_10;    

  52.     ADC12MCTL7 = INCH_11+EOS;                    // 最后一个通道  

  53.     ADC12IE = BIT7;                             // 最后一个通道转换完成后使能ADC中断  

  54.     ADC12CTL0 |= ENC;                           // 使能转换   

  55. }  

  56. /******************************************* 

  57. 函数名称:Trans_val 

  58. 功    能:将16进制ADC转换数据变换成三位10进制 

  59.           真实的模拟电压数据,并在液晶上显示 

  60. 参    数:Hex_Val--16进制数据 

  61.           n--变换时的分母等于2的n次方        

  62. 返回值  :无 

  63. ********************************************/  

  64. void Trans_val(uchar ptr[6],uint Hex_Val)  

  65. {  

  66.     unsigned long caltmp;  

  67.     uint Curr_Volt;  

  68.   

  69.     caltmp = Hex_Val;  

  70.     caltmp = (caltmp << 5) + Hex_Val;           //caltmp = Hex_Val * 3  

  71.     Curr_Volt = caltmp >> 12;                   //Curr_Volt = caltmp / 2^n  

  72.     // 参考电压为3.3V,所以计算公式应该为Hex_val*3.3/2^n   

  73.     // 乘除计算通过移位来进行可以有效的提高程序运行效率  

  74.     ptr[2] = (Curr_Volt / 10)+0x30;             //个位  

  75.     ptr[4] = (Curr_Volt % 10)+0x30;             //小数位   

  76.       

  77. }  

  78.   

  79. void main()  

  80. {  

  81.     Init_Clk();  

  82.     Init_ADC();  

  83.     WDTCTL = WDTPW + WDTHOLD;  

  84.     LCD_init();    

  85.     LCD_showsh(0, 0, "电压采集:");  

  86.     _EINT();//开启全局中断  

  87.     P5DIR|=BIT5;  

  88.     P3OUT|=~BIT5;  

  89.     while (1)  

  90.     {  

  91.         ADC12CTL0 |= ADC12SC;   

  92.         LCD_prints(0,2,ad0);  

  93.         LCD_prints(8,2,ad1);  

  94.         LCD_prints(0,3,ad2);  

  95.         LCD_prints(8,3,ad3);  

  96.         LCD_prints(0,4,ad4);  

  97.         LCD_prints(8,4,ad5);  

  98.         LCD_prints(0,5,ad6);  

  99.         LCD_prints(8,5,ad7);         

  100.     }  

  101.       

  102. }  

  103. /******************************************* 

  104. 函数名称:ADC12ISR 

  105. 功    能:ADC中断服务函数 

  106. 参    数:无        

  107. 返回值  :无 

  108. ********************************************/  

  109. #pragma vector=ADC_VECTOR  

  110. __interrupt void ADC12ISR (void)  

  111. {  

  112.     temp0 = ADC12MEM0;  

  113.     Trans_val(ad0,temp0);  

  114.     temp1 = ADC12MEM1;  

  115.     Trans_val(ad1,temp1);  

  116.     temp2 = ADC12MEM2;  

  117.     Trans_val(ad2,temp2);  

  118.     temp3 = ADC12MEM3;  

  119.     Trans_val(ad3,temp3);  

  120.     temp4 = ADC12MEM4;  

  121.     Trans_val(ad4,temp4);  

  122.     temp5 = ADC12MEM5;  

  123.     Trans_val(ad5,temp5);  

  124.     temp6 = ADC12MEM6;  

  125.     Trans_val(ad6,temp6);  

  126.     temp7 = ADC12MEM7;  

  127.     Trans_val(ad7,temp7);  

  128. }  



关键字:MSP430  ADC采集诺  液晶显示 引用地址:MSP430学习笔记11-八路ADC采集诺基亚5110液晶显示

上一篇:stm8下载程序(使用ST-LINK下载器和STVP下载软件)
下一篇:MSP430学习笔记10-ADC采集1602显示

推荐阅读最新更新时间:2024-03-16 16:00

msp430上使用SHT70
属于msp430的串行接口传输数据的应用。SHTxx的串行接口与IIC不兼容,但其软件实现与IIC类似。 使用器件型号:msp430F169/msp430F149,SHT70@SENSIRION AG 典型应用电路: 代码: #include msp430x16x.h #include intrinsics.h #include math.h typedef unsigned int uint; typedef unsigned char uchar; char write_byte(uchar value); char read_byte(uchar ack); void transstart(v
[单片机]
[MSP430DriverLib-2]使用延时让LED闪烁
简单地使用__delay_cycles来达到延时效果。 #include ./DriverLib/driverlib.h int main() { WDT_A_hold( WDT_A_BASE ); // 关闭看门狗 GPIO_setAsOutputPin( GPIO_PORT_P1 , GPIO_PIN0 ); // 配置P1.0为输出模式 GPIO_setOutputLowOnPin( GPIO_PORT_P1 , GPIO_PIN0 ); // 让P1.0输出低电平,熄灭LED while( 1 ){ GPIO_toggleOutputO
[单片机]
基于MSP430单片机高精度温度测量的补偿方法
摘要:用MSP430P315单片机的A/D转换器,实现阻性温度传感器的电阻检测;用查表和线性插值结合的方法,简化标度变换的算法结构。对电池电压的降低进行补偿的同时分析补偿电阻的精度对温度检测的影响。 关键词:单片机 线性插值 补偿 温度检测 引言 长期以来,人们在测量温度时,大部分使用常规的测量方法测量。检测精度要求较高时,调理电路复杂、A/D的位数高,使设计的系统成本居高不,很难普及。随着电子技术的发展,出现了很多功能完备的低功耗、低电压大规模集成电路,为设计便携式高精度测温系统提供了硬件基础。本文介绍的高精度便携式测温仪,使用了非常适合作低功耗便携式测试设备美国TI公司的MSP430P325为控制器,用Pt500铂电阻完
[应用]
MSP430和CC3000的智能手机控制系统
1 系统结构及总体设计 本系统的结构框图如图1所示。系统总共分为5部分,分别是:无线路由器、智能手机、CC3000 Wi—Fi模块、MSP430单片机电路和直流电机驱动电路。首先,智能手机将Wi-Fi连接到无线路由器;接着打开智能手机中的SmartConfig的APP,配置CC3000 Wi—Fi模块,这样CC3000即可连接到无线路由器;然后打开电机控制APP,建立智能手机和CC3000 Wi—Fi模块的连接。其中,CC3000 Wi—Fi模块与MSP430单片机是通过SPI总线进行通信的。最后,可以通过智能手机中的电机控制APP对电机进行无线控制。 2 硬件设计 2.1 CC3000 Wi-Fi模块 系统无线通信部分采
[单片机]
<font color='red'>MSP430</font>和CC3000的智能手机控制系统
MSP430单片机学习
我们为什么要学单片机? 单片机是大专学校电类专业的一门普通课,有些学校甚至把它列为选修课,在众多课程中,没有显出它有多么重要。为什么要学习它呢?电类专业有很多专业课,这些专业课非常重要,是各个专业存在的必需课程,学完这些课程可以使学习者成为大学者的继承人,市场对学者继承人的需求太少,大量需要的是产品的研发者,研发产品是需要干实际事情的,需要研发工具,而单片机课程就是学习研发工具使用的课程。学习单片机课程与理论课程不一样,不能只做作业,而是要实际使用单片机,下面就如何准备学习单片机的条件和学习步骤简述一些不成熟的想法。 1. 硬件 (1)编程硬件 所谓编程就是把单片机运行的程序烧写到单片机的存储器中,目前大部分单片机都是使用FL
[单片机]
基于MSP430单片机的PID参数整定义
  PID控制是最常的控制策略,在工业过程控制中90%以上的控制回路具有PID结构。PID控制之所以被广泛应用主要是因为它算法简单,在实际中容易被理解和实现,而且许多高级控制都以PID控制为基础。但是由于环境的变化,使被控对象具有时变性,参数经过一段时间以后会出现性能欠佳、适应性变差、控制效果下降等情况。因此,寻求参数自动整定技术,以适应复杂工况及高性能指标的控制要求,是实现节能优化控制的重要手段,具有重大的工程实践意义。   1 自整定过程原理   本文主要研究了一种手持式的PID参数整定仪器,此整定仪具有整定单变量和双变量的双重功能,控制系统主要采用低能耗的MSP430微控制器,软件部分采用的软件开发平台是IAR MSP4
[单片机]
基于<font color='red'>MSP430</font>单片机的PID参数整定义
德州仪器推出最新款MSP430超低功耗MCU
随着 USB 连接的普及,设计人员希望获得可为其应用带来众多独特优势的智能化嵌入式处理解决方案,实现如更长的电池使用寿命、更高的便携性以及更丰富的功能等特性。为了向稳健可靠的产品提供简单易用的高级连接,德州仪器 (TI) 日前宣布推出具备嵌入式全速 USB2.0 (12 Mbps) 的新型 MSP430F55xx 微处理器 (MCU) 系列。全新的 F55xx 系列将高性能模拟及其它智能集成外设完美地结合在一起,可实现全球领先的超低功耗。F55xx MCU 无需使用电源线,因而非常适用于包括消费类电子、针对医疗保健和工业等便携式测量在内的低成本应用,以及众多其它应用领域。 MSP430F55x
[单片机]
德州仪器推出最新款<font color='red'>MSP430</font>超低功耗MCU
配备白色LED灯延长寿命,艺卓推出四款医用液晶显示
  艺卓将从2011年11月1日开始陆续推出四款医用图像显示器“RadiForce”新产品。其特点是通过采用白色LED背照灯延长了寿命并降低了功耗,还通过配备人感传感器实现了省电功能等。   此次推出的产品是300万像素(3M)产品和200万像素(2M)产品,两种产品分别有彩色产品和单色产品。画面尺寸为21.3英寸(3M的彩色产品为21.2英寸)。   背照灯未采用现有机型采用的CCFL(冷阴极萤光灯管),而是采用了白色LED。这样,单色产品“5年内完全保证推荐亮度”(艺卓),彩色产品只要5年内产品使用时间控制在2万小时以内,就能够保证推荐亮度。另外,功耗比现有机型减少约21%。   此外,此次的新产品配备有检测使用者是否在
[医疗电子]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved