找回密码
 立即注册

QQ登录

只需一步,快速开始

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

语音三线串口控制程序

[复制链接]
跳转到指定楼层
楼主
ID:340557 发表于 2018-6-28 10:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
AVR16语音三线串口控制程序

单片机源程序如下:
  1. #include <iom16v.h>
  2. #include <macros.h>
  3. #include <eeprom.h>
  4. #define  uchar  unsigned char
  5. #define  uint   unsigned int
  6. #define  ulong   unsigned long
  7. #define  mclk  16000000       //定义时钟频率
  8. const address[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c};//0—9,0a中放现在的温度为,0b中放点,0c中放摄氏度
  9. #define rst PB0              //复位
  10. #define cs PB1               //片选端
  11. #define clk PB2              //时钟
  12. #define data PB3            //数据位
  13. #define busy  PINB&0X10         //忙信号PB4
  14. #define rst1                   PORTB|=(1<<PB0)
  15. #define rst0                 PORTB&=~(1<<PB0)
  16. #define cs1                   PORTB|=(1<<PB1)
  17. #define cs0                 PORTB&=~(1<<PB1)
  18. #define clk1                   PORTB|=(1<<PB2)
  19. #define clk0                 PORTB&=~(1<<PB2)
  20. #define data1           PORTB|=(1<<PB3)
  21. #define data0                 PORTB&=~(1<<PB3)
  22. uchar a,b,c;
  23. void Port_init(void)
  24. {
  25.   DDRB=0XEF;
  26.   PORTB=0XFF;
  27. }
  28. /********延时区域*********/
  29. void delay_nus(uint x) //n微妙延时程序
  30. {
  31.          unsigned  int i;
  32.          for(i=x;i>0;i--)
  33.          {asm("nop");
  34.           asm("nop");
  35.           asm("nop");
  36.           asm("nop");
  37.           asm("nop");
  38.           asm("nop");
  39.           asm("nop");
  40.           asm("nop");
  41.           asm("nop");
  42.           asm("nop");
  43.           asm("nop");
  44.           asm("nop");
  45.           asm("nop");
  46.           asm("nop");
  47.           asm("nop");
  48.           asm("nop");
  49.          }
  50. }

  51. void delay_1ms(void)  //一毫秒延时程序  
  52. {
  53.          unsigned int i;
  54.          for(i=0;i<2286;i++);                //晶振数*143-2
  55. }

  56. void delay_nms(unsigned int x)
  57. {
  58.           
  59.          unsigned int i;
  60.          for(i=x;i>0;i--)
  61.          {
  62.                   delay_1ms();
  63.          }
  64. }
  65. /****************************************
  66. 函数名:void send_com(uchar add)
  67. 功能:发码播放,add为语音地址
  68. *****************************************/
  69. void send_com(uchar add)
  70. {
  71.         uchar  i;
  72.         rst1;
  73.         rst0;
  74.         delay_nms(5);
  75.         rst1;
  76.         delay_nms(20);
  77.         cs0;
  78.         delay_nms(5);
  79.         for(i=0;i<8;i++)
  80.         {
  81.                  clk0;
  82.                 if(add&1)
  83.                 data1;
  84.                 else       
  85.                 data0;
  86.                 delay_nus(300);
  87.                 clk1;
  88.                 delay_nus(300);
  89.                 add=add>>1;
  90.         }
  91.         cs1;
  92. }
  93. /******************************************
  94. 函数名:void wendujisuan()
  95. 功能:温度处理
  96. *****************************************/
  97. void wendujisuan(uint m1)
  98. {
  99.    a=m1/100;
  100.    b=m1%100/10;
  101.    c=m1%100;
  102. }



  103. /******************************************
  104. 函数名:void sound()
  105. 功能:播报温度
  106. *****************************************/
  107. void sound()
  108. {
  109.        
  110.         while(!busy);
  111.         send_com(0x0a);//播放"现在的温度为"
  112.         delay_nms(500);
  113.         while(!busy);
  114.         send_com(a);
  115.         delay_nms(500);
  116.     while(!busy);
  117.         send_com(b);
  118.         delay_nms(500);
  119.         while(!busy);
  120.         send_com(11);
  121.         delay_nms(500);
  122.         while(!busy);
  123.         send_com(c);
  124.         delay_nms(500);
  125.         while(!busy);
  126.         send_com(12);
  127.         delay_nms(500);
  128.         while(!busy);
  129. }
  130. void main()  
  131. {
  132.   Port_init();
  133.   while(1)
  134.   {
  135.   wendujisuan(325);
  136.   sound();
  137.   }
  138. }
复制代码

所有资料51hei提供下载:
语音三线串口16M好使.zip (1.09 KB, 下载次数: 9)


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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