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

📄 dianya.c

📁 使用凌阳61单片机开发的具有语音播报功能的数字电压表源代码
💻 C
字号:
#include  "spce061a.h"
						
#define D0 				0							
#define D1				1
#define D2			    2
#define D3				3
#define D4				4
#define D5				5
#define D6				6							
#define D7				7
#define D8			    8
#define D9				9
#define FU				10
#define DIAN			11
#define JINGGAO 	    12	


const int Address[]={0x003f,0x0006,0x005b,0x004f,0x0066,0x006d,0x007d,0x0007,0x007f,0x006f,0x8000};
int function,key;


//********************AD转换*************************//
unsigned int AD(void) 
{ 
    unsigned int uiData; 
    while(!(*P_ADC_MUX_Ctrl&0x8000)); //wait,until ADC complete 
    uiData=*P_ADC_LINEIN_Data; 
    return(uiData&0xffc0); 
} 


//********************自动播放*************************//
void PlaySnd(unsigned SndIndex,unsigned DAC_Channel)
{
	SACM_A2000_Initial(1);								//初始化为自动播放
	SACM_A2000_Play(SndIndex, DAC_Channel, 3);			//开始播放一段语音
	while((SACM_A2000_Status()&0x0001)!= 0)				//是否播放完毕?
	{
		SACM_A2000_ServiceLoop();						//解码并填充队列
		*P_Watchdog_Clear=0x0001;						//清看门狗
	}
	SACM_A2000_Stop();									//停止播放
}


//********************延时*************************//
void  delay(int x)
{
	int u,v;
    for(u=0;u<x;u++)
    {
        for(v=0;v<100;v++)
        *P_Watchdog_Clear=0x0001;	
    }
}


//********************语音选择*************************//
void  sound(int num)
{
	switch(num)
   {	  
    case 0:PlaySnd(0,1+2);  break  ;     
	case 1:PlaySnd(1,1+2);  break  ; 
	case 2:PlaySnd(2,1+2);  break  ;  
	case 3:PlaySnd(3,1+2);  break  ;  
	case 4:PlaySnd(4,1+2);  break  ;  
	case 5:PlaySnd(5,1+2);  break  ;
	case 6:PlaySnd(6,1+2);  break  ;       
	case 7:PlaySnd(7,1+2);  break  ;   
	case 8:PlaySnd(8,1+2);  break  ;  
	case 9:PlaySnd(9,1+2);  break  ;  
   }
}


//********************读键程序*************************//
int read_key(int num)
{
    int y,z;
    *P_IOA_Data=*P_IOA_Data | 0x0007;
    key=*P_IOA_Data &0x0007;
    if (key!=7)
    {
       delay(20);
       key=*P_IOA_Data &0x0007;
       if (key!=7)
       {
         if (key==0x0006)
          {
          	y=(num%100)/10;
            z=(num%100)%10;
            sound(num/100);
            PlaySnd(11,1+2);
            sound(y);
            sound(z);
            PlaySnd(10,1+2);
           }
       }
    }
}


//********************主程序*************************//
void main() 

{     
      unsigned long int uiData; 
      unsigned int i,j;
      float fVoltage; 
      
      fVoltage=0.00; 
	  *P_IOA_Dir=0xfff0;
	  *P_IOA_Attrib=0xfff8; 
	  *P_IOA_Data=0xff0f;
	  *P_IOB_Dir=0xffff;
	  *P_IOB_Attrib=0xffff;
	  *P_IOB_Data=0xffff;

      *P_ADC_MUX_Ctrl=C_ADC_CH4; //LINE_IN--IOA3 
      *P_ADC_Ctrl= C_ADCE; //ADC enable 
      uiData=*P_ADC_LINEIN_Data; //ADC start 
      uiData=0; 
   
	 
      for(i=0;i<16;i++) 
      { 
           uiData += AD();
           *P_Watchdog_Clear=0x0001; 
      } 
      uiData >>= 4; 
      fVoltage=(float)uiData*3.3/0xffc0; 


      j=fVoltage*100;
      *P_IOB_Data=(Address[j/100]<<8)+Address[(j%100)/10]+Address[10];
      *P_IOA_Data=Address[(j%100)%10]<<8;

      if(fVoltage>2.5)
      {
      	*P_IOA_Data=*P_IOA_Data  |  0x0001;
      	
      	PlaySnd(12,1+2);
      	*P_Watchdog_Clear=0x0001; 
      	 
        *P_IOB_Data=(Address[j/100]<<8)+Address[(j%100)/10]+Address[10];
        *P_IOA_Data=Address[(j%100)%10]<<8;
      }	
      else
      {
      	
       read_key(j);
    
      }					  


}

⌨️ 快捷键说明

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