⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wtv.c

📁 此为本人今期一个项目的部分C51源程序
💻 C
字号:



#include <STC12C5412.H>
#include <intrins.h>
#include <port.h>



 enum Task {WTV_Task_Temperature,WTV_Task_Pressure, WTV_Task_Ozone,
            WTV_Task_Music,WTV_Task_Water_Out,WTV_Task_None};       //语音芯片工作状态枚举类型定义
 enum Task WTV_Task;//语音芯片工作状态变量

//在外部被修改赋值
 unsigned char Forcast_count;                 //语音芯片播放段数计数
 unsigned int  Forcast_content;               //语音芯片播放内容
 

/*-------------------------------------------------------------------------------------------------------
					                 语音芯片控制写程序
---------------------------------------------------------------------------------------------------------*/
void fun1(unsigned char address)
{
   unsigned char i;
   //WTV_RST=0;
   //for(i=0;i<10;i++)  _nop_();
   //WTV_RST=1;                       //复位
   
   //wait(200);                       //2ms以上
   WTV_CS=0;                        //片选
   
   for(i=0;i<200;i++)  _nop_();    // 1ms 以上 
   
   for(i=0;i<8;i++){
       WTV_SCL=0;
       if(address & 1) 
           WTV_SDA=1;
       else WTV_SDA=0;
       address>>=1;
       for(i=0;i<20;i++)  _nop_();  // 20us 以上 
       WTV_SCL=1;
       for(i=0;i<20;i++)  _nop_();
  }
  WTV_CS=1;
}
/*------------------------------------------------------------------------------------------------
                                    温度语音播放程序
输入参数:扩大十倍的温度数值
-------------------------------------------------------------------------------------------------*/
void Temperature_Forcast(unsigned int Set_Temp)
{
    
  if(Forcast_count==1){
      fun1(0);                                   //播 "当前设定水温"
      Forcast_count++;
  }
  else if(Forcast_count==2){
      fun1( (unsigned char)(Set_Temp/100));    //播温度十位
      Forcast_count++;
  }
  else if(Forcast_count==3){
  
      fun1(0);                                   //播 " 十"
      Forcast_count++;
  }
  else if(Forcast_count==4){
      fun1( (unsigned char)(Set_Temp/10%10));   //播温度个位
      Forcast_count++;
  }
  else if(Forcast_count==5){
      fun1(0);                                   //播 "点"
      Forcast_count++;
  }
  else if(Forcast_count==6){
      fun1( (unsigned char)(Set_Temp%10));       //播温度小数一位
      Forcast_count++;
  }
  else if(Forcast_count==7){
      fun1(0);                                   //播 "度"
      Forcast_count++;
      WTV_Task=WTV_Task_None;
  }
}
/*------------------------------------------------------------------------------------------------
                                    水压语音播放程序

输入参数:水压力级别数值
-------------------------------------------------------------------------------------------------*/
void Pressure_Forcast(unsigned int Pressure_Mode)
{
 
  if(Forcast_count==1){    //全局计数控制变量
      fun1(0);                                   //播 "当前设定水压"
      Forcast_count++;
  }
  else if(Forcast_count==2){
      fun1((unsigned char)(Pressure_Mode/10));      //播水压级别,要缩小十倍
      Forcast_count++;
  }
  else if(Forcast_count==3){
      fun1(0);                                   //播 "级"
      Forcast_count++;
      WTV_Task=WTV_Task_None;
  }
  
}
/*------------------------------------------------------------------------------------------------
                                    臭氧控制语音播放程序
输入参数: 消毒按键被按下的次数
说明:第1次按下,要求确认;第2次按下,启动消毒;第3次按下,取消臭氧消毒;再次按下,又要求确认
-------------------------------------------------------------------------------------------------*/
void Ozone_Forcast(unsigned int Key_Pressed_Times)
{
    
  if(Key_Pressed_Times==1){
      fun1(0);                                 //播“您将要使用臭氧消毒功能,确定请再次按下消毒键" 
  }
  else if(Key_Pressed_Times==2){
      fun1(0);                                 //播"正在臭氧消毒”
  }
  else if(Key_Pressed_Times==3){ 
      fun1(0);                                 //播"臭氧消毒已取消"
  }
  WTV_Task=WTV_Task_None;                     //关臭氧播放功能
}

/*------------------------------------------------------------------------------------------------
                                    出水状态语音播放程序

-------------------------------------------------------------------------------------------------*/
void Water_Out_Forcast(unsigned int Water_Out_State)
{
  if(Water_Out_State==1)
      fun1(0);                           // 播放"出水已开"
  else 
      fun1(0);                           //播放"出水已关"



}
/*-------------------------------------------------------------------------------------------------
                                    音乐播放控制程序
-------------------------------------------------------------------------------------------------*/
void Music_Forcast()
{
}
/*-------------------------------------------------------------------------------------------------
                                   语音芯片中断控制程序
-------------------------------------------------------------------------------------------------*/
void WTV_ISR(void)
{
  switch(WTV_Task){
  
  case WTV_Task_Temperature:{         //播报设定温度
      
      Temperature_Forcast(Forcast_content); //调用温度语音播放程序     
      break;
  }
  
  case WTV_Task_Pressure:{
  
      Pressure_Forcast(Forcast_content);    //调用水压语音播放程序
      break;
  }
  
  case WTV_Task_Ozone:{
  
      Ozone_Forcast(Forcast_content);       //臭氧控制语音播放程序
      break;
  }
  
  case WTV_Task_Water_Out:{
  
      Water_Out_Forcast(Forcast_content);   //出水状态语音播放程序
      break;
  }
  
  case WTV_Task_Music:{
  
      Music_Forcast();       //音乐循环播放程序
      break;
  }
  
  case WTV_Task_None:{
  
       break;
  }
  
  default:
      fun1(0);              
      break;
  }//end switch

}//end function
  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -