找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7743|回复: 7
打印 上一主题 下一主题
收起左侧

一个基于单片机的MY1690语音播放系统源程序

[复制链接]
跳转到指定楼层
楼主
这是我毕业设计的题目餐厅语音播放系统的码源,用keil编的,资料包括所使用的元器件和语音模块的说明说和电路图。




单片机源程序如下:
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar yytable[]={0x7e,0x05,0x41,0x00,0x0b,0x4f,0xef,         //请
  5.                  0x7e,0x05,0x41,0x00,0x00,0x44,0xef,         //0
  6.                              0x7e,0x05,0x41,0x00,0x00,0x44,0xef,         //0
  7.                              0x7e,0x05,0x41,0x00,0x00,0x44,0xef,         //0
  8.                              0x7e,0x05,0x41,0x00,0x0e,0x4a,0xef,         //号顾客
  9.                                  0x7e,0x05,0x41,0x00,0x0c,0x48,0xef,         //dao
  10.                              0x7e,0x05,0x41,0x00,0x00,0x44,0xef,         //0
  11.                              0x7e,0x05,0x41,0x00,0x00,0x44,0xef,         //0
  12.                              0x7e,0x05,0x41,0x00,0x0d,0x49,0xef}; //号餐桌就餐
  13. uchar yinjia[]={0x7e,0x03,0x15,0x16,0xef};
  14. uchar yinjian[]={0x7e,0x03,0x16,0x15,0xef};
  15. uchar xstable[]={0xc7,0Xeb,0xa3,0xb0,0xa3,0xb0,0xa3,0xb0,0xba,0xc5,0xb9,0xcb,0xbf,0xcd,0xa2,0xa0,
  16.                  0xb5,0xbd,0xa3,0xb0,0xa3,0xb0,0xba,0xc5,0xb2,0xcd,0xd7,0xc0,0xbe,0xcd,0xb2,0xcd};
  17. //请00 0号顾客_        0x80 0x81 0x82 0x83 0x83 0x84 0x85 0x86
  18. //到00号餐桌就餐

  19. sbit rs=P1^0;
  20. sbit rw=P1^1;
  21. sbit e=P1^2;
  22. sbit psb=P1^3;

  23. void write_12864com(uchar com);
  24. void write_12864dat(uchar dat);
  25. void initial(void);
  26. void display(void);
  27. void send_cmd(uchar dat);
  28. void send_yytable(void);
  29. void Serial_init(void);

  30. //****************************
  31. //在12MHz的晶振下,延时5us
  32. //*****************************
  33. void delay_50us(uint t)
  34. {
  35.     uchar j;
  36.     for (; t>0;t--);
  37.     for (j=19; j>0;j--);
  38. }
  39. //****************************
  40. //在12MHz的晶振下,延时50ms
  41. //*****************************
  42. void delay_50ms(uint t)
  43. {
  44.     uint j;
  45.     for (; t>0;t--);
  46.     for (j=6245; j>0;j--);
  47. }
  48.   void Delay_Ms(int z)
  49. {
  50.         int   x=0 , y=0;
  51.         for(x=110 ; x>0 ;x--)
  52.         for(y=z; y>0;y-- );
  53. }


  54. void main ()
  55. {  uchar b;
  56.    uint i;
  57.   
  58.    
  59.    uint  Key_flag;
  60.    uchar key_l;
  61.    uchar key_h;
  62.    uchar key;
  63.    uchar xs7=0xb0;
  64.    uchar xs5=0xb0;
  65.    uchar xs3=0xb0;
  66.    uchar yy11=0x00;
  67.    uchar yy18=0x00;
  68.    uchar yy25=0x00;
  69.    uchar jy        ;
  70.    Key_flag=0;
  71.    Serial_init();//串口初始化         
  72.    initial();//液晶初始化
  73.    display();
  74.    while(1)
  75.    {                  //jianpan
  76.          
  77.             
  78.                 P2=0xf0;
  79.                 key_l=P2;
  80.                 key=0x00;
  81.             key_l=key_l&0xf0; //
  82.          if (key_l!=0xf0)
  83.             {
  84.                delay_50us(100);
  85.                    if (key_l!=0xf0)
  86.                    {  
  87.                       key_l=P2&0xf0;
  88.                       key_l=key_l|0x0f;
  89.                       P2=key_l;
  90.                       key_h=P2;
  91.                       key_h=key_h&0x0f;
  92.                       key_l=key_l&0xf0;
  93.                       key=key_l+key_h;
  94.                           
  95.                    }
  96.                   

  97.             }
  98.                     
  99.          switch (key)
  100.          {
  101.             case 0xee:          
  102.                               if (Key_flag%2==0)                                   //Key_flag偶数
  103.                                 {Key_flag++;
  104.                                  xstable[19]=0xb1;                   //显示餐桌号1_
  105.                                  yytable[46]=0x01;           //语音餐桌号1_
  106.                                  yytable[47]=0x45;
  107.                                   display();
  108.                                    delay_50ms(50000) ;
  109.                                 }
  110.                                  else //(Key_flag%2==0)                                  Key1_flag奇数
  111.                                 {         
  112.                                  Key_flag++;
  113.                                  xstable[21]=0xb1;                   //显示餐桌号_1
  114.                                  yytable[53]=0x01;                   //语音餐桌号_1
  115.                                  yytable[54]=0x45;
  116.                                
  117.                                  display();
  118.                                    delay_50ms(50000) ;
  119.    }
  120.    break;       
  121.            case 0xde:
  122.                                     
  123.                              if(Key_flag%2==0)                                   //Key_flag偶数
  124.                                 {Key_flag++;
  125.                                  xstable[19]=0xb2;                   //显示餐桌号2_
  126.                                  yytable[46]=0x02;           //语音餐桌号2_
  127.                                  yytable[47]=0x46;
  128.                                  display();
  129.                                  delay_50ms(50000)  ;}
  130.                                  else                                  //Key1_flag偶数
  131.                                 {Key_flag++;
  132.                                  xstable[21]=0xb2;                   //显示餐桌号_2
  133.                                  yytable[53]=0x02;                   //语音餐桌号_2
  134.                                  yytable[54]=0x46;
  135.                                  display();
  136.                                  delay_50ms(50000)  ;
  137.    } break;
  138.                 case 0xbe:
  139.                                     
  140.                              if (Key_flag%2==0)                                   //Key_flag偶数
  141.                                 {Key_flag++;
  142.                                  xstable[19]=0xb3;                   //显示餐桌号3_
  143.                                  yytable[46]=0x03;           //语音餐桌号3_
  144.                                  yytable[47]=0x47;
  145.                                  display();
  146.                                  delay_50ms(50000)  ;}
  147.                                  
  148.                                  else                                  //Key1_flag奇数
  149.                                 {Key_flag++;
  150.                                  xstable[21]=0xb3;                   //显示餐桌号_3
  151.                                  yytable[53]=0x03;                   //语音餐桌号_3
  152.                                  yytable[54]=0x47;
  153.                                  display();
  154.                                  delay_50ms(50000)  ;
  155.    } break;
  156.            case 0x7e:          xs7=0xb0;
  157.                                   xs5=0xb0;
  158.                                   xs3=0xb0;
  159.                                   yy25=0x00;
  160.                                   yy18=0x00;
  161.                                   yy11=0x00;
  162.                       xstable[7]=0xb0;                    //顾客号归零
  163.                           xstable[5]=0xb0;
  164.                                   xstable[3]=0xb0;
  165.                                   yytable[25]=0x00;
  166.                                   yytable[26]=0x44;
  167.                                   yytable[18]=0x00;
  168.                                   yytable[19]=0x44;
  169.                                   yytable[11]=0x00;
  170.                                   yytable[12]=0x44;
  171.                                   Key_flag=0;         
  172.                                   display();
  173.                                   break;
  174.                 case 0xed:;
  175.                                
  176.                           if (Key_flag%2==0)                                   //Key_flag奇数
  177.                                 {Key_flag++;
  178.                                  xstable[19]=0xb4;                   //显示餐桌号4_
  179.                                  yytable[46]=0x04;           //语音餐桌号4_
  180.                                  yytable[47]=0x40;
  181.                                  display();
  182.                                  delay_50ms(50000)  ;}
  183.                                  else                                  //Key1_flag偶数
  184.                                 {Key_flag++;
  185.                                  xstable[21]=0xb4;                   //显示餐桌号_4
  186.                                  yytable[53]=0x04;                   //语音餐桌号_4
  187.                                  yytable[54]=0x40;
  188.                                  display();
  189.                                  delay_50ms(50000)  ;
  190.   } break;
  191.                 case 0xdd:
  192.                                  
  193.                          if (Key_flag%2==0)                                   //Key_flag奇数
  194.                                 {Key_flag++;
  195.                                  xstable[19]=0xb5;                   //显示餐桌号5_
  196.                                  yytable[46]=0x05;           //语音餐桌号5_
  197.                                  yytable[47]=0x41;
  198.                                  display();
  199.                                  delay_50ms(50000)  ;}
  200.                                  else                                  //Key1_flag偶数
  201.                                 {Key_flag++;
  202.                                  xstable[21]=0xb5;                   //显示餐桌号_5
  203.                                  yytable[53]=0x05;                   //语音餐桌号_5
  204.                                  yytable[54]=0x41;
  205.                                  display();
  206.                                  delay_50ms(50000)  ;
  207.    } break;
  208.                 case 0xbd:
  209.                         
  210.                         if (Key_flag%2==0)                                   //Key_flag奇数
  211.                                 {Key_flag++;
  212.                                  xstable[19]=0xb6;                   //显示餐桌号6_
  213.                                  yytable[46]=0x06;           //语音餐桌号6_
  214.                                  yytable[47]=0x42;
  215.                                  display();
  216.                                  delay_50ms(50000)  ;}
  217.                                 else                                  //Key1_flag偶数
  218.                                 {Key_flag++;
  219.                                  xstable[21]=0xb6;                   //显示餐桌号_6
  220.                                  yytable[53]=0x06;                   //语音餐桌号_6
  221.                                  yytable[54]=0x42;
  222.                                  display();
  223.                                  delay_50ms(50000)  ;
  224.    } break;
  225.                 case 0x7d:       
  226.                 if (xs7==0xb9)         
  227.                      {                               
  228.                                
  229.                         if (key_l!=0xf0)
  230.             {
  231.                delay_50us(100);
  232.                    if (key_l!=0xf0)
  233.                    {
  234.                     xs7=0xb0;  
  235.                     xstable[7]=xs7;
  236.                         xs5++;  
  237.                         xstable[5]=xs5;                   //?         显示顾客号0X0变为0+0  
  238.                     yy25=0x00;
  239.                                 yytable[25]=yy25;                //         语音顾客号009变为000
  240.                             yytable[26]=0x44;
  241.                             yy18++;
  242.                                 yytable[18]=yy18;   //?         语音顾客号0X0变为0+0
  243.                                 jy=0x05^0x41^yy18;
  244.                                 yytable[19]=jy;
  245.                                 display();}
  246.                   }}
  247.                   else if (xs5==0xb9)         
  248.                      {                               
  249.                                
  250.                         if (key_l!=0xf0)
  251.             {
  252.                delay_50us(100);
  253.                    if (key_l!=0xf0)
  254.                    {
  255.                         xs5=0xb0;
  256.                                 xstable[5]=xs5;
  257.                                 xs3++;
  258.                                 xstable[3]=xs3;               
  259.                                 yy18=0x00;
  260.                                 yytable[19]=0x44;
  261.                                 yytable[18]=yy18;   //?         语音顾客号X90变为X00
  262.                         yy11++;
  263.                                 yytable[11]=yy11;                  // 语音顾客号X00变+00
  264.                                 jy=0x05^0x41^yy11;
  265.                                 yytable[12]=jy;
  266.                                 display();}
  267.                   }}
  268.                                  else  
  269.                          {Key_flag++;
  270.                          yy25++;
  271.                                  yytable[25]=yy25;   //?        语音播放顾客号000+1
  272.                                  jy=0x05^0x41^yy25;
  273.                          yytable[26]=jy;
  274.                                  xs7++;
  275.                                  xstable[7]=xs7;                   //显示屏顾客号000+1
  276.                          delay_50ms(2000)  ;
  277.                                   display();
  278.                                   send_yytable();}
  279.                                  break;
  280.                 case 0xeb:
  281.                                
  282.                          if (Key_flag%2==0)                                   //Key_flag奇数
  283.                                 { Key_flag++;
  284.                                  xstable[19]=0xb7;                   //显示餐桌号7_
  285.                                  yytable[46]=0x07;           //语音餐桌号7_
  286.                              yytable[47]=0x43;
  287.                                  display();
  288.                                  delay_50ms(50000)  ;}
  289.                                  else                                  //Key1_flag偶数
  290.                                 { Key_flag++;
  291.                                  xstable[21]=0xb7;                   //显示餐桌号_7
  292.                                  yytable[53]=0x07;                   //语音餐桌号_7
  293.                                  yytable[54]=0x43;
  294.                                  display();
  295.                                  delay_50ms(50000)  ;
  296.    } break;
  297.                 case 0xdb:
  298.                                  
  299.                        if (Key_flag%2==0)                                   //Key_flag奇数
  300.                                 {Key_flag++;
  301.                                  xstable[19]=0xb8;                   //显示餐桌号8_
  302.                                  yytable[46]=0x08;           //语音餐桌号8_
  303.                                  yytable[47]=0x4c;
  304.                                  display();
  305.                                  delay_50ms(50000)  ;}
  306.                                 else                                  //Key1_flag偶数
  307.                                 {Key_flag++;
  308.                                  xstable[21]=0xb8;                   //显示餐桌号_8
  309.                                  yytable[53]=0x08;                   //语音餐桌号_8
  310.                                  yytable[54]=0x4c;
  311.                                  display();
  312.                                  delay_50ms(50000)  ;
  313.    } break;
  314.                 case 0xbb:
  315.                                   
  316.                           if (Key_flag%2==0)                                   //Key_flag奇数
  317.                                 {
  318.                                  
  319.                                  Key_flag++;                        
  320.                                  xstable[19]=0xb9;                   //显示餐桌号9_
  321.                                  yytable[46]=0x09;           //语音餐桌号9_
  322.                                  yytable[47]=0x4d;
  323.                                  display();
  324.                                  delay_50ms(50000)  ;}
  325.                                  else                                  //Key1_flag偶数
  326.                                 {Key_flag++;
  327.                                  xstable[21]=0xb9;                   //显示餐桌号_9
  328.                                  yytable[53]=0x09;                   //语音餐桌号_9
  329.                                  yytable[54]=0x4d;
  330.                                  display();
  331.                                  delay_50ms(50000)  ;
  332.    }break;
  333.                 case 0x7b:
  334.                          for (i=0;i<5;i++)
  335.                   {   b=yinjia[i];
  336.                       send_cmd(b);}break;
  337.                 case 0xe7:
  338.                            for (i=0;i<5;i++)
  339.                   {   b=yinjian[i];
  340.                       send_cmd(b);}break;
  341.                 case 0xd7:
  342.                                   
  343.                           if (Key_flag%2==0)                                   //Key_flag奇数
  344.                                 {Key_flag++;
  345.                                  
  346.                                  xstable[19]=0xb0;                   //显示餐桌号0_
  347.                                  yytable[46]=0x00;           //语音餐桌号0_
  348.                                  yytable[47]=0x44;
  349.                                  display();
  350.                                  delay_50ms(50000)  ;}
  351.                                 else                                  //Key1_flag偶数
  352.                                 {Key_flag++;
  353.                                  xstable[21]=0x00;                   //显示餐桌号_0
  354.                                  yytable[53]=0x00;                   //语音餐桌号_0
  355.                                  yytable[54]=0x44;
  356.                                  display();
  357.                                  delay_50ms(50000)  ;
  358.    }break;
  359.    case 0xb7:        Key_flag++;
  360.                          yy25--;
  361.                                  yytable[25]=yy25;   //?        语音播放顾客号000-1
  362.                                  jy=0x05^0x41^yy25;
  363.                          yytable[26]=jy;
  364.                                  xs7--;
  365.                                  xstable[7]=xs7;                   //显示屏顾客号000-1
  366.                           display();
  367.                                   send_yytable();
  368.                                  delay_50ms(50000)  ;
  369.    
  370.     break;
  371.                   }
  372.   
  373.                                  
  374.    }}                                                          
  375. void write_12864com (uchar com)
  376. {
  377.    rw=0;
  378.    rs=0;
  379.    delay_50us(1);
  380.    P0=com;
  381.    e=1;
  382.    delay_50us(10);
  383.    e=0;
  384.    delay_50us(2);
  385. }
  386. void write_12864dat (uchar dat)
  387. {
  388.    rw=0;
  389.    rs=1;
  390.    delay_50us(1);
  391.    P0=dat;
  392.    e=1;
  393.    delay_50us(10);
  394.    e=0;
  395.    delay_50us(2);
  396. }
  397. void initial(void)
  398. {  delay_50ms(2);
  399.    write_12864com(0x30);
  400.    delay_50us(4);
  401.    write_12864com(0x30);
  402.    delay_50us(4);
  403.    write_12864com(0x0c);  //显示开关,光标,白底都开,00001111,0c 00001100光标和白底都关了
  404.    delay_50us(4);
  405.    write_12864com(0x01);//清屏
  406.    delay_50us(300);
  407.    write_12864com(0x06);//模式设置
  408.    delay_50us(10);
  409. }
  410. void display(void)
  411. {  
  412.    uchar i;
  413.    write_12864com(0x80);
  414.    delay_50us(1);
  415.    for(i=0;i<32;i++)
  416.    {
  417.       write_12864dat(xstable[i]);
  418.           delay_50us(1);
  419. }}
  420. /******************************************************************************
  421. - 功能描述: 串口1初始化
  422. - 注:             设置为9600波特率
  423. ******************************************************************************/
  424. void Serial_init(void)
  425. {
  426.         TMOD = 0x20;                // 设置 T1 为波特率发生器
  427.         SCON = 0x50;                // 0101,0000 8位数据位, 无奇偶校验               
  428.         PCON = 0x00;                //PCON=0;
  429.         TH1=0xfd;//设置为9600波特率
  430.         TL1=0xfd;
  431.     TR1     = 1;                            //定时器1打开
  432.     REN     = 1;                           //串口1接收使能
  433.     ES      = 1;                           //串口1中断使能
  434. }
  435. /*********************************************************************************
  436. * 【函 数 名】: void send_cmd(uchar dat)
  437. * 【功    能】: 串口发送数据命令                                                
  438. **********************************************************************************/
  439. void send_cmd(uchar dat)
  440. {
  441.         SBUF=dat;                         //发送指令到SBUF
  442.         while(!TI);                         //等待发送结束
  443.         TI=0;                                 //清除结束标志,以便再发送数据
  444. }
  445. void send_yytable(void)
  446. {        uchar a;
  447. Delay_Ms(500);
  448.         a=yytable[0];
  449.         send_cmd(a);
  450.         a=yytable[1];
  451.         send_cmd(a);
  452.         a=yytable[2];
  453.         send_cmd(a);
  454.         a=yytable[3];
  455.         send_cmd(a);
  456.         a=yytable[4];
  457.         send_cmd(a);
  458.         a=yytable[5];
  459.         send_cmd(a);
  460.         a=yytable[6];
  461.         send_cmd(a);
  462.          Delay_Ms(800);
  463.          a=yytable[7];
  464.         send_cmd(a);
  465.         a=yytable[8];
  466.         send_cmd(a);
  467.         a=yytable[9];
  468.         send_cmd(a);
  469.         a=yytable[10];
  470.         send_cmd(a);
  471.         a=yytable[11];
  472.         send_cmd(a);
  473.         a=yytable[12];
  474.         send_cmd(a);
  475.         a=yytable[13];
  476.         send_cmd(a);
  477.         Delay_Ms(800);
  478.          a=yytable[14];
  479.         send_cmd(a);
  480.         a=yytable[15];
  481.         send_cmd(a);
  482.         a=yytable[16];
  483.         send_cmd(a);
  484.         a=yytable[17];
  485.         send_cmd(a);
  486.         a=yytable[18];
  487.         send_cmd(a);
  488.         a=yytable[19];
  489.         send_cmd(a);
  490.         a=yytable[20];
  491.         send_cmd(a);
  492.          Delay_Ms(800);
  493.          a=yytable[21];
  494.         send_cmd(a);
  495.         a=yytable[22];
  496.         send_cmd(a);
  497.         a=yytable[23];
  498.         send_cmd(a);
  499.         a=yytable[24];
  500.         send_cmd(a);
  501.         a=yytable[25];
  502.         send_cmd(a);
  503.         a=yytable[26];
  504.         send_cmd(a);
  505.         a=yytable[27];
  506.         send_cmd(a);
  507.          Delay_Ms(800);
  508.          a=yytable[28];
  509.         send_cmd(a);
  510.         a=yytable[29];
  511.         send_cmd(a);
  512.         a=yytable[30];
  513.         send_cmd(a);
  514.         a=yytable[31];
  515.         send_cmd(a);
  516.         a=yytable[32];
  517.         send_cmd(a);
  518.         a=yytable[33];
  519.         send_cmd(a);
  520.         a=yytable[34];
  521.         send_cmd(a);
  522.          Delay_Ms(1300);
  523. ……………………

  524. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
语音播放系统.rar (7.31 MB, 下载次数: 89)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:196311 发表于 2017-5-15 10:56 | 只看该作者
沙发,下载学习,谢谢楼主
回复

使用道具 举报

板凳
ID:157057 发表于 2017-5-16 17:12 | 只看该作者
如何给顾客编号呢。。。
回复

使用道具 举报

地板
ID:207597 发表于 2017-6-4 10:26 | 只看该作者
刚买了这样的语音模块,正好学习,谢谢
回复

使用道具 举报

5#
ID:41644 发表于 2017-9-7 22:01 | 只看该作者
学习中!
回复

使用道具 举报

6#
ID:275645 发表于 2018-1-13 19:25 | 只看该作者

学习下!
回复

使用道具 举报

7#
ID:282411 发表于 2018-2-7 16:47 | 只看该作者
谢谢楼主!电路原理图和pcb图不知为何打开是一片空白。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表