OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10077|回复: 3

我的AVR资料[程序篇] mega16驱动ISD4004源码(源码1)

[复制链接]

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2010-12-16 09:08:37 | 显示全部楼层 |阅读模式

     从大二开始,喜欢上AVR,当时的AVR价格和51差不多,mega8的性价比尤其高.当然现在的AVR早已风景不再.不过本人当时编写的一些代码或许对一些朋友会有帮助,这里放出源码,给大家参考.源码都是实际测试过的,但是电路图和PCB,早已不见踪影(很多是在我自己的开发板上做的).所有源码都是基于CVAVR的(1.x版本的,在2.x上编译,好像会有错误).
     第一个源码,是利用mega16驱动ISD4004录放音的.
    源码如下:

#include <mega16.h>
#include <delay.h>
//4004接口
#define CS PORTB.0
#define SCLK PORTB.3
#define MOSI PORTB.1
//按键接口
#define STOPREC PINA.0
#define REC PINA.1
#define PLAY PINA.2
#define STOP PINA.3
//状态指示接口
#define LED PORTD.0
#define LED2 PORTD.2 

/*----------------命令发送程序-------------------
功能:发送命令给4004
参数:commnd 命令代号
命令参考:
    0x0c 停止命令
    0x08 powerdown命令
    0x04 powerup命令
-------------------------------------------------*/
void sendbyte(unsigned char commnd)
{
 unsigned char t=0;  
 SCLK=0; 
 CS=0;//下降沿使能数据传输 
 for(t=0;t<8;t++)//发送一个比特的命令数据
 {
     SCLK=0;
  MOSI=commnd&0x80;
  SCLK=1;
  commnd<<=1;
 }
 CS=1;//命令在cs上升沿开始执行

/*------------------录音程序----------------------
功能:从指定地址开始录音
参数:address 指定录音地址的开始位置
注:address的范围必须从0-2400选一个(对于4004)
-------------------------------------------------*/
void REC4004(unsigned int address)
{
 unsigned char i; 
 sendbyte(0x04);//发送powerup命令
 delay_ms(25);//上电延时
 sendbyte(0x04);//发送powerup命令
 delay_ms(50);//上电延时(两倍)
 SCLK=0;
 CS=0;//命令转换期间CS必须为0
 for(i=0;i<16;i++)//发送十六位地址
 {
  SCLK=0;
  MOSI=address&0x0001;
  SCLK=1;
  address>>=1;
 }
 sendbyte(0x05);//发送setrec命令 
 sendbyte(0x0d);//发送rec命令  
//以下部分用来处理录音期间的问题
 while(STOPREC)LED=0;//开启指示灯
 LED=1;
//处理完毕 
    sendbyte(0x0c);//发送停止命令
 sendbyte(0x08);//发送powerdown命令
}
/*------------------放音程序----------------------
功能:从指定地址开始放音
参数:address 指定放音地址的开始位置
注:address的范围必须从0-2400选一个(对于4004)
-------------------------------------------------*/    
void PLAY4004(unsigned int address) //语音播放
{
 unsigned char i;
 sendbyte(0x04);//发送powerup命令
 delay_ms(25);//上电延时
 SCLK=0;
 CS=0;   
 for(i=0;i<16;i++)//发送十六位地址
 {          
  SCLK=0;
  MOSI=address&0x0001;
  SCLK=1;     
  address=address>>1;
 }
 sendbyte(0x07);//发送setplay命令 
 sendbyte(0x0f);//发送play命令
}

void main()
{
    DDRB=DDRD=0XFF;
    PORTB=PORTD=0Xff;
    DDRA=0X00;
    PORTA=0XFF;
  while(1)
 {
   if(REC==0)REC4004(0);//录音
    if(PLAY==0)
   {
    LAY4004(0);//放音
    LED2=0;
    while(STOP){LED2=!LED2;delay_ms(200);}
    sendbyte(0x0c);//停止 
    sendbyte(0x08);//掉电  
    LED2=1;
   }
 }        
}

我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2014-7-24
在线时间
0 小时
发表于 2014-7-25 11:04:15 | 显示全部楼层
你好,能给我看看你的硬件电路吗?
一件很简单平凡的东西可以做得很伟大
回复 支持 反对

使用道具 举报

5

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2014-10-16
在线时间
1 小时
发表于 2014-10-25 12:46:51 | 显示全部楼层
感谢楼主分享!
QQ:775420425
回复 支持 反对

使用道具 举报

0

主题

13

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2018-8-21
在线时间
2 小时
发表于 2018-8-22 09:31:36 | 显示全部楼层
学习学习,谢谢分享.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-12 02:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表