⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adc0804.c

📁 2、《ADC0804a》实验 1)下载程序 2)数码管默认显示“4.65” 3)通过K3按钮切换板载输入或外部输入
💻 C
字号:
/*****************************************************************/ 
/*                                                               */                                                                
/*名称:                 AD转换+显示程序                         */                                                                                                                                                                           
/*功能:           读取当前输入的转换电压,由数码管显示出来。    */                                                    
/*难度等级:                   中                                */                                                                     
/* 作者:                  zengrenliang                          */
/* 版权:           http://www.51kaifa.com                       */
/*编写日期:        2006.05.19                                   */                                                                                                                                                                                                             
/*****************************************************************/


#include<reg52.h>
#define  uchar  unsigned char

sbit addr0 = P1^4;//系统片选地址线0
sbit addr1 = P1^5;//系统片选地址线1
sbit addr2 = P1^6;//系统片选地址线2
sbit addr3 = P1^7;//系统片选地址线3
sbit led = P1^0;
//行扫描数组
uchar code scan[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//row0--row7
//数码管显示的段码表
uchar code table[18] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,//0,1,2,3,4,5
                       0x82,0xf8,0x80,0x90,0x88,0x83,//6,7,8,9,a,b
                       0xc6,0xa1,0x86,0x8e,0xbf,0xff};//c,d,e,f,-,空格

uchar dispbuf[8]; //显示缓冲区                         

/*****************************延时函数**************************/

void delay (unsigned int us)  
{
  while(us--);
}

/******************************显示+读键*************************/

void ledscan()
{  unsigned char i,dispcode;  

    for(i=0;i<8;i++){
       addr3 = 0;
       addr0 = 0;
       addr1 = 1;
       addr2 = 0;//开发板上U4(74HC574)的片选地址
       dispcode =table[dispbuf[i]]; //取一行显示数据
       if(i==3)
        P0 = dispcode & 0x7f; 
       else 
        P0 = dispcode;
       addr3 = 1; 
       addr3 = 0;//在U4的11脚(锁存信号)产生上升沿
       P2 = scan[i];//取row0--row7行扫描数据
       delay(50); //延时50us
       }
 }


/*******************0804转换程序********************/
void  ADC0804(void)
{  uchar adc0804value;
   float voltage,decimal;
   unsigned int intvolt,tofloat;
   led = ~led;
   addr0 = 1;
   addr1 = 1;
   addr2 = 0;//输出AD0804片选地址。
   addr3 = 1;
   P0 = 0xff;//向ADC0804发任何数据,0804开始转换
   WR = 0;
   WR = 1;
   addr3 = 0;
   delay(100);//等待转换完成
   addr3 = 1;
   RD = 0;
   adc0804value=P0;//读取转换后的值
   RD = 1;
   addr3 = 0;
   voltage = adc0804value;
   voltage = voltage * 0.0391;//将二进制字节数据变成实际电压值   10/256 = 0.0196
   intvolt = voltage;//取整数部分
   tofloat = intvolt; 
   decimal = voltage - tofloat;//取小数部分
   decimal = decimal * 100;//小数部分取两位
   dispbuf[3] = intvolt % 0x0a;//整数部分个位
   intvolt = decimal;
   dispbuf[5] = intvolt % 0x0a;//小数部分低位
   intvolt = intvolt / 0x0a;
   dispbuf[4] = intvolt % 0x0a;//小数部分高位 
}


/*******************************主函数***********************/

main()
{ uchar i;   
  for(i=0;i<8;i++)
   dispbuf[i] = 17;
  while(1){
   for(i=0;i<10;i++)
     ledscan(); //显示,读键扫描 
   ADC0804();
  }
}

/********************************结束************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -