Proteus仿真实验之 51单片机模数转换

一、实验目的:
实现模拟电压采集,直接数码管显示模数转换器的转换值
二、硬件原理图:
Proteus仿真实验之 51单片机模数转换_第1张图片
三、软件设计:

#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,单片机晶振12MHZ
void 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);//暂留3MS
	A1=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秒开始看)

你可能感兴趣的:(单片机嵌入式)