上次把时钟和闹钟功能搞好了,接下来做语音报时功能吧!

完整程序在下方
说明一下吧,上边这两个函数是用于控制语音的,不用管它,在调试途中发现不稳定,比如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();
  •         }        
  • }
  • 复制代码