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

📄 adc-12.c

📁 基于8位并行AD和12位串行AD的数字直流电压表
💻 C
字号:
#include"reg51.h"
#include"intrins.h"
#define uchar unsigned char 
#define uint unsigned int
#define nop() _nop_()
#define WEI P2
#define DUAN P0

code uchar display[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f };
data uchar Disp_Data[6]={0,0,0,0,0,0};
/*************变量定义******************/
uint Con_Data=0;
float Vref=2.5;

/*************函数声明******************/
void delay(uchar j);//
void Data_Process(void);
void led_display(void);
/**************************************/
sbit DOUT=P1^0;
sbit SCLK=P1^1;
sbit CS=P1^2;

/***************************************/
void delay(uchar j)
{	register i;
	while(j--)
	{
		for(i=0;i<125;i++)
		{;}
	}
}
          
/***************************************/
void Re_Data(void)
{
	uchar i;
	CS=0;
	Con_Data=0;
	nop();
	DOUT=1;
	SCLK=0;
	nop();
	SCLK=1;
	nop();
	for(i=0;i<12;i++)
	{	
	    SCLK=0;
		nop();
		SCLK=1;
		Con_Data<<=1;
		if(DOUT)
		 {Con_Data|=0x01;}
	}	
	CS=1;
}
/***************************************/
void Data_Process(void)
{
	float tt;
	uint dispnumber;
	tt=(Con_Data*Vref)/4095.0;
	tt*=1000.0;								  //电压放大1000倍,显示到
    dispnumber=(uint)tt;
	Disp_Data[0]=dispnumber/100000;
	Disp_Data[1]=dispnumber%100000/10000;
	Disp_Data[2]=dispnumber%100000%10000/1000;
	Disp_Data[3]=dispnumber%100000%10000%1000/100;
	Disp_Data[4]=dispnumber%100000%10000%1000%100/10;
	Disp_Data[5]=dispnumber%100000%10000%1000%100%10;

}
/**************************************/
void led_display(void)
{
	uchar i,j,k;
    uchar *p,*q;
	p=&Disp_Data[0];	
	q=display;	
	k=0x20;
		for(i=0;i<6;i++)
		{
			WEI=k;
			j=*(p+i);
			DUAN=*(q+j);
			if(i==2)
			{DUAN|=0x80;}			
			k>>=1;
			delay(1);
		}
}

/**************************************/
void main(void)//主程序
{   
  	while(1)
	{
		Re_Data();
		Data_Process();
		led_display();
	}
 }

⌨️ 快捷键说明

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