找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2023|回复: 0
收起左侧

ESK32-360开发板的A/D转换及应用

[复制链接]
ID:776997 发表于 2020-8-12 10:49 | 显示全部楼层 |阅读模式
1. A/D采集
在例程中提供A/D采集功能,它是通过采集外接的电位器来模拟电位变化,进而来获得数据的变化。此外,它通过串口通信来输出采集结果。
                              
1.jpg
图1 电位器调节电位
经编译下载,程序的运行效果如图2所示。
2.jpg
图2 调整前的数据显示
为了改善观察效果,特添加了延时函数,修改后程序内容为:
  1. void mdelay(unsigned int z)
  2. {
  3.          unsigned int x,y;
  4.          for(x=z;x>0;x--)
  5.                    for(y=100;y>0;y--);
  6. }
复制代码

  1. int main(void)
  2. {
  3.   RETARGET_Configuration();
  4.   ADC_Configuration();
  5.   ADC_Cmd(HT_ADC0, ENABLE);
  6.   ADC_SoftwareStartConvCmd(HT_ADC0, ENABLE);

  7.   while (1)
  8.   {
  9.     if (gADC_SingleEndOfConversion)
  10.     {
  11.       printf("\rPotentiometer level is %04d \r\n", (int)gPotentiometerLevel);  //115200
  12.     }
  13.     mdelay(100);
  14.   }
  15. }
复制代码

修改后的运行效果如图3所示,这样数据的变化就很便于观察了。
3.jpg
3 调整后的数据显示
2.数据显示
前面为数据的显示,已经增添了数值显示函数,此时就可以排上用场了,实现图4显示效果的主程序如下:
  1. int main(void)
  2. {
  3.   RETARGET_Configuration();
  4.   ADC_Configuration();
  5.   ADC_Cmd(HT_ADC0, ENABLE);
  6.   ADC_SoftwareStartConvCmd(HT_ADC0, ENABLE);

  7.   LCD_Init();
  8.   LCD_Config();
  9.   LCD_Clear(0x2c5c);
  10.   LCD_BackColorSet(0x2c5c)
  11.   LCD_TextColorSet(Yellow);
  12.   LCD_StringLineDisplay(Line9, "     ADC=");
  13.   while (1)
  14.   {
  15.     if (gADC_SingleEndOfConversion)
  16.     {
  17.        LCD_ShowNum(Line9,180,adc,4);
  18.     }
  19.     mdelay(100);
  20.   }
  21. }
复制代码
4.jpg
4 采集数据显示
3.波形绘制
为了能更直观地观察数据的变化趋势,绘制数据的波形曲线是一种有效的方法。
在利用前面完成的画线函数和区域填充函数的检测上,实现图5所示效果的主程序如下:
  1. int main(void)
  2. {
  3.   int adc,p,q,t,l,k;

  4.   RETARGET_Configuration();
  5.   ADC_Configuration();
  6.   ADC_Cmd(HT_ADC0, ENABLE);
  7.   ADC_SoftwareStartConvCmd(HT_ADC0, ENABLE);

  8.   LCD_Init();
  9.   LCD_Config();
  10.   LCD_Clear(0x2c5c);
  11.   LCD_BackColorSet(0x2c5c);
  12.   LCD_TextColorSet(Yellow);
  13.   LCD_RectDraw(10, 10, 200, 300);
  14.   LCD_DrawLine(105,12 , 105,308 ,Red);
  15.   LCD_DrawLine(10,25 , 210,25 ,Red);
  16.   LCD_StringLineDisplay(Line9, "  n=     adc=");
  17.   mdelay(50000);

  18.   for(t=0;t<60;t++)
  19.   {
  20.          l=t*5+10;
  21.          LCD_DrawLine(210,l,214,l,Yellow);
  22.   }
  23.         
  24.   for(t=0;t<10;t++)
  25.   {
  26.          l=t*21;   
  27.          LCD_DrawLine(210-l,6,210-l,10,Yellow);
  28.   }
  29.   t=10;
  30.   l=15;
  31.   q=210;
  32.   p=210;
  33.   k=21;
  34.   while (1)
  35.   {
  36.     mdelay(50000);
  37.     if(gADC_SingleEndOfConversion)
  38.     {
  39.                    adc=(int)gPotentiometerLevel;
  40.                    LCD_ShowNum(Line9,220,adc,4);
  41.                    p=adc/21;
  42.                    l=t+5;
  43.                    LCD_ShowNum(Line9,60,t/5-1,3);
  44.                    LCD_DrawLine(q,t,p,l,Yellow);
  45.                    t=l;
  46.                    q=p;
  47.       
  48.                    if(t>=305)
  49.                    {
  50.                       LCD_fill(11,11,199,297,0x2c5c);
  51.                       LCD_DrawLine(105,12 , 105,308 ,Red);
  52.                       LCD_DrawLine(10,25 , 210,25 ,Red);
  53.                        t=10;
  54.                       l=15;
  55.                       q=210;
  56.                    }
  57.     }
  58.   }
  59. }
复制代码
5.jpg
5 波形曲线绘制

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表