AD转换实验

仿真图

器件 名称
两位数码管 7SEG-MPX2-CA-BLUE
滑动变阻器

3313J-1-504E

ADC0808数模转换芯片 ADC0808
排阻 RX8
时钟信号 右键-放置-激励源-DCLOCK
电压表 右键-放置-虚拟仪器-VOLTMETER

 用到的部分器件

        其中要注意的是要设置排阻的数值(为了输出电流与数码管额定电流匹配)仿真中任意设置即可。另外要设置时钟信号因为0808时钟周期的典型值为100us,所以我的频率设置为10kHz。

如果报错的话,引脚名称没有冲突,就大概率是数值设置的问题。按照上面说的设置就好啦。

#include<reg52.h>
#include<absacc.h>
#define AD_IN0 XBYTE [0xfef8]//IN0通道的访问地址1111 1110 1111 1000
sbit eoc=P3^2;//A/D转换结束标志定义
void delay(unsigned int time)//延时子函数
{
	unsigned int j=0;
	for(;time>0;time--)
	for(j=0;j<125;j++);
}
void main(void)
{
	char led_mod[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//1~9

	char led_mod1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//1.~9.
	unsigned char a=0;
	unsigned int n=0;
	while(1)
	{	
		AD_IN0 = 0;//启动AD转换,随便写一个书,让WR口有电平变换
		while(eoc==1);//等待转换结束,图中的非门起到了锁存的作用。
		a=AD_IN0;//获取数据
		n=a*10*5/256;//如何显示小数不懂,但是如何显示十位和个位会吧。
                    //十位后面加个小数点就看起来就是小数啦。

	P3=0x18;
		P1=led_mod1[n/10];

		delay(20);
	P3=0x28;//数码管大多不能同时显示两位数字,要交替显示。
		P1=led_mod[n%10];

		delay(20);
		P3=0X08;//最后清零一下,让数字的变化好看点。
	}
}

仿真和程序在下面的网址中:

AD转换实验,把电压表的数显示在数码管上-嵌入式文档类资源-CSDN下载

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>