效果图:
淘宝网址:http://item.taobao.com/item.htm?id=15953525846
程序:
- #include <reg52.h>
- #include <intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- //录音和放音键IO口定义:
- sbit AN=P2^6;//放音键控制接口
- sbit set_key=P2^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 STOP=P3^4; //4004复位
- sbit LED1 =P1^6; //录音指示灯
- //===============================LCD1602接口定义=====================
- /*-----------------------------------------------------
- |DB0-----P2.0 | DB4-----P2.4 | RW-------P0.1 |
- |DB1-----P2.1 | DB5-----P2.5 | RS-------P0.2 |
- |DB2-----P2.2 | DB6-----P2.6 | E--------P0.0 |
- |DB3-----P2.3 | DB7-----P2.7 | 注意,P0.0到P0.2需要接上拉电阻
- ---------------------------------------------------
- =============================================================*/
- #define LCM_Data P0 //LCD1602数据接口
- sbit LCM_RW = P2^3; //读写控制输入端,LCD1602的第五脚
- sbit LCM_RS = P2^4; //寄存器选择输入端,LCD1602的第四脚
- sbit LCM_E = P2^2; //使能信号输入端,LCD1602的第6脚
- //***************函数声明************************************************
- void WriteDataLCM(uchar WDLCM);//LCD模块写数据
- void WriteCommandLCM(uchar WCLCM,BuysC); //LCD模块写指令
- uchar ReadStatusLCM(void);//读LCD模块的忙标
- void DisplayOneChar(uchar X,uchar Y,uchar ASCII);//在第X+1行的第Y+1位置显示一个字符
- void LCMInit(void);
- void DelayUs(uint us); //微妙延时程序
- void DelayMs(uint Ms);//毫秒延时程序
- void init_t0();//定时器0初始化函数
- void setkey_treat(void);//录音键处理程序
- void upkey_treat(void);//播放键处理程序
- void display();//显示处理程序
- 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位数据
- void isd_setplay(uchar adl,uchar adh);
- void isd_play();
- //程序中的一些常量定义
- uint time_total,st_add,end_add=0;
- uint adds[25];//25段语音的起始地址暂存
- uint adde[25];//25段语音的结束地址暂时
- uchar t0_crycle,count,count_flag,flag2,flag3,flag4;
- uchar second_count=170,msecond_count=0;
- //second_count为芯片录音的起始地址,起始地址本来是A0,也就是160,
- //我们从170开始录音吧。
- #define Busy 0x80 //用于检测LCM状态字中的Busy标识
- /*===========================================================================
- 主程序
- ==============&#