标题: [电子手表制作]第2期V1.2版 [打印本页]

作者: xjx51    时间: 2021-7-4 11:14
标题: [电子手表制作]第2期V1.2版
本帖最后由 xjx51 于 2021-7-8 08:20 编辑

我又又又来了,上次按键失灵的原因找到了,是我的单片机IO口设置成了高阻状态。改成准双向模式就行了。

测试了一下时钟芯片和改时间的功能,全部正常,OK!

下面开始驱动喇叭,PWM功能暂时先不做,我先做了语音功能,但单片机8K的容量却给我用完了,只能单独写个子程序测试了。
原本是准备用NVC080C的,但是搞半天驱动不了,只能先用老的语音芯片了,但是老的语音芯片只能说些象棋的字,重新定制又太麻烦,只好重搞,
后来发现不能驱动是因为时序不对,搞了一晚上才搞明白,第二天开工,我按照厂家给的时序图重新编写了程序,
终于,我听到了世间最美妙的声音——“将”!
哈哈哈,搞半天是时序出了问题,后来试了下,也可以连说了,屏幕显示与喇叭说话已经可以同步了!

上程序:
  1. #include <intrins.h>
  2. #define uint unsigned int                 //宏定义变量
  3. #define uchar unsigned char                //宏定义变量
  4. sbit busy=P5^4;                                        //定义语音芯片忙信号输入单片机脚
  5. sbit dat=P1^5;                                        //定义单片机输出数据脚
  6. uchar temp1,t;
  7. uchar code table[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,//语音信号数组
  8.                                  //       将4  将1  帅         士          象   车   马        
  9.                                         0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
  10.                                  //  炮   兵   卒         0          1    2    3    4
  11.                                         0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
  12.                                  //  5    6    7    8    9    时   分  抽签  
  13.                                         0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,
  14.                                  // 开始 加油 结束 休息 暂停 超时 退出 犯规   
  15.                                         0x20,0x21,0x22,0x23, 0x24, 0x25,0x26,0x27,
  16.                                  // 迟到 弃权 继续 悔棋 时间到  红   黑   方      
  17.                                          0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,
  18.                                  //  胜   负   和   平   前   后   左   右
  19.                                         0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,
  20.                                  //  吃   进   退   十   第   章   页   节
  21.                                         0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f};
  22.                                  //  例   图   届   局   回  抽签  名
  23. void delay_us(uint x) //
  24. {
  25.          uint a;
  26.          for(a=x;a>0;a--)
  27.          {
  28.              _nop_() ;
  29.                  _nop_() ;
  30.                  _nop_() ;
  31.                  _nop_() ;
  32.                  _nop_() ;
  33.      }
  34. }
  35. void delay_ms(uint x) //X=毫秒数*10
  36. {
  37.          uint a,b;
  38.          for(a=0;a<x;a++)
  39.          for(b=0;b<300;b++);
  40.          //for(c=0;c<25~;c++);
  41. }
  42. void NVC080C_8BITS()                                        //声明语音发音子函数
  43. {
  44.         dat=0;
  45.         delay_ms(50);                        //5毫秒低电平同步头
  46.         for(t=0;t<8;t++)
  47.         {
  48.                 if(temp1&1)                          //1010 1010
  49.                 {
  50.                     dat=1;
  51.                         delay_us(1200);          //400US
  52.                         dat=0;
  53.                         delay_us(400);        
  54.                 }
  55.                 else
  56.                 {
  57.                     dat=1;
  58.                         delay_us(400);
  59.                         dat=0;
  60.                         delay_us(1200);
  61.                 }
  62.                 temp1>>=1;
  63.         }
  64.         dat=1;
  65. }
  66. void yuyin(uchar y)
  67. {
  68.         temp1 = y;
  69.         delay_ms(1000);
  70.     NVC080C_8BITS();
  71. }
  72. void main()
  73. {
  74.    yuyin(0X19);//对应语音表的“分”
  75.    while(1) ;
  76. }
  77.    
复制代码
至此,语音程序已完成,下期完善闹钟功能!







欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1