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

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

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

  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;

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭