仿真图
器件 | 名称 | 两位数码管 | 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下载
|