有关题目








实现代码
main.c
#include <STC15F2K60S2.H>
#include "iic.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
sbit TX = P1^0; //发射引脚
sbit RX = P1^1; //接收引脚
sbit L1 = P0^0;
sbit L2 = P0^1;
sbit L3 = P0^2;
sbit L8 = P0^7;
sbit S7 = P3^0;
sbit S6 = P3^1;
sbit S5 = P3^2;
sbit S4 = P3^3;
uchar jm = 0;
code uchar tab[] = {
0xC0, 0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90, 0xff, 0xc1, 0x8c, 0xc3, 0x88};
//U P L A 11 12 13 14
//初始化为0,一次表示从左至右分别表示S5的参数选择为上限,超声波的连续测量标志不打开,L8灭
bit flag_para, flag_start, flag_L8 ;
float Vup = 4.5, Vdown = 0.5, Vrb2, Vdac;
uint dis = 5;
void sys_init();
void dac_pcf8591(uchar da);
uchar rd_pcf8591(uchar addr);
void Delay5ms(); //@12.000MHz
void Delay12us(); //@12.000MHz 用于延时与产生方波
void key_handle();
void delay_k(uchar t);
void Send_Sonic();//用于发送8个40kHz的方波
void Sonic_handle();
void led();
void dac_handle();
void dsp_smg_bit(uchar pos, val, dot);
void display();
void dsp_vol();
void dsp_para();
void dsp_dis();
void Delay1ms(); //@12.000MHz
void main()
{
sys_init();
while(1)
{
Vrb2 = rd_pcf8591(0x43) * 5 / 255.0;//读取通道3的电压,要同时允许DAC
key_handle();
display();
Sonic_handle();
led();
dac_handle();
}
}
void dac_handle()
{
if (!flag_start)
{
Vdac = 0.0;
}
else
{
if (dis <= 20)
Vdac = 1.0;
else if (dis >= 80)
Vdac = 5.0;
else
{
Vdac = 1.0 / 15 * (dis - 20) + 1;
}
}
dac_pcf8591((uchar)(Vdac * 51));

该代码实现了一个基于STM32单片机的超声波测距系统,结合PCA8591 DAC进行电压控制。系统包括超声波发送与接收、按键处理、显示功能,能够根据用户输入调整电压上下限,并实时显示距离信息。此外,还实现了I2C通信协议,用于与PCA8591的交互。
最低0.47元/天 解锁文章
4957

被折叠的 条评论
为什么被折叠?



