/*****************************************/
/* Copyright (c) 2005, 通信工程学院 */
/* All rights reserved. */
/* 作 者:戴 佳 */
/*****************************************/
#include "voice.h"
/* 延时t毫秒 */
void delay(uint t)
{
uint i;
while(t--)
{
/* 对于11.0592M时钟,约延时1ms */
for (i=0;i<125;i++)
{}
}
}
/* 外部中断0服务子程序 */
void out_int0() interrupt 0 using 1
{
EX0 = 0; // 关外部中断0
PD = 1; // 进入节电状态
if(count<2) // 再重播2次,共3次放音
{
count++;
delay(500); // 延时500ms
P2 = P2&0xFC; // A8=A9=0
P0 = P0&0x00; // 起始地址为0
playback(); // 从地址0处播放
EX0 = 1; // 开外部中断0
}
else
{
IdleFlag = 1; // 变为空闲状态,可以再次按开始键
count = 0;
}
}
/* 主程序 */
void main()
{
EA = 1; // 开CPU中断
count = 0;
StartFlag = 0;
IdleFlag = 1;
while(IdleFlag==1)
{
if (START)
{
delay(10); // 延时去抖动
if (START)
StartFlag = 1; // 开始键按下标志
}
if (StartFlag == 1)
{
do
{
P2 = P2&0xFC; // A8=A9=0
P0 = P0&0x00; // 起始地址为0
record(); // 录音开始,存放在地址0处
}
while (START); // 开始键松开
StartFlag = 0;
PR = 1; // 结束录音
PD = 1; // 进入节电状态
delay(500); // 延时500ms再播放录音
EX0 = 1; // 开外部中断0
P2 = P2&0xFC; // A8=A9=0
P0 = P0&0x00; // 起始地址为0
playback(); // 从地址0处进行第一次播放
IdleFlag = 0; // 当前不空闲,按开始键无效
}
}
}
/* 录音函数 */
void record(void)
{
CE = 0;
PD = 0;
PR = 0;
}
/* 放音函数 */
void playback(void)
{
CE = 0;
PD = 0;
PR = 1;
}
yuyin.rar_单片机语音
版权申诉
190 浏览量
2022-09-19
16:15:10
上传
评论
收藏 2KB RAR 举报
钱亚锋
- 粉丝: 86
- 资源: 1万+
最新资源
- 微软常用运行库 游戏运行库 VC++各个版本
- 微信小程序开发教程.pptx
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- 锐捷网络认证中心网络管理.pdf
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- SD8233LF是一款用于单按键触摸及接近感应开关,其用途是替代传统的机械型开关芯片IC
- 基于YOLOv5的烟雾火焰检测算法研究
- 基于STM32的联合调试侦听设备解决方案原理图PCB源文件调试工具视频(大赛作品)
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0