主函数:
四极管:主函数(main.c)
#include<avr/io.h>
#include<ISD4004.c>
#include<KEY.c>
#define uchar unsigned char
#define uint unsigned int
void 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。