有没有大神可以用这个程序改成声音控制LED灯的亮灭板子图和代码附上
板子图片
单片机源程序如下:
- /************************************************
- *文件名称: main.c
- *说 明: 将模拟输入通道2、3的电压值显示到液晶上。
- * 单片机:STC89C52,晶振频率:11.0592MHz
- *版 本: V1.0
- *作 者: nqy
- *时 间: 2017-12-29
- **************************************************/
- #include <I2C.h>
- #include <1602lcd.h>
- #include <fpc8951.h>
- u8 flag300ms=0;
- void ValueToString(u8 *str, u8 val);//ADC转换值转为实际电压值的字符串形式
- void Timer0Init(); //50毫秒@11.0592MHz
-
- void main()
- {
- u8 val;
- u8 str[10];
- EA = 1; //开总中断
- Timer0Init(); //配置T0定时50ms
- InitLcd1602(); //初始化液晶
- LcdShowStr(0, 0, "AIN2 AIN3"); //显示通道指示
- while (1)
- {
- if (flag300ms)
- {
- flag300ms=0;
- //显示通道2的电压
- val = GetADCValue(2);
- ValueToString(str, val);
- LcdShowStr(0, 1, str);
- //显示通道3的电压
- val = GetADCValue(3);
- ValueToString(str, val);
- LcdShowStr(6, 1, str);
- }
- }
- }
- /******************************************
- *函数名称:ValueToString
- *函数功能:ADC转换值转为实际电压值的字符串形式
- *入口参数:str-字符串指针,val-AD转换值
- *出口参数:无
- *******************************************/
- void ValueToString(u8 *str, u8 val)
- {
- //电压值=转换结果*5V/255,式中的50隐含了一位十进制小数
- val = (val*50) / 255;
- str[0] = (val/10) + '0'; //整数位字符
- str[1] = '.'; //小数点
- str[2] = (val%10) + '0'; //小数位字符
- str[3] = 'V'; //电压单位
- str[4] = '\0'; //结束符
- }
- /******************************************
- *函数名称:Timer0Init()
- *函数功能:定时器0初始化,最大化定时器设置
- *入口参数:无
- *出口参数:无
- *******************************************/
- void Timer0Init() //50毫秒@11.0592MHz
- {
- TMOD &= 0xF0; //设置定时器模式
- TMOD |= 0x01; //设置定时器模式
- TL0 = 0x00; //设置定时初值
- TH0 = 0x4C; //设置定时初值
- ET0=1; //定时器0中断开启
- TR0 =1; //定时器开启
- }
- /******************************************
- *函数名称:Timer0_ISR()
- *函数功能:定时器0中断服务Timer0_ISR()
- *入口参数:无
- *出口参数:无
- *******************************************/
- void Timer0_ISR() interrupt 1 //中断服务函数
- {
-
- static u8 tmr300ms = 0;
- TL0 = 0x00; //设置定时初值
- TH0 = 0x4C; //设置定时初值
- tmr300ms++;
- if (tmr300ms >= 20) //定时300ms
- {
- tmr300ms = 0;
- flag300ms = 1;
- }
- }
复制代码
所有资料51hei提供下载:
1.rar
(47.81 KB, 下载次数: 9)
|