MC9S12:AD采集显示实验

举报
JeckXu666 发表于 2022/01/15 01:51:22 2022/01/15
【摘要】 目录 MC9S12:AD采集显示实验一、 实验题目二、 实验内容三、 实验原理图四、 具体设计4.1 软件流程图4.2 程序代码 MC9S12:AD采集显示实验 一、 实验题目 ...

MC9S12:AD采集显示实验

一、 实验题目

单通道连续采样-12 位模式

二、 实验内容

用 S12 的 AD 模块的 0 通道将一路模拟电平转换成数字量,使用 12 位分辨率,将转换后的数字量送数码管显示

三、 实验原理图

请添加图片描述

四、 具体设计

4.1 软件流程图

程序首先初始化各个外设,然后进入死循环,等待ADC采集完成后,将数值显示在数码管上

img

4.2 程序代码

端口定义代码:定义端口A和端口H为输出方向,并清零

void Port_init(void) 
{ 
    DDRA = 0xFF;                                                    
    DDRH = 0xFF;                                                    
    PORTA = 0x00;                                                  
    PTH = 0x00;  
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

数码管显示代码:传入一个4位数的无符号整形,依次在数码管上打印出来

void Set_Show(unsigned int num) 
{
    unsigned char SM_SBUFF[4],i=0;                                     //用户缓冲显示内容
    unsigned char led_dig=0;
    SM_SBUFF[3] =  num/1000;                                
    SM_SBUFF[2] =  num%1000/100;
    SM_SBUFF[1] =  num%100/10;
    SM_SBUFF[0] =  num%10;
    
    led_dig = 0x01;                                                //显示转换结果
    for(i=0;i<4;i++) 
    {
       PORTA = g_LED_Seg_Table[SM_SBUFF[i]];
       PTH = led_dig;
       led_dig = led_dig<<1;
       Delay(1); 
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

延时函数代码:传入一个延时数目,用for循环死延时一段时间

void Delay(unsigned int loop_times)
{
    unsigned int loop_i,loop_j;
    
    for (loop_i=0; loop_i<loop_times; loop_i++) 
    {
        for (loop_j=0; loop_j<4000;loop_j++) 
        {
            ;
        }
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

ADC初始化代码:

void ADC_Init(void)        
{
    ATD0DIEN = 0;          
    ATD0CTL1 = 0x40;      
    ATD0CTL2 = 0x40;     
    ATD0CTL3 = 0x88;    
    ATD0CTL4 = 0x03;    
    ATD0CTL5 = 0x20;  
} 

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

主循环代码:

void main(void)
{
  /* put your own code here */
  
     unsigned int value;                                                                                       

     SetBusCLK_32M();                                                  
     ADC_Init();                                                      
     Port_init();
     for(;;)
     {
        
         while(!ATD0STAT2L_CCF0)           
         {
            ;
         }                                                                
                    
         value = ATD0DR0;                                     
         Set_Show(value);                                                                

    } /* wait forever */
  
  /* please make sure that you never leave this function */
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

文章来源: blog.csdn.net,作者:JeckXu666,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq_45396672/article/details/121377397

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。