微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > ADC0804LCN转换求助

ADC0804LCN转换求助

时间:10-02 整理:3721RD 点击:
刚刚做了一个ADC0804LCN进行数模转换,接线导入程序后调节电位器发现ADC0804LCN的8个输出口一直是0,不知道什么原因。

程序:#include<reg51.h>
#define uchar unsigned char
#define uint  unsigned int
       
uchar code table1[]="0123456789";
uchar code table2[]="DianYa:0.00V";          
uchar code table3[]="made  by  GYS   ";         
uchar num,adval,date;
sbit lcden=P2^2;
sbit lcdrs=P2^0;
sbit lcdrw=P2^1;
sbit lcds1=P3^3;  
sbit lcds2=P3^4        ;
sbit adwr=P3^6;
sbit adrd=P3^7;
sbit adcs=P3^5;
void  delay(uint z)
{
   uint x,y;
   for(x=z;x>0;x--)
   for(y=110;y>0;y--);
}
void  delay_50us(uint t)
{
    uchar j;
    for(;t>0;t--)
    for(j=19;j>0;j--);
}
//LCD写指令
void write_com(uchar com)
{
   lcdrs=0;
   P0=com;
   delay(5);
   lcden=1;
   delay(5);
   lcden=0;
}                                  
//LCD写数据
void write_date(uchar date)
{
   lcdrs=1;
   P0=date;
   delay(5);
   lcden=1;
   delay(5);
   lcden=0;
}
//初始化函数
void init()
{
   adcs=0;
   lcdrw=0;
   lcden=0;
   write_com(0x38);       
   write_com(0x0c);
   write_com(0x06);
   write_com(0x01);         
    write_com(0x80);
  while(table3[num]!='\0')
    {
        write_date(table3[num++]);
        delay(10);                                        //第一排字幕出现的快慢
        }
        lcden=1;
        delay(100);
        lcden=0;
        write_com(0x80+0x40);
        num=0;
        while(table2[num]!='\0')
           {
                    write_date(table2[num++]);
                 
           }
}
//将采集到的数据转换成具体数   
void set_shu(uchar  add,uchar date)
   {
      uchar bai,shi,ge;
      bai=date/51;                                  //ADC0804为8位并行输出,最大二进制为256,实验一5V为例,所以date最大为256时,(转下一行解释)
          shi=((date%51)*10/51);         //应对date求模才能使bai位为5V,shi、ge每次求模后乘10,表示将次低位的值变成高位值来处理。
      ge=((date%51)*10%51)*10/51;
         write_com(0x80+0x40+add);
             {
                 write_date(table1[bai]);
                 }                                                         
         write_com(0x80+0x40+add+2);
             {
                 write_date(table1[shi]);
                 }
          write_com(0x80+0x40+add+3);         
             {
                 write_date(table1[ge]) ;
        }         }
//开启AD采样//
void st_ad()
{
        adcs=0;                   //使能开启
        adwr=0;                  
        delay_50us(5); //延时
        adwr=1;                   //adwr由低电平转高电平即发送采样信号
        delay_50us(10);
        adcs=1;                   //关闭使能
}
//读AD采样数据//
void red_ad()
{
        P1=0xff;
        adcs=0;                   //使能有效
        adrd=0;                   //发送读数据指令(adrd之前未定义,默认高电平,由高变低读数据)
        delay_50us(5);
        adval=P1;           //单片机读取将P1口的数据
        adrd=1;                   //置高结束读取
        adcs=1;                   //关闭使能
        delay_50us(10);//等待
}
void main()
{       
        init();
         while(1)
         {           
           st_ad();                             //启动AD采样
           delay(800);                  //延时100ms等待采样结束
           red_ad();                  //读取AD采样数据
           set_shu(7,adval); //将采到的数据转换成具体数字显示出来
          }
}



已退回1积分

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

网站地图

Top