标题:
一个基于单片机的MY1690语音播放系统源程序
[打印本页]
作者:
jiazhengjing
时间:
2017-5-14 18:25
标题:
一个基于单片机的MY1690语音播放系统源程序
这是我毕业设计的题目餐厅语音播放系统的码源,用keil编的,资料包括所使用的元器件和语音模块的说明说和电路图。
0.png
(69.42 KB, 下载次数: 147)
下载附件
2017-5-14 18:50 上传
单片机源程序如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar yytable[]={0x7e,0x05,0x41,0x00,0x0b,0x4f,0xef, //请
0x7e,0x05,0x41,0x00,0x00,0x44,0xef, //0
0x7e,0x05,0x41,0x00,0x00,0x44,0xef, //0
0x7e,0x05,0x41,0x00,0x00,0x44,0xef, //0
0x7e,0x05,0x41,0x00,0x0e,0x4a,0xef, //号顾客
0x7e,0x05,0x41,0x00,0x0c,0x48,0xef, //dao
0x7e,0x05,0x41,0x00,0x00,0x44,0xef, //0
0x7e,0x05,0x41,0x00,0x00,0x44,0xef, //0
0x7e,0x05,0x41,0x00,0x0d,0x49,0xef}; //号餐桌就餐
uchar yinjia[]={0x7e,0x03,0x15,0x16,0xef};
uchar yinjian[]={0x7e,0x03,0x16,0x15,0xef};
uchar xstable[]={0xc7,0Xeb,0xa3,0xb0,0xa3,0xb0,0xa3,0xb0,0xba,0xc5,0xb9,0xcb,0xbf,0xcd,0xa2,0xa0,
0xb5,0xbd,0xa3,0xb0,0xa3,0xb0,0xba,0xc5,0xb2,0xcd,0xd7,0xc0,0xbe,0xcd,0xb2,0xcd};
//请00 0号顾客_ 0x80 0x81 0x82 0x83 0x83 0x84 0x85 0x86
//到00号餐桌就餐
sbit rs=P1^0;
sbit rw=P1^1;
sbit e=P1^2;
sbit psb=P1^3;
void write_12864com(uchar com);
void write_12864dat(uchar dat);
void initial(void);
void display(void);
void send_cmd(uchar dat);
void send_yytable(void);
void Serial_init(void);
//****************************
//在12MHz的晶振下,延时5us
//*****************************
void delay_50us(uint t)
{
uchar j;
for (; t>0;t--);
for (j=19; j>0;j--);
}
//****************************
//在12MHz的晶振下,延时50ms
//*****************************
void delay_50ms(uint t)
{
uint j;
for (; t>0;t--);
for (j=6245; j>0;j--);
}
void Delay_Ms(int z)
{
int x=0 , y=0;
for(x=110 ; x>0 ;x--)
for(y=z; y>0;y-- );
}
void main ()
{ uchar b;
uint i;
uint Key_flag;
uchar key_l;
uchar key_h;
uchar key;
uchar xs7=0xb0;
uchar xs5=0xb0;
uchar xs3=0xb0;
uchar yy11=0x00;
uchar yy18=0x00;
uchar yy25=0x00;
uchar jy ;
Key_flag=0;
Serial_init();//串口初始化
initial();//液晶初始化
display();
while(1)
{ //jianpan
P2=0xf0;
key_l=P2;
key=0x00;
key_l=key_l&0xf0; //
if (key_l!=0xf0)
{
delay_50us(100);
if (key_l!=0xf0)
{
key_l=P2&0xf0;
key_l=key_l|0x0f;
P2=key_l;
key_h=P2;
key_h=key_h&0x0f;
key_l=key_l&0xf0;
key=key_l+key_h;
}
}
switch (key)
{
case 0xee:
if (Key_flag%2==0) //Key_flag偶数
{Key_flag++;
xstable[19]=0xb1; //显示餐桌号1_
yytable[46]=0x01; //语音餐桌号1_
yytable[47]=0x45;
display();
delay_50ms(50000) ;
}
else //(Key_flag%2==0) Key1_flag奇数
{
Key_flag++;
xstable[21]=0xb1; //显示餐桌号_1
yytable[53]=0x01; //语音餐桌号_1
yytable[54]=0x45;
display();
delay_50ms(50000) ;
}
break;
case 0xde:
if(Key_flag%2==0) //Key_flag偶数
{Key_flag++;
xstable[19]=0xb2; //显示餐桌号2_
yytable[46]=0x02; //语音餐桌号2_
yytable[47]=0x46;
display();
delay_50ms(50000) ;}
else //Key1_flag偶数
{Key_flag++;
xstable[21]=0xb2; //显示餐桌号_2
yytable[53]=0x02; //语音餐桌号_2
yytable[54]=0x46;
display();
delay_50ms(50000) ;
} break;
case 0xbe:
if (Key_flag%2==0) //Key_flag偶数
{Key_flag++;
xstable[19]=0xb3; //显示餐桌号3_
yytable[46]=0x03; //语音餐桌号3_
yytable[47]=0x47;
display();
delay_50ms(50000) ;}
else //Key1_flag奇数
{Key_flag++;
xstable[21]=0xb3; //显示餐桌号_3
yytable[53]=0x03; //语音餐桌号_3
yytable[54]=0x47;
display();
delay_50ms(50000) ;
} break;
case 0x7e: xs7=0xb0;
xs5=0xb0;
xs3=0xb0;
yy25=0x00;
yy18=0x00;
yy11=0x00;
xstable[7]=0xb0; //顾客号归零
xstable[5]=0xb0;
xstable[3]=0xb0;
yytable[25]=0x00;
yytable[26]=0x44;
yytable[18]=0x00;
yytable[19]=0x44;
yytable[11]=0x00;
yytable[12]=0x44;
Key_flag=0;
display();
break;
case 0xed:;
if (Key_flag%2==0) //Key_flag奇数
{Key_flag++;
xstable[19]=0xb4; //显示餐桌号4_
yytable[46]=0x04; //语音餐桌号4_
yytable[47]=0x40;
display();
delay_50ms(50000) ;}
else //Key1_flag偶数
{Key_flag++;
xstable[21]=0xb4; //显示餐桌号_4
yytable[53]=0x04; //语音餐桌号_4
yytable[54]=0x40;
display();
delay_50ms(50000) ;
} break;
case 0xdd:
if (Key_flag%2==0) //Key_flag奇数
{Key_flag++;
xstable[19]=0xb5; //显示餐桌号5_
yytable[46]=0x05; //语音餐桌号5_
yytable[47]=0x41;
display();
delay_50ms(50000) ;}
else //Key1_flag偶数
{Key_flag++;
xstable[21]=0xb5; //显示餐桌号_5
yytable[53]=0x05; //语音餐桌号_5
yytable[54]=0x41;
display();
delay_50ms(50000) ;
} break;
case 0xbd:
if (Key_flag%2==0) //Key_flag奇数
{Key_flag++;
xstable[19]=0xb6; //显示餐桌号6_
yytable[46]=0x06; //语音餐桌号6_
yytable[47]=0x42;
display();
delay_50ms(50000) ;}
else //Key1_flag偶数
{Key_flag++;
xstable[21]=0xb6; //显示餐桌号_6
yytable[53]=0x06; //语音餐桌号_6
yytable[54]=0x42;
display();
delay_50ms(50000) ;
} break;
case 0x7d:
if (xs7==0xb9)
{
if (key_l!=0xf0)
{
delay_50us(100);
if (key_l!=0xf0)
{
xs7=0xb0;
xstable[7]=xs7;
xs5++;
xstable[5]=xs5; //? 显示顾客号0X0变为0+0
yy25=0x00;
yytable[25]=yy25; // 语音顾客号009变为000
yytable[26]=0x44;
yy18++;
yytable[18]=yy18; //? 语音顾客号0X0变为0+0
jy=0x05^0x41^yy18;
yytable[19]=jy;
display();}
}}
else if (xs5==0xb9)
{
if (key_l!=0xf0)
{
delay_50us(100);
if (key_l!=0xf0)
{
xs5=0xb0;
xstable[5]=xs5;
xs3++;
xstable[3]=xs3;
yy18=0x00;
yytable[19]=0x44;
yytable[18]=yy18; //? 语音顾客号X90变为X00
yy11++;
yytable[11]=yy11; // 语音顾客号X00变+00
jy=0x05^0x41^yy11;
yytable[12]=jy;
display();}
}}
else
{Key_flag++;
yy25++;
yytable[25]=yy25; //? 语音播放顾客号000+1
jy=0x05^0x41^yy25;
yytable[26]=jy;
xs7++;
xstable[7]=xs7; //显示屏顾客号000+1
delay_50ms(2000) ;
display();
send_yytable();}
break;
case 0xeb:
if (Key_flag%2==0) //Key_flag奇数
{ Key_flag++;
xstable[19]=0xb7; //显示餐桌号7_
yytable[46]=0x07; //语音餐桌号7_
yytable[47]=0x43;
display();
delay_50ms(50000) ;}
else //Key1_flag偶数
{ Key_flag++;
xstable[21]=0xb7; //显示餐桌号_7
yytable[53]=0x07; //语音餐桌号_7
yytable[54]=0x43;
display();
delay_50ms(50000) ;
} break;
case 0xdb:
if (Key_flag%2==0) //Key_flag奇数
{Key_flag++;
xstable[19]=0xb8; //显示餐桌号8_
yytable[46]=0x08; //语音餐桌号8_
yytable[47]=0x4c;
display();
delay_50ms(50000) ;}
else //Key1_flag偶数
{Key_flag++;
xstable[21]=0xb8; //显示餐桌号_8
yytable[53]=0x08; //语音餐桌号_8
yytable[54]=0x4c;
display();
delay_50ms(50000) ;
} break;
case 0xbb:
if (Key_flag%2==0) //Key_flag奇数
{
Key_flag++;
xstable[19]=0xb9; //显示餐桌号9_
yytable[46]=0x09; //语音餐桌号9_
yytable[47]=0x4d;
display();
delay_50ms(50000) ;}
else //Key1_flag偶数
{Key_flag++;
xstable[21]=0xb9; //显示餐桌号_9
yytable[53]=0x09; //语音餐桌号_9
yytable[54]=0x4d;
display();
delay_50ms(50000) ;
}break;
case 0x7b:
for (i=0;i<5;i++)
{ b=yinjia[i];
send_cmd(b);}break;
case 0xe7:
for (i=0;i<5;i++)
{ b=yinjian[i];
send_cmd(b);}break;
case 0xd7:
if (Key_flag%2==0) //Key_flag奇数
{Key_flag++;
xstable[19]=0xb0; //显示餐桌号0_
yytable[46]=0x00; //语音餐桌号0_
yytable[47]=0x44;
display();
delay_50ms(50000) ;}
else //Key1_flag偶数
{Key_flag++;
xstable[21]=0x00; //显示餐桌号_0
yytable[53]=0x00; //语音餐桌号_0
yytable[54]=0x44;
display();
delay_50ms(50000) ;
}break;
case 0xb7: Key_flag++;
yy25--;
yytable[25]=yy25; //? 语音播放顾客号000-1
jy=0x05^0x41^yy25;
yytable[26]=jy;
xs7--;
xstable[7]=xs7; //显示屏顾客号000-1
display();
send_yytable();
delay_50ms(50000) ;
break;
}
}}
void write_12864com (uchar com)
{
rw=0;
rs=0;
delay_50us(1);
P0=com;
e=1;
delay_50us(10);
e=0;
delay_50us(2);
}
void write_12864dat (uchar dat)
{
rw=0;
rs=1;
delay_50us(1);
P0=dat;
e=1;
delay_50us(10);
e=0;
delay_50us(2);
}
void initial(void)
{ delay_50ms(2);
write_12864com(0x30);
delay_50us(4);
write_12864com(0x30);
delay_50us(4);
write_12864com(0x0c); //显示开关,光标,白底都开,00001111,0c 00001100光标和白底都关了
delay_50us(4);
write_12864com(0x01);//清屏
delay_50us(300);
write_12864com(0x06);//模式设置
delay_50us(10);
}
void display(void)
{
uchar i;
write_12864com(0x80);
delay_50us(1);
for(i=0;i<32;i++)
{
write_12864dat(xstable[i]);
delay_50us(1);
}}
/******************************************************************************
- 功能描述: 串口1初始化
- 注: 设置为9600波特率
******************************************************************************/
void Serial_init(void)
{
TMOD = 0x20; // 设置 T1 为波特率发生器
SCON = 0x50; // 0101,0000 8位数据位, 无奇偶校验
PCON = 0x00; //PCON=0;
TH1=0xfd;//设置为9600波特率
TL1=0xfd;
TR1 = 1; //定时器1打开
REN = 1; //串口1接收使能
ES = 1; //串口1中断使能
}
/*********************************************************************************
* 【函 数 名】: void send_cmd(uchar dat)
* 【功 能】: 串口发送数据命令
**********************************************************************************/
void send_cmd(uchar dat)
{
SBUF=dat; //发送指令到SBUF
while(!TI); //等待发送结束
TI=0; //清除结束标志,以便再发送数据
}
void send_yytable(void)
{ uchar a;
Delay_Ms(500);
a=yytable[0];
send_cmd(a);
a=yytable[1];
send_cmd(a);
a=yytable[2];
send_cmd(a);
a=yytable[3];
send_cmd(a);
a=yytable[4];
send_cmd(a);
a=yytable[5];
send_cmd(a);
a=yytable[6];
send_cmd(a);
Delay_Ms(800);
a=yytable[7];
send_cmd(a);
a=yytable[8];
send_cmd(a);
a=yytable[9];
send_cmd(a);
a=yytable[10];
send_cmd(a);
a=yytable[11];
send_cmd(a);
a=yytable[12];
send_cmd(a);
a=yytable[13];
send_cmd(a);
Delay_Ms(800);
a=yytable[14];
send_cmd(a);
a=yytable[15];
send_cmd(a);
a=yytable[16];
send_cmd(a);
a=yytable[17];
send_cmd(a);
a=yytable[18];
send_cmd(a);
a=yytable[19];
send_cmd(a);
a=yytable[20];
send_cmd(a);
Delay_Ms(800);
a=yytable[21];
send_cmd(a);
a=yytable[22];
send_cmd(a);
a=yytable[23];
send_cmd(a);
a=yytable[24];
send_cmd(a);
a=yytable[25];
send_cmd(a);
a=yytable[26];
send_cmd(a);
a=yytable[27];
send_cmd(a);
Delay_Ms(800);
a=yytable[28];
send_cmd(a);
a=yytable[29];
send_cmd(a);
a=yytable[30];
send_cmd(a);
a=yytable[31];
send_cmd(a);
a=yytable[32];
send_cmd(a);
a=yytable[33];
send_cmd(a);
a=yytable[34];
send_cmd(a);
Delay_Ms(1300);
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
语音播放系统.rar
(7.31 MB, 下载次数: 89)
2017-5-14 18:25 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
jxdianqi
时间:
2017-5-15 10:56
沙发,下载学习,谢谢楼主
作者:
fefen0
时间:
2017-5-16 17:12
如何给顾客编号呢。。。
作者:
值班室
时间:
2017-6-4 10:26
刚买了这样的语音模块,正好学习,谢谢
作者:
luojunhaolq
时间:
2017-9-7 22:01
学习中!
作者:
晋梅
时间:
2018-1-13 19:25
学习下!
作者:
meung
时间:
2018-2-7 16:47
谢谢楼主!电路原理图和pcb图不知为何打开是一片空白。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1