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

📄 adc0832.c

📁 单片机c语言 用于DY500或同类型的开发板
💻 C
字号:
#include<reg52.h>//包含相应的头文件

#include<stdio.h>
#include<intrins.h>


sbit CS=P3^4;//定义数模转换器硬件对应引脚
sbit CLK=P3^5;
sbit DO=P3^6;
sbit DI=P3^7;

bit ADFlag;

unsigned char code DIS[]={0xfd,0xfb,0xf7};  //定义数码管位码
unsigned char code Datatab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//7段数码管段码表
data unsigned char  Display[3];//定义临时存放数码管数值

void Init_Timer1(void)
{
 TMOD |= 0x10;			     
 TH1=0xff;	              	/* Init value */
 TL1=0x00;
 //PT1=1;                   /* 优先级    */
 EA=1;                      /* interupt enable */
 ET1=1;                     /* enable timer1 interrupt */
 TR1=1;  
}

unsigned char ReadADC(unsigned char channel)
{
 unsigned char i,j;
 unsigned char Temp=0;
 channel <<=3;                
 channel |=3;
     CS =0;                  //按照资料进行时序操作
 for(i=0;i<3;i++)            //输入指令,包含通道选择
    {
     CLK=0;
	 _nop_();
     DI=channel;
     channel>>=1;
     _nop_();
     CLK=1; 
     DI=0;
   }   
   CLK=0;
    _nop_();
   CLK=1;
for(j=0;j<8;j++)   //处理读入8位数据
   {
    CLK=0;
	_nop_();
    Temp=(Temp<<1)|DO;
   _nop_();
    CLK=1;
    }
  CS=1;
return(Temp); //返回转换值

}


void Timer1_isr(void) interrupt 3 using 1//定时器1执行数码管动态扫描
{

 static unsigned char count,j;
 TH1=0xfb;		/* Init value */
 TL1=0x00;
 j++;
 if(j==200) {j=0;ADFlag=1;}
 P0=Display[count];
 P2=DIS[count];
 count++;
 if(count==3)
 count=0;

 
}

main()
{
 unsigned char ADtemp;//定义中间变量
// unsigned char temp;
 Init_Timer1();


		while(1)
		{
		 if(ADFlag)      //定时采集输入模拟量
           {
   
   		ADFlag=0;
   		ADtemp=ReadADC(0);
		Display[0]=Datatab[((ADtemp-5)/50)]&0x7f;//处理电压显示
  		Display[1]=Datatab[((ADtemp-5)%50)/10];
  		Display[2]=Datatab[((ADtemp-5)%50)%10];
		   }
		}
}

⌨️ 快捷键说明

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