MC9S12:AD采集显示实验
【摘要】
目录
MC9S12:AD采集显示实验一、 实验题目二、 实验内容三、 实验原理图四、 具体设计4.1 软件流程图4.2 程序代码
MC9S12:AD采集显示实验
一、 实验题目 ...
MC9S12:AD采集显示实验
一、 实验题目
单通道连续采样-12 位模式
二、 实验内容
用 S12 的 AD 模块的 0 通道将一路模拟电平转换成数字量,使用 12 位分辨率,将转换后的数字量送数码管显示
三、 实验原理图
四、 具体设计
4.1 软件流程图
程序首先初始化各个外设,然后进入死循环,等待ADC采集完成后,将数值显示在数码管上
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)