找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1965|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

語音三線串口控制程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:340557 發(fā)表于 2018-6-28 10:41 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
AVR16語音三線串口控制程序

單片機(jī)源程序如下:
  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       //定義時(shí)鐘頻率
  8. const address[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c};//0—9,0a中放現(xiàn)在的溫度為,0b中放點(diǎn),0c中放攝氏度
  9. #define rst PB0              //復(fù)位
  10. #define cs PB1               //片選端
  11. #define clk PB2              //時(shí)鐘
  12. #define data PB3            //數(shù)據(jù)位
  13. #define busy  PINB&0X10         //忙信號(hào)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. /********延時(shí)區(qū)域*********/
  29. void delay_nus(uint x) //n微妙延時(shí)程序
  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)  //一毫秒延時(shí)程序  
  52. {
  53.          unsigned int i;
  54.          for(i=0;i<2286;i++);                //晶振數(shù)*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. 函數(shù)名:void send_com(uchar add)
  67. 功能:發(fā)碼播放,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. 函數(shù)名: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. 函數(shù)名:void sound()
  105. 功能:播報(bào)溫度
  106. *****************************************/
  107. void sound()
  108. {
  109.        
  110.         while(!busy);
  111.         send_com(0x0a);//播放"現(xiàn)在的溫度為"
  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. }
復(fù)制代碼

所有資料51hei提供下載:
語音三線串口16M好使.zip (1.09 KB, 下載次數(shù): 9)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表