四极管: SPI之语音芯片ISD4004驱动

来源:互联网 发布:易格家具淘宝代购假货 编辑:程序博客网 时间:2024/05/21 07:07

主函数:

四极管:主函数(main.c)

#include<avr/io.h>#include<ISD4004.c>#include<KEY.c>#define uchar  unsigned char#define uint   unsigned intvoid main(void){uchar i,l;    DDRB=0XFF;DDRD=0XFF;     while(1)    {   i=key_press();    //检测按钮是否按下       if(i)     {      l=key_scan();    //取出按下所得值赋给l   switch(l)     {     case   1:  TYPE(0x01,0X00);break; case   2:   VOCA(0x00,0x90);break;      case   3:   STOP();break;         }        }}   }ISD4004
四极管:ISD4004驱动(ISD4004.C)
/*********************************** 函数功能:ISD4004录放子程序 函数说明:四线方式,数据输出线:DATA_PORT           使用环境:    硬件: MCU: ATmega32L                       F_CPU = 16000000                      外部:16000000  接线方法:3跟数据线:PC6-SS   PC5-MOSI  PC7-SCK   编译环境:WinAVR-20080610  调用文件:#include<delay_ms.h>          #include<friend.h> 使用说明:录好音后直接调用VOCA()即可 作者:   杨琦 修改者:    (日期:  )****************************************************************/#define SS_SET()  Pc6_1;//拉高SS #define SS_CRL()  Pc6_0;//变低SS #define MOSI_SET() Pc5_1;#define MOSI_CRL() Pc5_0;#define SCK_4002_SET() Pc7_1;#define SCK_4002_CRL() Pc7_0;//------------------------------------------void WRITE(uchar command) //写命令{    uchar i;SCK_4002_CRL();for(i=0;i<8;i++){ if(command & 0x01)  { MOSI_SET();} else{MOSI_CRL();}SCK_4002_SET(); //上升沿数据被锁存在 4002里面 command= command >> 1;SCK_4002_CRL();  //下降沿数据被移除}}void POWRUP(void)  //上电{SS_CRL();WRITE(0X20);SS_SET();}void STOP(void)//停止当前操作{SS_CRL();WRITE(0xC0);SS_SET();}void SETPLAY(uint addrH,uint adrrL) //从当前地址开始放音 0{ SS_CRL(); WRITE(adrrL); WRITE(addrH); WRITE(0xE0); SS_SET();}void PLAY(void){ SS_CRL(); WRITE(0xF0); SS_SET();}  void SETREC(uint addrH,uint adrrL){ SS_CRL(); WRITE(adrrL); WRITE(addrH); WRITE(0XA0); SS_SET();}void REC(void) //从当前地址开始录音{SS_CRL();WRITE(0xB0);    SS_SET();}void  TYPE(uint addr2,uint adrr1)   //  录音{POWRUP();delay_ms(25);POWRUP();delay_ms(25);delay_ms(25);SETREC(addr2,adrr1);REC();}void VOCA(uint addr2,uint adrr1)//放音{POWRUP();delay_ms(25);SETPLAY(addr2,adrr1);PLAY();}
 
按键
四极管:按键驱动(KEY.c)
#define uchar unsigned char#define uint  unsigned int//******************检验按键按下函数**************//*************************************************  uchar  key_press(void)   {       uchar  j;       DDRB|=0x0F;       PORTB|=0x0F;          DDRB&=0xF0;          j=PINB;       j=j&0x0F;       if(j==0x0F)       {   return 0;   }       else   {   return  1;   }} //**************** 扫描函数******************   uchar key_scan(void)     {   uchar key;     //delay_ms(10);  //消抖    if(key_press()) {   key = PINB;   key&=0x0F;   switch(key)   {    case  0x0E:  key = 1; break;        case  0X0D:  key = 2; break;case  0x0B:  key = 3; break;case  0x07:  key = 4; break;default:        key = 4;   } while(key_press());  //等待按键松开的程序   }else{key=4;} return key;     }
 
 
....

转载请注明出处。作者:四极管。广西师范大学 电子工程学院大学生科技创新基地 邮箱: yangxingbo-0311@163.com。


	
				
		
原创粉丝点击