微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > (新人求助)ADC0809模拟输入转换并用数码管显示

(新人求助)ADC0809模拟输入转换并用数码管显示

时间:10-02 整理:3721RD 点击:
#include <reg52.h>
#define unchar unsigned char
#define uint unsigned int
uchar ge,shi,bai,temp;
sbit wx=P2^7; //位选锁存端
sbit dx=P2^6;//段选锁存端
sbit OE=P2^5;
sbit EOC=P2^4;
sbit C=P2^3;
sbit B=P2^2;
sbit A=P2^1;
sbit ST=P2^0;
uchar code TB1[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};//段码
uchar code TB2[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位码
void init();
void star_read();
void display();
/********延时约1MS*/
void delay1ms(uint z)
{
  uint x,y;
  for(x=z;x>0;x--)
  for(y=120;y>0;y--);
}
void main()
{
  init();
  while(1)
{
   star_read();
   display();
}
}
/********ADC0809初始化*/
void init()
{
  ST=0;      //初始化ADC0809 选中模拟通道IN0
  OE=0;
  C=0;
  B=0;
  A=0;
  P3=0xff;//P3口置1 准备读取转换后的数据
}
/********启动并读取转换数据*/
void star_read()     
{
  ST=1;   
  ST=0;
  delay1ms(10);
  OE=1;  
  temp=P3;
  delay1ms(10);
  OE=0;
}
/********显示*/
void display()
{
  bai=temp/100; //将得到的数分离并显示
  shi=temp%100/10;、//若P3=temp=0x80则对应在数码管显示128。5V的参考电压对应模拟输入2.5V
  shi=temp%100/10;
  ge=temp%10;
  wx=1;
  P1=TB2[0];
  wx=0;
  dx=1;
  P1=TB1[bai];
  dx=0;
  delay1ms(5)
  wx=1;
  P1=TB2[1];
  wx=0;
  dx=1;
  P1=TB1[shi];
  dx=0;
  delay1ms(5);
  wx=1;
  P1=TB2[2];
  wx=0;
  dx=1;
  P1=TB1[ge];
  dx=0;
  delay1ms(5);
}

电路图在下面 比较乱 我截图可能看起来不方便 麻烦大家帮忙看下。
ADC的时钟我用单片机12M6分频ALE输出后在经过2个串联的74LS74 4分频500K给ADC用

单片机部分


数码管部分


ADC0809部分


ADC时钟


现在的问题是 调电位器 模拟输入该变 但是数码管一直显示的是000 而不是  5V对应255 2,5V对应128 0V对应000

uyvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv回家吧

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top