6-基于单片机的喷泉音乐灯光律动水质检测串口输出播放器(LCD1602 ADC0832 串口 proteus keil AD 工程文件 物料清单)

6-基于单片机的喷泉音乐灯光律动水质检测串口输出播放器(LCD1602 ADC0832 串口 proteus keil AD 工程文件 物料清单)

功能描述:
1、根据不同的音乐播放展示不同的音乐效果。可以根据不同的输入信号实现灯光律动的效果。
2、检测音乐喷泉中的水质并显示在显示器中
3、检测的数据和当前的喷泉状态可以通过串口输出信息。
4、串口可以模拟,WIFI 蓝牙 RS232等与串口有关的接口。

注:仿真中需要将音乐导入至输入口,音乐播放不同电脑有不同的播放效果,可能出现音乐播放卡顿现象。

资料包含:
1、proteus工程文件(.pdsprj)
2、原理图工程文件(.SchDoc)与PDF版本(.pdf)
3、物料清单excel表格(.xlsx)
4、源代码工程文件(.uvproj)

在这里插入图片描述
请添加图片描述
请添加图片描述
请添加图片描述

在这里插入图片描述

请添加图片描述

#include <reg52.h> //包含头文件
#include “lcd1602.h”
#include <intrins.h>
#include “stdio.h”
#define uchar unsigned char
#define uint unsigned int //宏定义
sfr WDT_CONTR=0xe1;//看门狗
sbit out=P3^7; //输出引脚
sbit SCL=P1^2; //SCL定义为P1口的第3位脚,连接ADC0832SCL脚
sbit DO=P1^3; //DO定义为P1口的第4位脚,连接ADC0832DO脚
sbit DI=P1^3; //Di定义为P1口的第4位脚,连接ADC0832DO脚
sbit CS=P1^0; //CS定义为P1口的第4位脚,连接ADC0832CS脚
uchar scale; //占空比数值
uchar m; //定时器里计时变量
uchar date; //读取ad值的变量
uchar to; //读取ad值的变量
uchar AD_NUM=0; //读取ad值计数的变量
unsigned char adval;

uchar disp1[]=“Musical fountain”;
uchar disp2[]=“Turbidity: NTU”;

#define FOSC 12000000L //System frequency
#define BAUD 9600 //UART baudrate

//定时器2作为波特率发生器。调试的时候用。
void UART_init(void)
{

 TL2 = RCAP2L=(65536-(FOSC/32/BAUD));//9600波特率对应 FFD9,低位为D9(65536-26)%256

TH2 = RCAP2H=(65536-(FOSC/32/BAUD)) >> 8;//高位为FF(65536-26)/256
T2CON=0x34;//RCLK、TCLK、TR2置1
SCON=0x50;//串口工作模式1,接收使能
TI=1;
}

/读数模转换数据*********************************************/
//请先了解ADC0832模数转换的串行协议,再来读本函数,主要是对应时序图来理解,本函数是模拟0832的串行协议进行的
// 1 1 0 通道
// 1 1 1 通道
unsigned char ad0832read(bit SGL,bit ODD)
{
unsigned char i=0,value=0,value1=0;
SCL=0;
DO=1;
CS=0; //开始
SCL=1; //第一个上升沿
SCL=0;
DO=SGL;
SCL=1; //第二个上升沿
SCL=0;
DO=ODD;
SCL=1; //第三个上升沿
SCL=0; //第三个下降沿
DO=1;
for(i=0;i<8;i++)
{
SCL=1;
SCL=0; //开始从第四个下降沿接收数据
value<<=1;
if(DO)
value=value|0x01;
}
for(i=0;i<8;i++)
{ //接收校验数据
value1=value1>>1;
if(DO)
value1=value1|0x80;
SCL=1;
SCL=0;
}
CS=1;
SCL=1;
DO=1;
if(value==value1) //与校验数据比较,正确就返回数据,否则返回0
return value;
return 0;
}

void penquan() //PWM调压
{
date=ad0832read(1,0); //读取音频的ad值
if(date>130&&date<=170) //读取的ad值在130-170之间
{
scale=(date-100)/6; //将170-130平均分,根据ad值的不同控制占空比的大小
if(scale>11) //占空比大于11时
scale=11; //赋值11,也就是最大只能到11
}
else if(date>170) //读取的ad值大于170时
scale=11; //占空比最大11
else if(date<=130) //读取的ad值小于130时
scale=0; //占空比最小0
AD_NUM++; //每读取一次ad值让此变量加1
if(AD_NUM>=10) //最大加到10时
{
AD_NUM=0; //清零
if(date>=0&&date<135) P0=0xfe; //根据ad值控制灯的状态,0xfe就是二进制的11111110,也就是只有第一个灯亮
else if(date>=135&&date<140) P0=0xfc; //0xfc=11111100
else if(date>=140&&date<155) P0=0xf8;
else if(date>=155&&date<170) P0=0xe0;
else if(date>=170&&date<185) P0=0xc0;
else if(date>=185&&date<200) P0=0x80;
else if(date>=200) P0=0x00; //ad值大于200时,点亮所有灯
}
}

void shuizhi()
{
uint i=0;
i=ad0832read(1,1); //读取音频的ad值
i=i*99/127;
to =99-i;
printf(“当前水质质量为:%c%c NTU \r\n”,to/10+0x30,to%10+0x30);
disp2[10]=to/10+0x30;
disp2[11]=to%10+0x30;
write_string(2,0,disp2);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叫我Eric

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值