標(biāo)題: 51單片機(jī)音樂(lè)噴泉原理圖+源程序 [打印本頁(yè)]

作者: 文嘉瑜    時(shí)間: 2018-12-17 13:33
標(biāo)題: 51單片機(jī)音樂(lè)噴泉原理圖+源程序
這是我之前做的一個(gè)基于51單片機(jī)的音樂(lè)噴泉
附有原理圖


單片機(jī)源程序如下:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit out=P3^7;
  5. sbit led1=P0^0;
  6. sbit led2=P0^1;
  7. sbit led3=P0^2;
  8. sbit led4=P0^3;
  9. sbit led5=P0^4;
  10. sbit led6=P0^5;
  11. sbit led7=P0^6;
  12. sbit led8=P0^7;
  13. sbit SCL=P1^2;                //SCL定義為P1口的第3位腳,連接ADC0832SCL腳
  14. sbit DO=P1^3;                //DO定義為P1口的第4位腳,連接ADC0832DO腳
  15. sbit CS=P1^0;                //CS定義為P1口的第4位腳,連接ADC0832CS腳
  16. uchar scale;
  17. uchar m;
  18. uchar h1,date;
  19. unsigned char adval;
  20. void delay(uint z)
  21. {
  22.    uint y;
  23.    for(;z>0;z--)
  24.    for(y=5;y>0;y--);
  25. }

  26. /***********讀數(shù)模轉(zhuǎn)換數(shù)據(jù)********************************************************/       
  27. //請(qǐng)先了解ADC0832模數(shù)轉(zhuǎn)換的串行協(xié)議,再來(lái)讀本函數(shù),主要是對(duì)應(yīng)時(shí)序圖來(lái)理解,本函數(shù)是模擬0832的串行協(xié)議進(jìn)行的
  28.                                                 //  1  1  0 通道
  29.                                                 //  1  1  1 通道
  30. unsigned char ad0832read(bit SGL,bit ODD)
  31. {
  32.         unsigned char i=0,value=0,value1=0;               
  33.                 SCL=0;
  34.                 DO=1;
  35.                 CS=0;                //開始
  36.                 SCL=1;                //第一個(gè)上升沿       
  37.                 SCL=0;
  38.                 DO=SGL;
  39.                 SCL=1;          //第二個(gè)上升沿
  40.                 SCL=0;
  41.                 DO=ODD;
  42.                 SCL=1;           //第三個(gè)上升沿
  43.                 SCL=0;           //第三個(gè)下降沿
  44.                 DO=1;
  45.                 for(i=0;i<8;i++)
  46.                 {
  47.                         SCL=1;
  48.                         SCL=0; //開始從第四個(gè)下降沿接收數(shù)據(jù)
  49.                         value<<=1;
  50.                         if(DO)
  51.                                 value=value|0x01;                                               
  52.                 }
  53.                 for(i=0;i<8;i++)
  54.                 {                        //接收校驗(yàn)數(shù)據(jù)
  55.                         value1=value1>>1;
  56.                         if(DO)
  57.                                 value1=value1|0x80;
  58.                         SCL=1;
  59.                         SCL=0;
  60.                 }
  61.                 CS=1;
  62.                 SCL=1;
  63.                 DO=1;       
  64.                 if(value==value1)                                //與校驗(yàn)數(shù)據(jù)比較,正確就返回?cái)?shù)據(jù),否則返回0       
  65.                         return value;
  66.                 return 0;
  67. }

  68. void penquan()          //PWM調(diào)壓
  69. {
  70.         date=ad0832read(1,0);
  71.         if(date>130&&date<=200)
  72.         {
  73.                 scale=(date-100)/10+2;
  74.                 if(scale>10)
  75.                 scale=10;
  76.         }
  77.        
  78.         else if(date>200)
  79.         scale=10;
  80.         else if(date<=130)
  81.         scale=0;
  82.         if(date>=0&&date<130) P0=0xfe;
  83.         else if(date>=130&&date<140) P0=0xfc;         
  84.         else if(date>=140&&date<150) P0=0xf8;
  85.         else if(date>=150&&date<160) P0=0xe0;
  86.         else if(date>=160&&date<170) P0=0xe0;
  87.         else if(date>=170&&date<180) P0=0xc0;
  88.         else if(date>=180&&date<200) P0=0x80;
  89.         else if(date>=200) P0=0x00;
  90. //        if(date>120) led1=0; else led1=1;
  91. //        if(date>130) led2=0; else led2=1;
  92. //        if(date>140) led3=0; else led3=1;
  93. //        if(date>150) led4=0; else led4=1;
  94. //        if(date>160) led5=0; else led5=1;
  95. //        if(date>170) led6=0; else led6=1;
  96. //        if(date>180) led7=0; else led7=1;
  97. //        if(date>200) led8=0; else led8=1;
  98.         delay(300);
  99. }

  100. void init()
  101. {
  102.         TMOD=0x01;
  103.         TH0=0xfc;
  104.         TL0=0x18;
  105.         ET0=1;
  106.         TR0=1;
  107.         EA=1;
  108. }
  109. void main()
  110. {
  111.    init();
  112.    while(1)
  113.    {       
  114.                 penquan();                   //給定個(gè)延時(shí)次數(shù)        
  115.    }
  116. }

  117. void T0_time() interrupt 1
  118. {
  119.         TH0=0xfc;
  120.         TL0=0x18;
  121.         m++;
  122.         if(m<scale)
  123.         {
  124.                 out=0;
  125.         }
  126.         else
  127.         {
  128.                 out=1;
  129.         }
  130.         if(m>10)
  131.         {
  132.                 m=0;
  133.         }
  134. }
復(fù)制代碼

所有資料51hei提供下載:
1-程序V1.0.rar (21.04 KB, 下載次數(shù): 188)
原理圖.pdf (60.16 KB, 下載次數(shù): 138)



作者: 景帝劉啟    時(shí)間: 2020-4-11 16:39
這原理圖,可以直接在protues打開用嗎
作者: 景帝劉啟    時(shí)間: 2020-4-11 17:23
樓主,這protues仿真有沒(méi)
作者: buibui~l    時(shí)間: 2020-7-22 11:41
景帝劉啟 發(fā)表于 2020-4-11 16:39
這原理圖,可以直接在protues打開用嗎

proteus.不能打開PDF格式文件,所以打不開的,這個(gè)原理圖簡(jiǎn)單,自己畫也是很快就畫好的
作者: 路過(guò)的鄭佩奇    時(shí)間: 2020-11-29 21:30
一年后才看見(jiàn),不知道樓主還在沒(méi)
作者: kiccleaf    時(shí)間: 2020-12-2 00:01
技術(shù)知識(shí)不錯(cuò),學(xué)習(xí)了
作者: 快樂(lè)眼淚    時(shí)間: 2020-12-20 20:32
正想做一個(gè),謝謝樓主無(wú)私奉獻(xiàn)!
作者: zwh-86    時(shí)間: 2021-3-30 20:05
快樂(lè)眼淚 發(fā)表于 2020-12-20 20:32
正想做一個(gè),謝謝樓主無(wú)私奉獻(xiàn)!

終于找到了,感謝樓主分享
作者: 362796718    時(shí)間: 2021-4-12 21:18
這個(gè)是用AD繪制的圖嗎,有沒(méi)有proteus繪制的圖啊
作者: luckyhappy    時(shí)間: 2021-5-8 08:28
我想問(wèn)一下,你這代碼實(shí)現(xiàn)的彩燈變化是什么形式的?

作者: 用心做事    時(shí)間: 2021-12-21 23:40
樓主,還在嗎?能不能分享你的Proteus圖
作者: lhqniubi    時(shí)間: 2022-5-10 11:44
為啥程序中的中斷程序沒(méi)有用到呢?
作者: lhqniubi    時(shí)間: 2022-5-10 11:45
樓主,為啥程序中的中斷程序沒(méi)有被調(diào)用,能解釋一下嗎?




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1