使用AT89C51作为主控芯片,将ADC0808作为模数转换接到主控芯片的AD0-AD7接口,同时将74LS373作为地址锁存器接入主控芯片的AD0接口至AD7接口,将8255A作为I/O扩展口接入主控芯片的AD0到AD7,在I/O扩展口的PA0到PB7接口每四位接入一个74LS240用来连接一个显示八位的数码管,请你基于上述连接方式写出数字电压表的仿真代码实现ADC0808电压输入在数码管显示出来
时间: 2024-02-29 14:52:44 浏览: 145
一款由89C51与ADC0832组成的数码电压表
好的,这个问题涉及到硬件的连接和程序的编写,下面我来为您解答。
硬件连接:
将AT89C51单片机的AD0~AD7接口分别连接到ADC0808的D0~D7引脚上,将ADC0808的OUT引脚连接到AT89C51单片机的P2.0引脚上,将74ls373的输出引脚(Q0~Q7)分别连接到8255A的D0~D7引脚上,将8255A的PA0~PA7引脚分别连接到74LS240的A0~A7引脚上,将8255A的PB0~PB7引脚分别连接到74LS240的B0~B7引脚上,将74LS240的Y0~Y7引脚分别连接到数码管的a~h引脚上。
程序编写:
下面提供一个 C 语言的仿真代码,仅供参考。这里使用的是 Keil C 51 编译器。
```c
#include <reg51.h>
sbit OE = P3^7; // 74LS240输出使能引脚
sbit LE = P3^6; // 74LS240锁存器使能引脚
void delay(int t) // 延时函数
{
int i, j;
for (i = 0; i < t; i++)
for (j = 0; j < 120; j++);
}
void init_adc0808() // 初始化 ADC0808
{
P2 = 0x00; // ADC0808的OUT引脚连接到P2.0
P1 = 0x00; // 设置P1口为输出
P3 = 0xFF; // 禁用74LS240输出,禁用74LS240锁存器
}
unsigned char read_adc0808(unsigned char ch) // 读取 ADC0808 的转换结果
{
P1 = ch; // 设置 ADC0808 的转换通道
P2 = 0x01; // 启动 ADC0808 的转换
delay(5); // 等待转换完成
P2 = 0x00; // 停止转换
return P2; // 返回转换结果
}
void write_8255A(unsigned char port, unsigned char data) // 输出数据到 8255A
{
P0 = data; // 设置输出数据
P2 = port; // 设置输出端口
P3 = 0x00; // 使能输出
P3 = 0xFF; // 禁用输出
}
void write_74LS240(unsigned char data) // 输出数据到 74LS240
{
LE = 0; // 禁用锁存器
P0 = data; // 设置输出数据
OE = 0; // 使能输出
OE = 1; // 禁用输出
LE = 1; // 启用锁存器
}
void main()
{
unsigned char ch; // 转换通道
unsigned char data; // 转换结果
unsigned char high; // 转换结果的高位
unsigned char low; // 转换结果的低位
unsigned int value; // 转换结果的整数值
init_adc0808(); // 初始化 ADC0808
while (1)
{
ch = 0; // 选择转换通道为 0
data = read_adc0808(ch); // 读取转换结果
high = data / 10; // 计算转换结果的高位
low = data % 10; // 计算转换结果的低位
value = data * 5; // 计算转换结果的整数值
write_8255A(0x00, high); // 输出高位到 8255A 的 PA0~PA3
write_8255A(0x01, low); // 输出低位到 8255A 的 PA4~PA7
write_8255A(0x02, value >> 8); // 输出整数值的高位到 8255A 的 PB0~PB3
write_8255A(0x03, value & 0xFF); // 输出整数值的低位到 8255A 的 PB4~PB7
write_74LS240(P1); // 输出数据到 74LS240
delay(100); // 延时,控制显示速度
}
}
```
以上就是一个简单的数字电压表仿真代码,您可以根据实际需求进行修改和扩展。需要注意的是,程序中的引脚和延时参数都需要根据具体硬件连接情况进行调整。
阅读全文