您现在的位置: 主页 > MCU > 单片机技术应用 > MSP430学习笔记11-八路ADC采集诺基亚5110液晶显示 -
本文所属标签:
为本文创立个标签吧:

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

来源: 网络用户发布,如有版权联系网管删除 2018-09-07 

[导读]
本程序采用的是八路ADC单次采集的模式,根据配置,在单次的模式下转换完成后ADC12SC会自动复位,因此需要在循环中进行ADC12CTL0 |= ADC12SC;操作,而如果配置成连续采集的模式,只需要在程序开始将ADC1

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

本文引用地址: http://www.21ic.com/app/mcu/201806/764718.htm

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

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

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

  3. 采集模式:多路单次

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

  5. #include

  6. #include"LCD5110.h"

  7. #defineuintunsignedint

  8. #defineucharunsignedchar

  9. unsignedcharad0[]="1:0.0V";

  10. unsignedcharad1[]="2:0.0V";

  11. unsignedcharad2[]="3:0.0V";

  12. unsignedcharad3[]="4:0.0V";

  13. unsignedcharad4[]="5:0.0V";

  14. unsignedcharad5[]="6:0.0V";

  15. unsignedcharad6[]="7:0.0V";

  16. unsignedcharad7[]="8:0.0V";

  17. ucharflag=1;

  18. uinttemp0,temp1,temp2,temp3,temp4,temp5,temp6,temp7;

  19. voidInit_Clk()

  20. {

  21. uchari;

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

  23. do

  24. {

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

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

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

  28. }

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

  30. IFG1&=~OFIFG;

  31. BCSCTL2|=SELM1+SELS;//MCLK8MandSMCLK1M

  32. }

  33. voidInit_ADC()

  34. {

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

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

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

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

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

  40. //设置每个通道的输入端口和参考电压,参考电压默认为AVCC3.3V

  41. ADC12MCTL0=INCH_0;

  42. ADC12MCTL1=INCH_1;

  43. ADC12MCTL2=INCH_2;

  44. ADC12MCTL3=INCH_3;

  45. ADC12MCTL4=INCH_4;

  46. ADC12MCTL5=INCH_5;

  47. ADC12MCTL6=INCH_10;

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

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

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

  51. }

  52. /*******************************************

  53. 函数名称:Trans_val

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

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

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

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

  58. 返回值:无

  59. ********************************************/

  60. voidTrans_val(ucharptr[6],uintHex_Val)

  61. {

  62. unsignedlongcaltmp;

  63. uintCurr_Volt;

  64. caltmp=Hex_Val;

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

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

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

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

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

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

  71. }

  72. voidmain()

  73. {

  74. Init_Clk();

  75. Init_ADC();

  76. WDTCTL=WDTPW+WDTHOLD;

  77. LCD_init();

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

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

  80. P5DIR|=BIT5;

  81. P3OUT|=~BIT5;

  82. while(1)

  83. {

  84. ADC12CTL0|=ADC12SC;

  85. LCD_prints(0,2,ad0);

  86. LCD_prints(8,2,ad1);

  87. LCD_prints(0,3,ad2);

  88. LCD_prints(8,3,ad3);

  89. LCD_prints(0,4,ad4);

  90. LCD_prints(8,4,ad5);

  91. LCD_prints(0,5,ad6);

  92. LCD_prints(8,5,ad7);

  93. }

  94. }

  95. /*******************************************

  96. 函数名称:ADC12ISR

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

  98. 参数:无

  99. 返回值:无

  100. ********************************************/

  101. #pragmavector=ADC_VECTOR

  102. __interruptvoidADC12ISR(void)

  103. {

  104. temp0=ADC12MEM0;

  105. Trans_val(ad0,temp0);

  106. temp1=ADC12MEM1;

  107. Trans_val(ad1,temp1);

  108. temp2=ADC12MEM2;

  109. Trans_val(ad2,temp2);

  110. temp3=ADC12MEM3;

  111. Trans_val(ad3,temp3);

  112. temp4=ADC12MEM4;

  113. Trans_val(ad4,temp4);

  114. temp5=ADC12MEM5;

  115. Trans_val(ad5,temp5);

  116. temp6=ADC12MEM6;

  117. Trans_val(ad6,temp6);

  118. temp7 = ADC12MEM7;



              查看评论 回复



嵌入式交流网主页 > MCU > 单片机技术应用 > MSP430学习笔记11-八路ADC采集诺基亚5110液晶显示 -
 

"MSP430学习笔记11-八路ADC采集诺基亚5110液晶显示 -"的相关文章

网站地图

围观()