51单片机day7——AD模数转换控制LED
2025-09-28 来源:bilibili
/***
*AD模数转换控制LED
*顺序:
* 1.数值到517以上第一个LED点亮(12位ADC最大值4095/8余7)
* 2.每增加511点亮一个LED(12位ADC最大值是4095分成8份)
*接口:
* 1.P3^4接XPT2046芯片DIN引脚(输入芯片控制数据)
* 1.P3^5接XPT2046芯片CS引脚(片选)
* 1.P3^6接XPT2046芯片DCLK引脚(时钟)
* 1.P3^7接XPT2046芯片DOUT引脚(数据输出)
* 1.电位器接XPT2046芯片AIN0引脚(模拟端输入)
*原理:
* 1.模拟量输入后和输出电压(VREF/2)对比,若大于则置1否则置0
* 2.对比次数是AD模块的位数
*思路:
* 1.VCC接电位器后经过电位器处理的电流输入到XPT2046芯片的AIN0引脚(模拟端输入)
* 2.由数据手册可知XPT2046芯片想进行数模转换应先将片选拉然后在输入芯片控制数据(控制芯片工作方式)经过延时后将转换后的数值读走(串行输出)
* 2.1 时序:写芯片控制数据是串行输入在时钟的上升沿XPT2046芯片读走数据(串行,8位)在延时一个时钟后XPT2046芯片已串行的方式在低时钟时放入转换后的数值
* 3.读出的数据以最大值(4095)/8(8个LED)进行显示
* 4.调节电位器可控制LED亮起的数量
**/
#include "reg52.h"
#include <intrins.h> //位移的头文件
void fssj(int); //发送数据
int jssj(void); //接收的数据
int kzgc(int); //对发送和接受数据进行控制
void led(int); //返回数据后对LED进行控制
sbit DIN=P3^4; //输入芯片控制数据
sbit CS=P3^5; //片选
sbit DCLK=P3^6; //时钟
sbit DOUT=P3^7; //芯片输出的数据
void main()
{
while(1)
{
led(kzgc(0X94)); //AD模块最后返回的数值输入到led控制函数内
}
}
int kzgc(int fs)
{
int js; //定义一个接收返回数据的变量
CS=0; //拉低片选
fssj(fs); //向芯片发送数据
DCLK=0; //根据时序发送数据后拉低时钟
DCLK=1; //延时一个时钟周期(高)
DCLK=0; //延时一个时钟周期(低)
js=sjjs(); //把数据接收函数内返回的值放到js内
CS=1; //AD转换结束,拉高片选
return js; //返回转换后的数值
}
void fssj(char fs) //发送数据(8位)
{
int i;
DCLK=0; //确保时钟在低电平
for(i=0;i<8;i++) //发送数据8次(8位数据)
{
DIN=fs>>7; //将8位数据的最高位赋值给AD芯片
fs<<=1; //将8位数据左移一位(次高位变成最高位)
DCLK=0; //经过一个时钟周期DIN上的数据在上升沿时读走
DCLK=1;
}
}
int sjjs() //接收AD返回的数据
{
int i,fh=0; //fh:用来接收返回的数据
for(i=0;i<12;i++) //接收12次数据(12位数据)
{
fh<<=1; //将接收数据的变量最低位清零
fh|=DOUT; //将AD芯片返回的1位数据读走
DCLK=1; //经过一次时钟周期AD芯片向DOUT发送新的数据
DCLK=0;
}
return fh; //返回最后的数据
}
void led(int sj) //将返回的数据进行判断后点亮LED(每511点亮一个数据)
{
if(sj>=4095) //最大位4095LED全亮
{
P2=0X00;
}else if(sj>=3584)
{
P2=0X80;
}else if(sj>=3073)
{
P2=0XC0;
}else if(sj>=2562)
{
P2=0XE0;
}else if(sj>=2051)
{
P2=0XF0;
}else if(sj>=1540)
{
P2=0XF8;
}else if(sj>=1259)
{
P2=0XFC;
}else if(sj>=518) //511+4(4095/8余4)
{
P2=0XFE;
}else
{
P2=0XFF; //如果上面的数值都不满足则LED全部熄灭
}
}
- 六大全新产品系列推出,MCX A微控制器家族迎来创新
- 意法半导体全新STM32C5系列,重新定义入门级微控制器性能与价值,赋能万千智能设备
- 从控制到系统:TI利用边缘AI重塑嵌入式MCU的边界
- 模组复用与整机重测在SRRC、CCC、CTA/NAL认证中的实践操作指南
- 有源晶振与无源晶振的六大区别详解
- 英飞凌持续巩固全球微控制器市场领导地位
- 使用 Keil Studio for Visual Studio Code开发 STM32 设备
- LoRa、LoRaWAN、NB-IoT与4G DTU技术对比及工业无线方案选型分析
- 意法半导体中国本地造STM32微控制器启动规模量产
- 蓝牙信道探测技术原理与开发套件实践
- STEVAL-IDB007V1评测:BlueNRG-1 Navigator
- 为什么NO STLINK DETECTED
- Vishay 新型电子元器件在工业及新能源中的应用(ZT)
- 秀秀俺的家乡美~~~~~有奖征片喽
- IGBT的检测方法
- 嵌入式系统中,DRAM减少一半,需要对系统内核的哪些部分进行修改
- 怎么通过web控制STM32103开发板的时钟,通过网页修改时钟日期
- AD9851输出正弦峰峰值只有500mv,不能做锁相环的本振,是不是可以加一级放大器来替...
- Effectively Using Pressure, Load & Torque Sensors
- 请大家看下我的情况 想还工作了。。。。。




