实验原理
使用ARM微处理器内置的AD转换,将电压值转换为数字量后直接输出到串口UART0。
Proteus仿真电路图
image.png
C语言源程序
main.c
#include <LPC21XX.H>
  • #include "uart0.h"
  • typedef unsigned int uint32;
  • void delay(void)  {                        
  •   unsigned volatile long i,j;
  •   for(i=0;i<10000;i++)
  •   for(j=0;j<50;j++)
  •   ;
  • }
  • void adcRead (void) {                     
  •   unsigned int val;
  •   ADCR |= 0x01000000;/* 开始AD转换 */
  •   do {
  •     val = ADDR;/* 读取AD转换数据寄存器 */
  •   } while ((val & 0x80000000) == 0);/* 等待AD转换结束 */
  •   ADCR &= ~0x01000000;/* 结束AD转换 */
  •   val = (val >> 6) & 0x03FF;/* 设置数据格式并且按照16进制输出 */
  •   putstr ("\nAIN0 Result = 0x");         
  •   puthex((val >> 8) & 0x0F);               
  •   puthex((val >> 4) & 0x0F);               
  •   puthex (val & 0x0F);                     
  • }
  • int  main(void)
  •               {
  •               ADCR   = 0x002E0401;/* Setup A/D: 10-bit AIN0 @ 3MHz */
  •               PINSEL0 = 0x20000005;/*引脚选中EINT1功能,开串口UART0*/
  •               PINSEL1 = 0x00000001;/*引脚选中EINT0功能*/
  •               uart0Init();              
  •               while (1)  {              
  •                             adcRead();
  •                             delay();
  •               }  
  • }
  • uart0.c
  • #include <LPC21XX.H>
  • #include "uart0.h"
  • #define CR 0x0D
  • int putchar (int ch)  {/* 向串口输出一个字符 */
  •   if (ch == '\n')  {
  •     while (!(U0LSR & 0x20));
  •     U0THR = CR;
  •   }
  •   while (!(U0LSR & 0x20));
  •   return (U0THR = ch);
  • }
  • void serialPuts(char *p){/* 向串口输出字符串 */
  •   while (*p != '\0'){
  •                 putchar(*p++);
  •   }
  •   putchar('\n');
  • }
  • void uart0Init(void){
  •   U0LCR = 0x83;/* 8位数据,无效验,一个停止位 */
  •   U0DLL = 97;/* VPB 15MHz的时候波特率为9600 */
  •   U0LCR = 0x03;/* DLAB = 0 */
  • }                             
  • void puthex (int hex) {/* Write Hex Digit to Serial Port  */
  •   if (hex > 9) putchar('A' + (hex - 10));
  •   else         putchar('0' +  hex);
  • }
  • void putstr (char *p) {/* Write string */
  •   while (*p) {
  •     putchar(*p++);
  •   }
  • }
  • 复制代码