📄 text1.c
字号:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define hi 0x3c
#define lo 0xb0
sbit P37=P3^7;
sbit P24=P2^4;
sbit P25=P2^5;
sbit P26=P2^6;
sbit P27=P2^7;
sbit P10=P1^0;
sbit ISD4004_SS=P1^2; //语音
sbit ISD4004_MOSI=P1^1;
sbit ISD4004_SCLK=P1^3;
code unsigned char table1[]={0,1,2,3,4,5,6,7,8,9,10,11} ;
unsigned char key_flag, key_count,t0_count,mask=0xee,key;
code unsigned char table[]={0x00,0x00,0x00,0x65, //语音地址表
0x00,0xc9,0x01,0x2d,
0x01,0x91,0x01,0xf5,
0x02,0x59,0x02,0xbd,
0x03,0x21,0x03,0x85,
0x03,0xb7,0x03,0xe8,
0x04,0x1a,0x04,0x4c,
0x04,0x7e,0x04,0xb0,
0x04,0xe2,0x05,0x14,
0x05,0x46,0x05,0x78,
0x05,0xaa,0x05,0xdc,
0x06,0x0e,0x06,0x40,
0x06,0x72,0x06,0xa4,
0x06,0xd6,0x07,0x08,
0x07,0x3a,0x07,0x6c
};
void t1() interrupt 1 //定时中断2 函数:防键抖动
{TH0=hi;TL0=lo;key_count++;t0_count++;
if(t0_count==20)t0_count=0;
if(key_count>10)key_count=10;
}
//============================================================
//函数名称:void delay25ms()
//函数功能:延迟25ms
//日期:2007.03.31
//============================================================
void delay25ms()
{
unsigned int i;
for(i=0;i<=5000;i++);
}
//===========================================================
//函数名称:void ISD4004_ISD4004_Send(unsigned char m)
//函数功能:给ISD4004送命令
//日期:2007.03.31
//===========================================================
void ISD4004_Send(unsigned char m)
{
unsigned char i,j;
for(i=0;i<8;i++)
{
ISD4004_SCLK = 0;
for(j=0;j<5;j++);
if(m&0x01)
ISD4004_MOSI=1;
else
ISD4004_MOSI=0;
ISD4004_SCLK=1;
for(j=0;j<5;j++);
m=m>>1;
}
}
//===========================================================
//函数名称:void ISD4004_Powerup()
//函数功能:ISD4004上电
//日期:2007.03.31
//===========================================================
void ISD4004_Powerup()
{
ISD4004_SS=0; //开片选
ISD4004_Send(0x20);
delay25ms();
ISD4004_SS=1; //关片选
}
//============================================================
//函数名称:void ISD4004_Stop()
//函数功能:ISD4004停止
//日期:2007.03.31
//============================================================
void ISD4004_Stop()
{
ISD4004_SS=0;
ISD4004_Send(0x30);
ISD4004_SS=1;
}
//===========================================================
//函数名称:void ISD4004_Powerdown()
//函数功能:下电 停止并掉电
//日期:2007.03.31
//===========================================================
void ISD4004_Powerdown()
{
ISD4004_SS=0;
ISD4004_Send(0x10);
ISD4004_SS=1;
}
//==========================================================
//函数名称:void ISD4004_Play(unsigned char addr_h,unsigned char addr_l)
//函数功能:放音
//日期:2007.03.31
//==========================================================
void ISD4004_Play(unsigned char addr_h,unsigned char addr_l)
{
ISD4004_SS=0;
ISD4004_Send(addr_l);
ISD4004_Send(addr_h);
ISD4004_Send(0xe0);
ISD4004_SS=1;
ISD4004_SS=0;
ISD4004_Send(0xf0);
ISD4004_SS=1;
}
//================================================================
void ISD4004_Rec(unsigned char addr_h,unsigned char addr_l)
{
ISD4004_SS=0;
ISD4004_Send(addr_l);
ISD4004_Send(addr_h);
ISD4004_Send(0xa0);
ISD4004_SS=1;
ISD4004_SS=0;
ISD4004_Send(0xb0);
ISD4004_SS=1;
}
//================================================================
//函数名称:void fangyin()
//函数功能:语音 addr为地址
//日期:2007.03.31
//================================================================
void fangyin(uchar addr)
{
uchar a;
ISD4004_Powerup();
delay25ms();
a = addr * 2;
ISD4004_Play(table[a],table[a+1]);
}
//================================================================
//函数名称:void luyin()
//函数功能:语音 addr为地址
//日期:2007.03.31
//================================================================
void luyin(uchar addr)
{
uchar a;
ISD4004_Powerup();
delay25ms();
delay25ms();
a = addr * 2;
ISD4004_Rec(table[a],table[a+1]);
}
unsigned char get_char(void)
{unsigned char key_code;
static unsigned char column=0;
if (P37==0 && key_flag==1){key_code=column;key_flag=0;key_count=0;}
else key_code=0xff;
mask=_crol_(mask,1);
P24=mask&0x10;P25=mask&0x20;P26=mask&0x40;P27=mask&0x80;
column++;
if(column>3)column=0;
return(key_code);}
void key_func(key)
{switch (key)
{case 0: ISD4004_Powerup();delay25ms();luyin(0);break;
case 1: delay25ms();fangyin(0);break;
case 2: break;
case 3: ISD4004_Stop();ISD4004_Powerdown();break;
default: break; } }
void main()
{
TMOD=0x11;TH0=hi;TL0=lo;EA=1;ET0=1;ET1=1;TR0=1;
TH0=hi;TL0=lo;
P10=0;
/****************** 语音模块************************/
while(1)
{
key=get_char( );key_func(key);
if(key_flag==0 && key_count>=10)key_flag=1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -