×
搜索
每日签到
|
APP下载
|
登录
首页
研发技术
技术分类
嵌入式
模拟电子
电磁兼容
单片机
电池
电源
RF射频
传感器
显示-光电
FPGA/DSP
接口总线驱动
全部
前沿技术
高通5G手机芯片性能测评
高频小信号谐振放大电路时域与频域对比分析
高薪IC设计工程师是如何炼成的?
龙芯发布四款芯片:加速产业布局 中国芯大有可为
为什么我们要用隔离式放大器
热门技术文章
液晶显示器控制设计_含源程序代码
飞思卡尔数字压力传感器实现硬盘驱动存储容量增加
骁龙710为全新层级的智能手机提供用户所需的的顶级特性
解读西部电子设计行业四大亮点
节点转换成本升级,摩尔定律将在2014年被打破?
适用于WLAN IEEE80211a标准的双模前置分频器设计
行业应用
行业应用
医疗电子
物联网
智能电网
汽车电子
工业控制
AI
家电数码
热门应用
物联网网关是智能家居发展的重要支撑
齐聚澳门 ViewSonic优派助阵MDL Macau Dota 2 国际精英邀请赛
龙芯、飞腾、申威进入国企采购目录 但不应过度解读
绝缘电阻极化指数测量方法
阿特斯阳光电力加入 Intertek ‘卫星计划’
最新应用文章
区块链本体跨链技术设计方案解析
机器人技术电路设计图集锦
智能手环怎么用_智能手环使用教程
以IoT联接智能家居和楼宇
工业机器人控制系统由什么组成
绝缘电阻测试仪及兆欧表的组成和选用标准
电子论坛
社区导航
更多>
硬件设计讨论
电磁兼容&安规论坛
射频RF|微波技术
电源技术论坛
信号完整性SI/PI仿真
芯片SIP|封装设计
单片机|MCU论坛
ARM|DSP嵌入式论坛
物联网技术
FPGA|CPLD论坛
MATLAB论坛
器件选型&认证
Cadence Allegro论坛
Allegro Skill开发
Orcad|Concept论坛
Mentor Xpedition论坛
PADS PCB论坛
Altium Protel论坛
PCB封装库论坛
EDA365作品展
PCB生产工艺论坛
电子装联PCBA工艺&设备论坛
IPD流程管理
失效分析&可靠性
元器件国产化论坛
EDA365线下活动区
职业生涯
EDA365原创吧
电巢学堂
电巢直播
研发资源
电子百科
器件手册
设计外包
EDA365 Skill
EDA365 Tools
Xilinx开发者社区
电巢
嵌入式
>
技术百科
>
详情
922044
ISD4004语音程序
发布时间:
2020-06-20
发布时间:
|
标签:
isd4004
语音程序
///////////ISD4004语音播放部分/////////////////////////////
////当按下P3.5键时,从指定地址开始录音
/// 当按下P3.6键时,从指定地址开始放音
/// 当按下P3.7键时,停止当前的操作
/// 程序中的录放停部分已做成子函数,可以直接调用, 只需要输入录音的地址就行
// 录音地址的设定与芯片型号有关系,以ISD4004-16为例,ISD40044-16录音时间为16
// 分钟,即16*60=960S, 根据4004的资料,960秒可分为2400段,也就是1S的段数为
// 25段,即从,0000-0019H的内容为1S,
///作者:长沙致望科技电子公司 WWW.CSMCU.COM
///版本:V1.0(2008.12.1)
//实验使用注意,按录音键,要切换到放音时,可按停止再放音,也可以先按一下放音键,再按一次放音键,那可
//原因:本程序在放音前,没有做停止和下电处理,感兴趣的朋友可以直接到停止部分加到放音子函数中。
#include
#include
#define uchar unsigned char
#define uint unsigned int
////////定义放音命令,定义常量//////
#define ISDPOWERUP 0X20 //ISD4004上电
#define ISDSTOP 0X10 //ISD4004下电
#define OPERSTOP 0X30 //ISD4004停止当前操作
#define PLAYSET 0XE0 //ISD4004从指定地址开始放音
#define PLAYCUR 0XF0 //ISD4004从当前地址开始放音
#define RECSET 0XA0 //ISD4004从指定地址开始录音
#define RECCUR 0XB0 //ISD4004从当前地址开始录音
sbit SS=P1^4; //LOW IS ACTIVELY
sbit MOSI=P1^5;
//sbit MISO=P1^7;
sbit SCLK=P1^7;
sbit K1=P3^5;
sbit K2=P3^6;
sbit K3=P3^7;
sbit INT = P3^2;
sbit LED1=P1^0;
sbit LED2=P1^3;
void delayms(uchar ms);
uint addr;////全局变量//// 放音地址
////////////////放音部分子程序,放音地址由ADDR决定////
void play()
{
uint y;
SS=0;
MOSI=0;//发送开始
SCLK=0;
for(y=0;y<8;y++) //上电
{
SCLK=0;
if((0x20>>y)&0x01)MOSI=1;
else MOSI=0;
_nop_();
_nop_();
_nop_();
SCLK=1;
_nop_();
_nop_();
_nop_();
}//发送结束
SS=1;//上电结束
delayms(50);
SS=0;
MOSI=0;//发送地址
SCLK=0;
for(y=0;y<16;y++)
{
SCLK=0;
if((addr>>y)&0x01)MOSI=1;
else MOSI=0;
_nop_();
_nop_();
_nop_();
SCLK=1;
_nop_();
_nop_();
_nop_();
}//发送地址结束
MOSI=0;//放音
SCLK=0;
for(y=0;y<8;y++)
{
SCLK=0;
if((0xe0>>y)&0x01)MOSI=1;
else MOSI=0;
_nop_();
_nop_();
_nop_();
SCLK=1;
_nop_();
_nop_();
_nop_();
}
SS=1;
SS=0;
MOSI=0;//放音
SCLK=0;
for(y=0;y<8;y++)
{
SCLK=0;
if((0xf0>>y)&0x01)MOSI=1;
else MOSI=0;
_nop_();
_nop_();
_nop_();
SCLK=1;
_nop_();
_nop_();
_nop_();
}
SS=1;
}
//////////////////////////lu音部分子程序,地址由ADDR决定/////////////////////////
void rec()
{ uint y;
SS=0;
MOSI=0;//发送开始
SCLK=0;
for(y=0;y<8;y++)
{
SCLK=0;
if((0x20>>y)&0x01)MOSI=1;
else MOSI=0;
_nop_();
_nop_();
_nop_();
SCLK=1;
_nop_();
_nop_();
_nop_();
}//发送结束
SS=1;//上电结束
delayms(50);
SS=0;
MOSI=0;//发送开始
SCLK=0;
for(y=0;y<8;y++)
{
SCLK=0;
if((0x20>>y)&0x01)MOSI=1;
else MOSI=0;
_nop_();
_nop_();
_nop_();
SCLK=1;
_nop_();
_nop_();
_nop_();
}//发送结束
SS=1;//上电结束
delayms(50);
delayms(50);
SS=0;
MOSI=0;//发送地址
SCLK=0;
for(y=0;y<16;y++)
{
SCLK=0;
if((addr>>y)&0x01)MOSI=1;
else MOSI=0;
_nop_();
_nop_();
_nop_();
SCLK=1;
_nop_();
_nop_();
_nop_();
}//发送地址结束
MOSI=0;
SCLK=0;
for(y=0;y<8;y++)
{
SCLK=0;
if((0>>y)&0x01)MOSI=1;
else MOSI=0;
_nop_();
_nop_();
_nop_();
SCLK=1;
_nop_();
_nop_();
_nop_();
}
SS=1;
SS=0;
MOSI=0;
SCLK=0;
for(y=0;y<8;y++)
{
SCLK=0;
if((0xb0>>y)&0x01)MOSI=1;
else MOSI=0;
_nop_();
_nop_();
_nop_();
SCLK=1;
_nop_();
_nop_();
_nop_();
}
SS=1;
}
////////////////////////////////////
////////////////////////////////
void stop()
{
uchar y;
SS=1;
SS=0;
MOSI=0;//放音
SCLK=0;
for(y=0;y<8;y++)
{
SCLK=0;
if((0x30>>y)&0x01)MOSI=1;
else MOSI=0;
_nop_();
_nop_();
_nop_();
SCLK=1;
_nop_();
_nop_();
_nop_();
}
SS=1;
}
////////////////////////////////////
////////////////////////////////////void press_key()
void delayms(uchar ms)
// 延时子程序
{
uchar j;
while(ms--)
{
for(j = 0; j
}
}
////////////////////////////////
////////////////////////////////////
void main()
{
P1=0xff;
P2=0XFF;
P3=0XFF;
while(1)
{
LED1 =INT;
LED2=0;
if(K1==0)
{
delayms(10);
while(K1==0); ///松手判断
LED2=1;
addr=0X05;/////从0X05单元开始
rec();
P1=0XFF;
while(K1==1);
delayms(10);
while(K1==0); ///松手判断
}
if(K2==0)
{
delayms(10);
while(K2==0);
addr=0X05;
play();
P1=0XFF;
}
if(K3==0)
{
delayms(10);
while(K3==0);
LED1=1;
LED2=1;
stop();
P1=0XFF;
}
}
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』
分享至
发布时间:
2020-06-20
发布时间:
上一篇:JBL扬声器的选择及应用
下一篇:IR推出新型Gen2.1 SupIRBuck集成稳压器
相关推荐
热门文章
更多
Keil5(MDK5)在调试(debug)过程中遇到的问题
未来发展前瞻:辐射出THz电磁波…
THz辐射的产生两种方案:光导激发机制和光整流效应.光导机制是利用超短激光脉冲泵浦光导材料(如GaAs 等半导体).使在其表面激发载流子.这些载流子在外加电场作用下加速运动.从而辐射出THz电磁波.其性能决定于三…
设定LED从红到绿的色调…
图1中的电路可以用红色和绿色LED.创造出32°色调的光.一个恒定电流被分为两个部分.一部分流经一只红色LED.另一部分流经一只绿色LED.可以使通过红色LED的电流从0〜%变化.从而同时也改变了作为互补的绿色LED电流…
DSP与单片机的一种高速通信实现方案…
1 引言 数字信号处理器(DSP)是一种适合于实现各种数字信号处理运算的微处理器.具有下列主要结构特点:(1)采用改进型哈佛(Harvard)结构.具有独立的程序总线和数据总线.可同时访问指令和数据空间.允许实…
TI推出OMAP-Vox单芯片手机解决方案eCosto…
TI 在北京举行的无线通信高峰会上宣布推出一款全新 OMAP-Vox 单芯片解决方案 -"eCosto". 该款最新单芯片平台完美结合了 TI 多项成功技术.如在已量产的"LoCosto"低成本平台上采用的 TI 创新 DRP 技术,以及在TI OMA…
volatile的变量使用…
一个定义为volatile的变量是说这变量可能会被意想不到地改变.这样.编译器就不会去假设这个变量的值了.精确地说就是.优化器在用到这个变量时必须每次都小心地重新读取这个变量的值.而不是使用保存在寄存器里的备…
直接序列扩频LD9002DX2的原理及应用…
电子设计应用2003年第5期摘 要: 本文介绍了lanwave公司的码分扩频专用芯片ld9002dx2的基本原理.及其在基于ld9002dx2的直接序列扩频系统中的应用.关键词: 无线通信,扩频技术,码分多址复用,ld9002dx2 图1 ld900…
纯固态芯片级激光雷达研发企业洛微科技完成5000万元A轮融资…
近日.纯固态芯片级激光雷达研发企业[洛微科技"宣布5000万元A轮融资.由轻舟资本领投.财通资本.华盖南方.布谷天阙跟投.由中科创星科技服务公司投行部担当独家财务顾问.…