资讯详情

基于ADC0832的电位器数值显示

文章目录

  • 一、前言
  • 二、芯片介绍
    • 1、ADC0832
    • 2、74HC245
  • 三、硬件连接
  • 四、软件代码
  • 五、效果展示
  • 六、代码链接

一、前言

通过ADC0832根据不同的电压主控芯片计算不同的电位器,并在数字管上显示所得值。电位器有很多种,摇杆电位器可用于遥控汽车、遥控飞机等电子生产。电位器值显示是电位器使用的基础,可以在后期添加和应用多电路。

二、芯片介绍

1、ADC0832

在这里插入图片描述

引脚编号 引脚功能 描述
1 CS- 低电平芯片使能端
2 CH0 模拟信号输入通道0
3 CH1 模拟信号输入通道1
4 GND 低电平(地)
5 D1 选择通道控制数据信号输入
6 D0 数据信号输入,数据输出转换
7 CLK 时钟输入
8 VCC 高电平

2、74HC245

74HC245是一种方向可控的八路缓冲器,主要用于实现数据总线的双向异步通信。 74HC245是兼容TTL高速引脚装置CMOS典型的总线收发器CMOS三态缓冲门电路,八路信号收发器。因为单片机或CPU数据/地址/控制总线端口有一定的负载能力。如果负载超过其负载能力,通常应添加驱动器。74HC245通常添加到主控芯片和外部受控设备的并行接口之间。主要用于大屏幕显示等消费电子产品的增加驱动。

引脚编号 引脚编号 描述
1 DIR 方向控制
2 A0 数据输入/输出
3 A1 数据输入/输出
4 A2 数据输入/输出
5 A3 数据输入/输出
6 A4 数据输入/输出
7 A5 数据输入/输出
8 A6 数据输入/输出
9 A7 数据输入/输出
10 GND 逻辑地
11 B7 数据输入/输出
12 B6 数据输入/输出
13 B5 数据输入/输出
14 B4 数据输入/输出
15 B3 数据输入/输出
16 B2 数据输入/输出
17 B1 数据输入/输出
18 B0 数据输入/输出
19 OE- 输出使能
20 VC 逻辑电源

DIR=1,A-B;DIR=0,B-A;

OE=0导通,OE=1关闭;

三、硬件连接

P3口连接共阴极数码管的段码位;P20、P21、P22、P23为数码管的位选;

P10连接CS-;P11连接CLK;P12连接DIDO;

四、软件代码

main主函数

进行定时器的初始化,ADC0832的初始化,以及数码管段显示的使用。

void main()
{ 
        
    uchar AD1;
	uint vt1;   
	uint while_times = 0;
	
	delayms(300);
	ET0  = 1;
    TR0  = 1;
    ET1  = 1;
    TR1  = 1;
    EA   = 1;     //打开总中断
    CLK = 0;      //ADC0832初始化
    CS   = 1; 
	 
	while(1)
	{ 
        	
	   DigDisplay(); 	
	   AD1 = Get_AD_Result1();
	   vt1=	(500.0/256.0)*AD1;
	   date[0] =smgduan[vt1/100];//千分位
       date[1] =smgduan[vt1/10%10]; //百分位
       date[2] =smgduan[vt1%10];//十分位
       date[3] =smgduan[vt1];//个分位
	}
}

数码管位选函数。

通过switch语句进行位选,P3口为数码管段显示口;数码管显示使用的是数码管动态扫描。

void DigDisplay()
{ 
        
	int i;
	for(i=0;i<8;i++)
	{ 
        
		switch(i)	 //位选,选择点亮的数码管,
		{ 
        
			case(0):
				qian=0;bai=1;shi=1; ge=1;break;//显示第0位
			case(1):
				qian=1;bai=0;shi=1; ge=1;break;//显示第1位
			case(2):
				qian=1;bai=1;shi=0; ge=1;break;//显示第2位
			case(3):
				qian=1;bai=1;shi=1; ge=0;break;//显示第3位
		}
		P3=date[i];//发送段码
		delayms(1); //间隔一段时间扫描 
		P3=0x00;//消隐
	}
}

ADC0832通道选择函数。

该芯片在上篇文章中有进行解释,这里不进行解释了。

uchar Get_AD_Result1()         //包含11个CLK下降沿 
{ 
        
    uchar i, dat;
    CS = 1;              //ADC0832未工作时,CS端为高电平,此时芯片禁用
    CLK =1;                  
    CS = 0;
    DIDO = 1; CLK = 0;  CLK = 1; //SCLK第一个下降沿来到时,DI = 1启动ADC0832
    DIDO = 1; CLK = 0;  CLK = 1;  //SCLK第二个下降沿 
    DIDO = 0; CLK = 0;  CLK = 1; //SCLK第三个下降沿,发送1,0选择通道cho
    DIDO = 1;                                //释放总线
    for(i = 0; i < 8; i++)                  //第4个下降沿到第11个下降沿
    { 
        
        CLK = 0;                           //clk处于下降沿,每一个下降沿DO端输入下一个
        if(DIDO) dat |= 0x01;              // dat = dat | 0x01,dat和0x01做“或”的运算,意思是最低位置1,其它位保持不变。
        CLK = 1;                       //clk处于上升沿
        dat <<= 1;                          //数据左移
    }
    return (dat);
    CS = 1;                                  //ADC0832停止工作
}

delay.c

根据需要进行调用。

/*------------------------------------------------ uS延时函数 ------------------------------------------------*/
void DelayUs2x(unsigned char t)
{ 
           
 while(--t);
}
/*------------------------------------------------ mS延时函数 ------------------------------------------------*/
void delayms(unsigned char t)
{ 
        
     
 while(t--)
 { 
        
     //大致延时1mS
     DelayUs2x(245);
	 DelayUs2x(245);
 }
}

五、效果展示

基于ADC0832的电位器数值显示

六、代码链接

欢迎留言评论分享自己的看法;关注公众号“”回复“”获得代码,如有错误欢迎指正。

标签: ad数模转换电位器ad值p20j3m密封连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司