AT89C51,74LS373,74ls193,ADC0808数码管4位显示选择通道0测实时0-5V显示实验代码
时间: 2023-09-30 15:10:43 浏览: 194
以下是AT89C51、74LS373、74LS193、ADC0808数码管4位显示选择通道0测实时0-5V显示实验的代码,仅供参考:
```
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit DIO=P1^0;
sbit CLK=P1^1;
sbit CS=P1^2;
sbit OE=P1^3;
sbit A0=P1^4;
sbit A1=P1^5;
sbit A2=P1^6;
sbit A3=P1^7;
sbit LATCH=P2^2;
sbit CLK1=P2^3;
sbit EN=P2^4;
sbit CLR=P2^5;
uint adc; //存放ADC0808采集值
uint value; //存放计算出来的电压值
float voltage; //存放实时电压值
void delay(uint i) //延时函数
{
while(i--);
}
void write_74hc595(uchar dat) //74hc595写数据函数
{
uchar i;
for(i=0;i<8;i++)
{
DIO=dat&0x80; //从高位开始写
CLK=0;
CLK=1;
dat<<=1; //左移一位
}
}
void write_adc0808(uchar cmd) //ADC0808写命令函数
{
uchar i;
OE=1;
CS=0;
for(i=0;i<8;i++)
{
DIO=cmd&0x80; //从高位开始写
CLK=0;
CLK=1;
cmd<<=1; //左移一位
}
OE=0;
}
uchar read_adc0808() //ADC0808读数据函数
{
uchar i,dat;
OE=1;
CS=1;
dat=0;
for(i=0;i<8;i++)
{
CLK=0;
dat<<=1; //左移一位
dat|=DIO; //读数据
CLK=1;
}
OE=0;
return dat;
}
void write_74ls373(uchar dat) //74ls373写数据函数
{
uchar i;
LATCH=0;
for(i=0;i<8;i++)
{
DIO=dat&0x80; //从高位开始写
CLK1=0;
CLK1=1;
dat<<=1; //左移一位
}
LATCH=1;
}
void write_74ls193(uint dat) //74ls193写数据函数
{
uchar i;
EN=0;
CLR=1;
CLR=0;
for(i=0;i<16;i++)
{
A3=i&0x08;
A2=i&0x04;
A1=i&0x02;
A0=i&0x01;
dat<<=1; //左移一位
if(DIO==1)
{
dat|=0x0001; //读数据
}
CLK1=0;
CLK1=1;
}
EN=1;
}
void display(float dat) //数码管显示函数
{
uint a,b,c,d;
a=dat/1000; //千位
b=dat%1000/100; //百位
c=dat%100/10; //十位
d=dat%10; //个位
write_74ls373(0x00); //清空
write_74ls373(1<<a); //千位
delay(1);
write_74ls373(1<<b); //百位
delay(1);
write_74ls373(1<<c); //十位
delay(1);
write_74ls373(1<<d); //个位
delay(1);
}
void main()
{
while(1)
{
write_adc0808(0x88); //选择通道0并启动转换
delay(100);
adc=read_adc0808(); //读取ADC0808采集值
value=adc*5000/255; //计算电压值
voltage=(float)value/1000; //转换为实时电压值
display(voltage); //数码管显示实时电压值
write_74ls193(value); //在74LS193上显示电压值
}
}
```
阅读全文