欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2510|回復: 3
打印 上一主題 下一主題
收起左側

stc12單片機制作的隨著音樂聲音大小變化節奏的噴泉程序

[復制鏈接]
跳轉到指定樓層
樓主
利用stc12制作的隨著音樂聲音大小變化節奏的噴泉

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)

單片機源程序如下:
  1. #include"reg51.h"
  2. #include"intrins.h"
  3. #define FOSC 18432000L
  4. #define BAUD 9600
  5. typedef unsigned char uchar;
  6. typedef unsigned int  uint;

  7. /* ****************************   
  8. 聲明與ADC有關的寄存器

  9. ADC 控制寄存器   ADC_CONTR
  10. AD轉換結果寄存器 ADC_RES,
  11. P1口模擬功能控制寄存器 P1ASF

  12. *****************************/

  13. sfr ADC_CONTR =0xBC;        //1010 1011   P1.3作為AD輸入
  14. sfr ADC_RES          =0xBD;         //ADC高8位寄存器
  15. sfr ADC_LOW2  =0xBE;  //ADC低2位寄存器
  16. sfr        P1ASF     =0x9D;  //1001 1101
  17. sbit MUTE=P3^0;
  18. sbit PWM=P0^0;



  19. /*定義ADC控制的ADC操作常數*/
  20. #define ADC_POWER   0x80         //ADC電源控制位B7 1:打開電源 0:關閉電源
  21. #define ADC_FLAG    0x10        //ADC轉換結束標志位B4,AD轉換完成=1,要用軟件清0
  22. #define ADC_START   0x08  //ADC啟動控制位B3,1:開始轉換 轉換結束為0
  23. #define ADC_SPEEDLL   0x00
  24. #define ADC_SPEEDL   0x20
  25. #define ADC_SPEEDH   0x40
  26. #define ADC_SPEEDHH   0x60

  27. void InitUart();
  28. void InitADC();
  29. void SendData(uchar dat);
  30. uchar GetADCResult(uchar ch);
  31. void Delay(uint n);
  32. void ShowResult(uchar ch);

  33. /****************
  34.   AD轉換
  35. ****************/
  36. uchar GetADCResult(uchar ch)   
  37. {
  38.    ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ch|ADC_START;  //啟動轉換
  39.    _nop_();        
  40.    _nop_();
  41.    _nop_();         //等待轉換完成
  42.    _nop_();
  43.    while(!(ADC_CONTR&ADC_FLAG)); //等待轉換完成
  44.    ADC_CONTR&=~ADC_FLAG;        //關閉ADC
  45.    return ADC_RES;          //返回AD轉換結果
  46. }

  47. /***************
  48.   串口初始化
  49. ***************/
  50. void InitUart()
  51. {
  52.    SCON=0X5a;                        //設置為工作方式1
  53.         TMOD=0X20;                        //設置計數器工作方式2,8位自動重裝                        
  54.         TH1=TL1=-(FOSC/12/32/BAUD);         //計數器初始值設置,注意波特率是9600的
  55.         TR1=1;                                        //打開計數器
  56. }

  57. /***************
  58.    ADC初始化
  59. ****************/
  60. void InitADC()
  61. {
  62.    P1ASF=0xff;           //開啟8路ADC
  63.    ADC_RES=0;           //清除以前的結果
  64.    ADC_CONTR=ADC_POWER|ADC_SPEEDLL;
  65.    Delay(2);     //開啟ADC電源和延時
  66. }


  67. /**********************
  68. 發送一個字節到電腦
  69. ***********************/
  70. void SendData(uchar dat)
  71. {
  72.    while(!TI);  //等待數據發送完成
  73.    TI=0;   //清除標志
  74.    SBUF= dat ;        //發送數據
  75. }

  76. /**************
  77.   軟件延時=
  78. ***********----------------------------------------------------------------****/
  79. void Delay(uint n)         
  80. {
  81.    uint x;
  82.    while(n--)
  83.    {                        
  84.       x=5000;
  85.       while(x--);
  86.    }
  87. }

  88. void delay_50(uint n)         
  89. {
  90.    uint x;
  91.    while(n--)
  92.    {                        
  93.       x=50;
  94.       while(x--);
  95.    }
  96. }        

  97. void main()
  98. {
  99.    uint date,h1;
  100.    InitUart();    //串口初始化
  101.    InitADC();     //ADC初始化
  102.    ADC_CONTR |=0x80;  //開啟ADC電源

  103.    while(1)
  104.    {     
  105.           if(MUTE)
  106.           {
  107.             P2=0x00;
  108.                   P0=0x00;               
  109.                   continue;
  110.           }         
  111.       //SendData(3);          //發送轉換通道
  112.     // SendData( GetADCResult(3));        //發送ADC高8位結果到串口        
  113.          if(GetADCResult(3)>0x12&&GetADCResult(3)<0x14)
  114.             P2=11*GetADCResult(3) ;           
  115.           else                                      
  116.                   P2=GetADCResult(3);
  117.                 date=GetADCResult(3)+40;ev
  118.           h1=0xff-date;
  119.           PWM=0;
  120.                 delay_50(date);
  121.           PWM=1;
  122.                 delay_50(h1);  
  123.         }         
  124. }         
復制代碼

所有資料51hei提供下載:
proteus仿真.zip (83.94 KB, 下載次數: 25)
AD轉換_stc12.7z (23.91 KB, 下載次數: 23)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:1 發表于 2020-3-6 13:36 | 只看該作者
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復

使用道具 舉報

板凳
ID:702057 發表于 2020-3-7 13:40 | 只看該作者
看著像那么回事啊,像樣的,希望能哦喲喲!
回復

使用道具 舉報

地板
ID:702185 發表于 2020-3-10 12:26 | 只看該作者
admin 發表于 2020-3-6 13:36
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)

您好,請問編輯按鈕在哪兒呢
回復

使用道具 舉報

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

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表