标题:
[原创DIY]电子表语音报时功能制作 附单片机程序
[打印本页]
作者:
xjx51
时间:
2021-8-11 16:23
标题:
[原创DIY]电子表语音报时功能制作 附单片机程序
上次把时钟和闹钟功能搞好了,接下来做语音报时功能吧!
完整程序在下方
说明一下吧,上边这两个函数是用于控制语音的,不用管它,在调试途中发现不稳定,比如11点它会说成31点,这就奇怪了,我查了半天才发现是我取BCD码的方式不对,取十位本来是/16,结果我写成了/10,这能不错吗?该回来后怀着激动的心下载了程序,结果一上电,纳尼?!屏幕亮都不亮,本以为下载路径不对,重新加载了HEX文件,才发现是内存不够,8K的内存就没啦?只好把英文字库给关了,这下内存有了!按下按键,可以报出时间和温度了!
这个语音芯片我用的是NVC080C,可以存放150多段语音,很好用,希望可以帮助到大家!
本功能实现了利用按键控制语音芯片进行时间和温度的报告,格式如下:
现在——XX点XX分——温度——XX度
这个功能我是用了两个函数,话不多说,上程序。
void yy_bs(unsigned char w)
{
if(w/16 == 0)
{
DS3231_TIME();
switch(w&0x0f)
{
case(0x01):yuyin(0X34);break;
case(0x02):yuyin(0X35);break;
case(0x03):yuyin(0X36);break;
case(0x04):yuyin(0X37);break;
case(0x05):yuyin(0X38);break;
case(0x06):yuyin(0X39);break;
case(0x07):yuyin(0X3A);break;
case(0x08):yuyin(0X3B);break;
case(0x09):yuyin(0X3C);break;
case(0x00):yuyin(0X33);break;
}
DS3231_TIME();
}
else if(w/16 == 1)
{
DS3231_TIME();
yuyin(0X3D);
delay_ms(1500);
switch(w&0x0f)
{
case(0x01):yuyin(0X34);break;
case(0x02):yuyin(0X35);break;
case(0x03):yuyin(0X36);break;
case(0x04):yuyin(0X37);break;
case(0x05):yuyin(0X38);break;
case(0x06):yuyin(0X39);break;
case(0x07):yuyin(0X3A);break;
case(0x08):yuyin(0X3B);break;
case(0x09):yuyin(0X3C);break;
case(0x00):yuyin(0X33);break;
}
DS3231_TIME();
}
else if(w/16 == 2)
{
DS3231_TIME();
yuyin(0X35);
delay_ms(1000);
yuyin(0X3D);
delay_ms(2000);
switch(w&0x0f)
{
case(0x01):yuyin(0X34);break;
case(0x02):yuyin(0X35);break;
case(0x03):yuyin(0X36);break;
case(0x04):yuyin(0X37);break;
case(0x05):yuyin(0X38);break;
case(0x06):yuyin(0X39);break;
case(0x07):yuyin(0X3A);break;
case(0x08):yuyin(0X3B);break;
case(0x09):yuyin(0X3C);break;
// case(0x00):yuyin(0X33);break;
}
DS3231_TIME();
}
else if(w/16 == 3)
{
DS3231_TIME();
yuyin(0X36);
delay_ms(1000);
yuyin(0X3D);
delay_ms(2000);
switch(w&0x0f)
{
case(0x01):yuyin(0X34);break;
case(0x02):yuyin(0X35);break;
case(0x03):yuyin(0X36);break;
case(0x04):yuyin(0X37);break;
case(0x05):yuyin(0X38);break;
case(0x06):yuyin(0X39);break;
case(0x07):yuyin(0X3A);break;
case(0x08):yuyin(0X3B);break;
case(0x09):yuyin(0X3C);break;
//case(0x00):yuyin(0X33);break;
}
DS3231_TIME();
}
else if(w/16 == 4)
{
DS3231_TIME();
yuyin(0X37);
delay_ms(1000);
yuyin(0X3D);
delay_ms(2000);
switch(w&0x0f)
{
case(0x01):yuyin(0X34);break;
case(0x02):yuyin(0X35);break;
case(0x03):yuyin(0X36);break;
case(0x04):yuyin(0X37);break;
case(0x05):yuyin(0X38);break;
case(0x06):yuyin(0X39);break;
case(0x07):yuyin(0X3A);break;
case(0x08):yuyin(0X3B);break;
case(0x09):yuyin(0X3C);break;
//case(0x00):yuyin(0X33);break;
}
DS3231_TIME();
}
else if(w/16 == 5)
{
DS3231_TIME();
yuyin(0X38);
delay_ms(1000);
yuyin(0X3D);
delay_ms(2000);
switch(w&0x0f)
{
case(0x01):yuyin(0X34);break;
case(0x02):yuyin(0X35);break;
case(0x03):yuyin(0X36);break;
case(0x04):yuyin(0X37);break;
case(0x05):yuyin(0X38);break;
case(0x06):yuyin(0X39);break;
case(0x07):yuyin(0X3A);break;
case(0x08):yuyin(0X3B);break;
case(0x09):yuyin(0X3C);break;
//case(0x00):yuyin(0X33);break;
}
DS3231_TIME();
}
else if(w/16 == 6)
{
DS3231_TIME();
yuyin(0X39);
delay_ms(1000);
yuyin(0X3D);
delay_ms(1000);
switch(w&0x0f)
{
case(0x01):yuyin(0X34);break;
case(0x02):yuyin(0X35);break;
case(0x03):yuyin(0X36);break;
case(0x04):yuyin(0X37);break;
case(0x05):yuyin(0X38);break;
case(0x06):yuyin(0X39);break;
case(0x07):yuyin(0X3A);break;
case(0x08):yuyin(0X3B);break;
case(0x09):yuyin(0X3C);break;
//case(0x00):yuyin(0X33);break;
}
DS3231_TIME();
}
}
void yy_bs1(unsigned char w)
{
if(w/10 == 0)
{
DS3231_TIME();
switch(w&0x0f)
{
case(0x01):yuyin(0X34);break;
case(0x02):yuyin(0X35);break;
case(0x03):yuyin(0X36);break;
case(0x04):yuyin(0X37);break;
case(0x05):yuyin(0X38);break;
case(0x06):yuyin(0X39);break;
case(0x07):yuyin(0X3A);break;
case(0x08):yuyin(0X3B);break;
case(0x09):yuyin(0X3C);break;
case(0x00):yuyin(0X33);break;
}
DS3231_TIME();
}
else if(w/10 == 1)
{
DS3231_TIME();
yuyin(0X3D);
delay_ms(1500);
switch(w&0x0f)
{
case(0x01):yuyin(0X34);break;
case(0x02):yuyin(0X35);break;
case(0x03):yuyin(0X36);break;
case(0x04):yuyin(0X37);break;
case(0x05):yuyin(0X38);break;
case(0x06):yuyin(0X39);break;
case(0x07):yuyin(0X3A);break;
case(0x08):yuyin(0X3B);break;
case(0x09):yuyin(0X3C);break;
case(0x00):yuyin(0X33);break;
}
DS3231_TIME();
}
else if(w/10 == 2)
{
DS3231_TIME();
yuyin(0X35);
delay_ms(1000);
yuyin(0X3D);
delay_ms(2000);
switch(w&0x0f)
{
case(0x01):yuyin(0X34);break;
case(0x02):yuyin(0X35);break;
case(0x03):yuyin(0X36);break;
case(0x04):yuyin(0X37);break;
case(0x05):yuyin(0X38);break;
case(0x06):yuyin(0X39);break;
case(0x07):yuyin(0X3A);break;
case(0x08):yuyin(0X3B);break;
case(0x09):yuyin(0X3C);break;
// case(0x00):yuyin(0X33);break;
}
DS3231_TIME();
}
else if(w/10 == 3)
{
DS3231_TIME();
yuyin(0X36);
delay_ms(1000);
yuyin(0X3D);
delay_ms(2000);
switch(w&0x0f)
{
case(0x01):yuyin(0X34);break;
case(0x02):yuyin(0X35);break;
case(0x03):yuyin(0X36);break;
case(0x04):yuyin(0X37);break;
case(0x05):yuyin(0X38);break;
case(0x06):yuyin(0X39);break;
case(0x07):yuyin(0X3A);break;
case(0x08):yuyin(0X3B);break;
case(0x09):yuyin(0X3C);break;
//case(0x00):yuyin(0X33);break;
}
DS3231_TIME();
}
}
复制代码
代码:
第二版本手表程序.7z
(145.73 KB, 下载次数: 30)
2021-8-11 16:16 上传
点击文件名下载附件
手表完整程序
下载积分: 黑币 -5
作者:
神话A小王子
时间:
2022-4-1 15:42
楼主这段程序其实可以简化一下呢,感觉有很多重复的程序段,另外这种稍显复杂的程序里尽量少用delay这种延时呢
作者:
xjx51
时间:
2022-7-25 00:34
神话A小王子 发表于 2022-4-1 15:42
楼主这段程序其实可以简化一下呢,感觉有很多重复的程序段,另外这种稍显复杂的程序里尽量少用delay这种延 ...
随便写的,没怎么准备做效率啥的,还请大佬多多指教
作者:
yzs158
时间:
2022-7-25 06:06
学习学习论坛有你更精彩
作者:
joyb
时间:
2023-8-29 14:45
语音芯片如何接线
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1