当前位置:首页 > 单片机 > 单片机
[导读] 本程序采用的是八路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;

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

液晶显示器(Liquid Crystal Display,简称LCD)作为一种广泛应用于电视、电脑显示器、手机以及各类电子产品的显示技术,其发展历程与科技创新紧密相连。LCD技术以其独特的构造和工作原理,在过去的几十年里...

关键字: LCD 液晶显示

在电子显示技术领域,液晶显示(LCD)因其低功耗、高清晰度和长寿命等优点被广泛应用于各种设备中。为了驱动LCD,需要使用专门的接口技术来传输图像数据。其中,低压差分信号(LVDS)和迷你低压差分信号(MiniLVDS)是...

关键字: 电子显示 液晶显示 低压差分信号

摘 要 :基于 STC89C52RC 单片机的智能电子秤的设计分为三大板块,即硬件排版、布局设计,软件编写、下载、调试及产品焊接。基于单片机的智能电子秤是以 STC89C52RC 单片机为核心的控制系统,单片机内下载软件...

关键字: 单片机 电子秤 传感器 HX711 模数转换 液晶显示

摘 要 :以 STC89C52 单片机为温度测控系统的核心,利用 AD590 温度传感器将温度信号转换成电信号,然后经信号差分放大电路和A/D 转换电路将其对应的数字信号输入单片机,单片机计算出温度传感器对应的温度值后,...

关键字: 单片机 温度传感器 放大电路 A/D 转换电路 液晶显示 报警电路 串口通信

摘 要 :随着电子行业的快速发展,电子产品与人们的日常生活密不可分。与此同时,对电子测量技术的精确度、便捷性的要求也逐步提高。文中以 STM32 单片机为核心控制器,采用功率放大、非接触式电流获取、电流信号幅值检测分析、...

关键字: STM32 单片机 功率放大 非接触式电流 幅值检测 频率检测 液晶显示

摘要:介绍了以DSP芯片TMS320F2812为CPU的有源电力滤波器中液晶模块JLX12864G-139的应用设计方法,详细说明了DSP芯片与液晶模块的硬件接口电路设计,通过分析液晶模块的读写时序,阐述了在TMS320...

关键字: TMS320F2812 JLX12864G-139 液晶显示 接口

摘 要:MSP430单片机是TI公司于1996年推向市场的一款超低功耗16位微控制器,其最显著的特点是超低的功耗以及丰富的片上外设资源,方便高效的开发环境可应用于模拟信号的采集传感系统。文中设计了一种基于MSP430F4...

关键字: 单片机 低功耗 无线传输 液晶显示

在单片机系统设计中,LCM(液晶显示模块)人机交互界面的设计往往是很重要的一个环节。LCM可以用于智能仪器上的显示设定参数、状态提示符、检测结果和待输入参数等功能。

关键字: 单片机 C8051F020 液晶显示

系统设计师通常侧重于为应用选择最合适的数据转换器,在向数据转换器提供输入的时钟发生器件的选择上往往少有考虑。然而,如果不慎重考虑时钟发生器、相位噪声和抖动性能,数据转换器、动态范围和线性度性能可能受到严重的影响。

关键字: 时钟发生器 adc

专注于引入新品并提供海量库存的电子元器件分销商贸泽电子 (Mouser Electronics) 即日起开始备货TI TLV915x运算放大器和ADS7128 12位模数转换器 (ADC)。

关键字: 贸泽 adc 模数转换器
关闭
关闭