实验目的:
实现模拟电压采集,直接数码管显示模数转换器的转换值
硬件原理图:
软件设计:
#include "reg51.h"#define u8 unsigned char sbit A0=P2^6;//第一个数码管sbit A1=P2^7;//第二个数码管sbit OP=P2^0;//读写引脚的使能位sbit EOC=P3^3;//AD转换完成信号sbit W=P3^6;//单片机写引脚sbit R=P3^7;//单片机读引脚unsigned char seg[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//上边是共阳极数码管的段码//延时函数,大约延时1ms,单片机晶振12MHZvoid delay_ms(u8 m){u8 i;u8 j;u8 k;for(i=0;i<m;i++){for(j=0;j<10;j++){for(k=0;k<110;k++);}}}//显示函数,数码管显示void xianshi(u8 v){A0=0;//关闭两个数码管A1=0;A0=1;//选中第一个数码管P1=seg[v/16];//发送段码,数值16进制显示,高四位delay_ms(3);//暂留3MS显示A0=0;//关闭数码管A1=1;//打开第二个数码管P1=seg[v%16];//发送段码显示,数值的后4位delay_ms(3);//暂留3MSA1=0;//关闭数码管}// 读取指定A/D转换通道的值u8 ReadAD(u8 m){u8 value;W=0; //单片机写信好拉低P0=m;//发送AD通道地址W=1;//关闭写信好R=0;//读信号拉低value=P0;//读取0808数据R=1;//读信号拉高return value;//返回读到的AD值}void main(){u8 value;OP=0;//使能读写可控制信号线开关while(1){value=ReadAD(0);//读取 通道0 的AD值xianshi(value);//16进制 显示}}
演示视频
Proteus 51单片机模数转换仿真实验(从4:40秒开始看)
下载链接
Proteus仿真实验之 51单片机模数(A/D)转换