专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

ADC0804+LED数码管显示模拟值0~255

作者:佚名   来源:本站原创   点击数:  更新时间:2012年02月10日   【字体:


 

#include<reg52.h>
#define uint unsigned int 
#define uchar unsigned char
sbit rd=P3^7;
sbit wr=P3^6;
sbit cs0=P3^5;
sbit hc=P3^4;
void delay(uint );
void format0804();
void display(uchar aa );
unsigned char code  table1[]=   //共阳段码控制
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; 
unsigned char code   dispbit[8]=
{0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F}; //位选控制   查表的方法控制 
uchar aa,adc0804;
void main()
{  
 //uint adc0804;
 cs0=0;
 P1=0xff;//为P1口读取数据做准备,与P1口相连的某个引脚若为低,则P1相应位被拉低,
 hc=1; //以此来读取数据
 while(1)
 { 
  /*wr=1;
  delay(1);
  wr=0;
  rd=1;
  delay(1);
  wr=1;
  rd=0;
  adc0804=P1;//根据时序DAC0804时序图,只能在些读取其输出值
  delay(1);
  rd=1;
     delay(1); */
  format0804();
  adc0804=P1;   //在rd=0才能读取P1口状态,
  display(adc0804); 
            
 }  
}
void delay(uint z)
{
 uint j;
 for(z;z>0;z--)
  for(j=110;j>0;j--);
}
void format0804()
{
 wr=1;
 //delay(1);
 wr=0;
 wr=1;//根据时序ADC0804时序图,只有wr端存在上升沿就可读取模拟值
 rd=1;
 //delay(1);
 rd=0;   //根据时序ADC0804时序图,只有rd低电平时才能向外发送信号
 //adc0804=P1;
 //delay(1);
 //rd=1;
}  
void display(uchar aa)
{
  uchar ledout[10],i;
  ledout[0]=table1[aa%10000/1000];    //千位
  ledout[1]=table1[aa%1000/100];  //百位带小数点
  ledout[2]=table1[aa%100/10];     //十位
  ledout[3]=table1[aa%10];             //个位
  for(i=0;i<4;i++)
  {
   P2=dispbit[i];//位选 先位选再段选
      P0=ledout[i]; //段码
  delay(1);
  
   }
 
} 
关闭窗口

相关文章