找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2146|回复: 0
收起左侧

求助我做的八通道电压表怎么了?只显示通道号,不显示电压值!

[复制链接]
ID:102567 发表于 2016-4-7 09:04 | 显示全部楼层 |阅读模式
这是程序
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code dispbitcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar dispbuf[4];
uint i,j,getdata,temp;
uchar k=1;
sbit ST=P2^3;
sbit OE=P2^0;
sbit EOC=P2^2;
sbit adda=P2^4;
sbit addb=P2^5;
sbit addc=P2^6;
sbit seg0=P1^7;
sbit seg1=P3^2;
sbit seg2=P3^3;
sbit seg3=P3^4;
sbit seg4=P3^5;
sbit key1=P3^1;
void Delay(uint i);
void Display();
void key(void);
void key()
{
if(key1==0)
{
Delay(30);//按键消抖
while(key1==0);//判断是否真的消抖
k++;
if(k>=9)
k=1;
}
}
void adc0809()
{
ST=0; // 初始化时
OE=0; //使ST和OE信号全为低电平
ST=1; //ST 为转换启动信号。当ST 上跳沿时,所有内部寄存器清零;
ST=0; // ST下跳沿时,开始进行A/D 转
/*选择通道*/
{
if(k==1)
{
adda=0;
addb=0;
addc=0;
}
if(k==2)
{
adda=1;
addb=0;
addc=0;
}
if(k==3)
{
adda=0;
addb=1;
addc=0;
}
if(k==4)
{
adda=1;
addb=1;
addc=0;
}
if(k==5)
{
adda=0;
addb=0;
addc=1;
}
if(k==6)
{
adda=1;
addb=0;
addc=1;
}
if(k==7)
{
adda=0;
addb=1;
addc=1;
}
if(k==8)
{
adda=1;
addb=1;
addc=1;
}
}

while(EOC==0); //当EOC 为高电平时,表明转换结束
OE=1; //OE=1,输出转换得到的数据
getdata=P0;
OE=0; //输出数据线呈高阻状态
}
void main()
{
while(1)
{
key();
{
adc0809();
temp=getdata*1.0/255*500;
dispbuf[0]=temp%10; //个位数据
dispbuf[1]=temp/10%10; //十位
dispbuf[2]=temp/100; //百位
dispbuf[3]=k;//0809输入端口显示位
Display(); //显示函数
}
}
}
void Delay(uint i)
{
uint j;
for(;i>0;i--)
{
for(j=0;j<125;j++);
}
}
void Display()
{
P1=dispbitcode[dispbuf[3]];//端口显示位+第一管口亮
seg0=0;
seg1=0;
seg2=0;
seg3=0;
seg4=1;
Delay(10);
P1=0xff;
P1=dispbitcode[dispbuf[0]];//个位+第四管口亮
seg1=1;
seg2=0;
seg3=0;
seg4=0;
Delay(10);
P1=0xff;
P1=dispbitcode[dispbuf[1]];//十位+第三管口亮
seg1=0;
seg2=1;
seg3=0;
seg4=0;
Delay(10);
P1=0xff;
P1=dispbitcode[dispbuf[2]];//百位+第二管口亮
seg1=0;
seg2=0;
seg3=1;
seg4=0;
Delay(10);
P1=0xff;

}

这是proteus图

这是proteus图

仿真图

仿真图
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表