编程实现利用STC15单片机ADC通道3采集外部模拟电压信号,8位精度,采用中断方式循环进行转换,并将转换结果送两位数码管显示。请画出接口电路示意图,并编程实现该功能。
时间: 2024-03-25 07:36:13 浏览: 219
接口电路示意图:
![STC15单片机ADC采集电路](https://img-blog.csdn.net/20180406203806877)
其中,VCC和GND分别接单片机的电源和地,ADC3接待转换的模拟电压信号。两位数码管的接口电路可以参考具体型号的数码管数据手册。
编程实现代码如下:
```c
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
sbit D1 = P2^0; // 数码管1的选择位
sbit D2 = P2^1; // 数码管2的选择位
sbit AIN3 = P1^3; // ADC3输入口
uchar code LED_DuanMa[17] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71, 0x00};
uchar ADC_Result; // ADC转换结果
void Delay10us() { // 延时10us
uchar i;
for(i=0; i<5; i++);
}
void Delay1ms() { // 延时1ms
uint i, j;
for(i=0; i<10; i++)
for(j=0; j<120; j++);
}
void ADC_Init() { // ADC初始化
P1ASF = 0x08; // 将P1.3设为模拟输入
ADC_RES = 0; // 清零ADC转换结果
ADC_CONTR = 0x80; // 开启ADC,系统时钟/2作为ADC时钟,选择ADC3作为输入通道
}
uchar ADC_GetValue() { // 获取ADC转换结果
uchar adcvalue;
ADC_CONTR = ADC_CONTR | 0x08; // 开始ADC转换
while(!(ADC_CONTR & 0x10)); // 等待转换完成
ADC_CONTR = ADC_CONTR & ~0x10; // 清除转换完成标志
adcvalue = ADC_RES; // 读取ADC转换结果
return adcvalue;
}
void Display(uchar num) { // 数码管显示函数
P0 = LED_DuanMa[num];
Delay10us();
}
void main() {
uchar i = 0;
ADC_Init(); // ADC初始化
while(1) {
ADC_Result = ADC_GetValue(); // 获取ADC转换结果
Display(ADC_Result / 10); // 显示十位数
D1 = 0; // 选择数码管1
Delay1ms();
D1 = 1; // 取消选择
Display(ADC_Result % 10); // 显示个位数
D2 = 0; // 选择数码管2
Delay1ms();
D2 = 1; // 取消选择
}
}
```
注:以上代码仅供参考,具体实现需要根据实际情况进行调整。
阅读全文