五邑大学本科毕业设计
附录1 总程序
#include
#define uchar unsigned char #define uint unsigned int //录音和放音键IO口定义:
sbit p_r =P0^0;//录音放音切换接口 sbit key2=P1^7;//放音键控制接口
sbit key1=P1^6;//录音键控制口 //液晶控制端口定义
#define LCD_data P2 //LCD数据口 #define R_data P0 //站名数据接收口 sbit LCD_RS = P0^5; //寄存器选择输入 sbit LCD_RW = P0^6; //液晶读/写控制 sbit LCD_EN = P0^7; //液晶使能控制 // ISD4004控制口定义: sbit SS =P1^0; //4004片选 sbit MOSI=P1^1; //4004数据输入
sbit MISO=P1^2; //4004数据输出 sbit SCLK=P1^3; //ISD4004时钟 sbit INT =P1^4; //4004中断 sbit LED1 =P3^6; //录音指示灯
//***************函数声明************************************************
void DelayUs(uint us); //微妙延时程序 void DelayMs(uint Ms);//毫秒延时程序
void init_t0();//定时器0初始化函数
void setkey_treat(void);//录音键处理程序 void upkey_treat(void);//播放键处理程序
void isd_setrec(uchar adl,uchar adh);//发送setrec指令 void isd_rec();//发送rec指令
void isd_stop();//stop指令(停止当前操作) void isd_powerup();//发送上电指令 void isd_stopwrdn();//发送掉电指令
void isd_send(uchar isdx);//spi串行发送子程序,8位数据
第 31页
五邑大学本科毕业设计
void isd_setplay(uchar adl,uchar adh); //放音传输数据函数 void isd_play(); //放音指令函数
//***************液晶函数声明******************************************** void lcd_wcmd(uchar cmd); //液晶指令函数 void lcd_wdat(uchar dat); //液晶数据函数 void lcd_init(); //液晶初始化函数 void init(); //计时器初始化函数 void keyscan(); //按键扫描函数 void lcd_pos(uchar X,uchar Y); //液晶坐标函数 void lcd_ctrl(); //LCD液晶函数 void rece_data(); //接收数据函数
//**************程序中的一些常量定义****************** uint time_total,st_add,end_add=0;
uint adds[5]={170,320,470,620,770};//5段语音的起始地址暂存
uchar t_1ms,t0_crycle,count=0,count_old,count_flag=5,flag1,flag2=1,flag3,flag4; uchar second_count=170,msecond_count=0;
//second_count为芯片录音的起始地址,起始地址本来是A0,也就是160, //我们从170开始录音
//****************液晶变量定义****************************************** uchar r_old; //前一次接收端口数据 uchar num=0; //当前液晶显示状态 uchar num_old; //上一次液晶显示状态 uchar key1_flag=0; //按键1标记 uchar key2_flag=0; //按键2标记 uchar rec_flag =0; //录音界面标志
//****************液晶显示数据*******************************************
uchar code DIS10[][16] = {{\欢迎乘坐~~~~\五邑华侨广场到了\梁启超故居到了\开平碉楼到了\录音界面~~~~\录音界面~~~~\录音界面~~~~\
uchar code DIS20[][16] = {{\五邑大学观光车\
uchar code DIS30[][16] = {{\祝同学们旅途愉快\祝旅客们旅途愉快\祝旅客们旅途愉快\祝旅客们旅途愉快\请按下按键录音\录音进行中......\测试放音中%uchar code DIS40[][16] = {{\五邑大学观光团\侨乡山水风情画!\侨乡山水风情画!\侨乡山水风情画!\等候录音...\
/*===================================================================
第 32页
五邑大学本科毕业设计
========
==**************************主程序*****************************************== =============================================================================*/ void main(void) {
LED1=0;//灭录音指示灯 flag2=1; //否为录音好后的第一次放音标记 flag3=0; //录音键和放音键互锁标记 INT=1; //ISD4004溢出标记 time_total=0;//录音地址从170开始,对应的单片机开始计时的时间就是340*0.1秒 adds[0]=170; count=1;
init_t0();//定时器初始化 lcd_ctrl(); //液晶初始化
while(1) { keyscan(); if(num_old!=num) //判断接收到的信息跟前一次是否相同,相同则不进入液晶显示。 报。
lcd_ctrl();
if(key2_flag==1) //判断接收到的信息跟前一次是否相同,相同则不进入语音播 { key2_flag=0; upkey_treat();//放音键处理 }
if( key1_flag==1)
{ key1_flag=0; setkey_treat();//录音键处理 } } }
//******************************************* //录音键处理程序
第 33页
五邑大学本科毕业设计
//从指定地址开始录音的程序就是在这段里面
void setkey_treat(void) {
DelayUs(1);
if(flag3==0)//录音键和放音键互锁,录音好后,禁止再次录音。如果要再次录音,那就要复位单片机,重新开始录音 { flag1=1;//录音完毕标记设定
if(count==0)//判断是否为上电或复位以来第一次按录音键 {
st_add=170; } else { st_add=adds[count];//每段语音的起始地址暂时 }//每段语言间隔50个地址
if(count>=5)//判断语音段数时候超过5段 //本程序只录音5段
{//如果超过5段,则覆盖之前的语音,从新开始录音 count=0; st_add=170; time_total=0; }
isd_powerup(); //key2键按下,ISD上电并延迟50ms isd_stopwrdn(); isd_powerup();
LED1=1;//录音指示灯亮,表示录音模式
isd_setrec(st_add&0x00ff,st_add>>8); //从指定的地址 if(INT==1)// 判定芯片有没有溢出 {
isd_rec(); //发送录音指令 }
TR0=1;//开计时器
while(time_total<=200);//等待本次录音结束 time_total=0; flag1=0; //20s录音结束标志
第 34页
五邑大学本科毕业设计
TR0=0;//录音结束后停止计时
isd_stop(); //发送4004停止命令
LED1=0; //录音完毕,LED熄灭 count++;//录音段数自加
count_flag=count;//录音段数寄存 flag2=1; } }
//================================================= //放音机处理程序
//从指定地址开始放本段语音就是这段程序 void upkey_treat(void) { uchar ovflog; DelayUs(1); if(flag2==1)//判断是否为录音好后的第一次放音 { count=0;//从第0段开始播放 }
isd_powerup(); //key2键按下,ISD上电并延迟50ms isd_stopwrdn(); isd_powerup();
st_add=adds[count];//送当前语音的起始地址 isd_setplay(st_add&0x00ff,st_add>>8); //发送setplay指令,从指定地址开始放音 isd_play(); //发送放音指令 DelayUs(20); while(INT==1); //等待放音完毕的EOM中断信号 isd_stop(); //放音完毕,发送stop指令 flag2=0; flag3=1;
if(count>=count_flag)//如果播放到最后一段后还按加键,则从第一段重新播放 {
count=0; } }
/*===========================================*/
第 35页
百度搜索“70edu”或“70教育网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,70教育网,提供经典综合文库戚锦拓 五邑大学毕业论文(8)在线全文阅读。
相关推荐: