標題: 51單片機如何制作有拖影的流水燈?新手請教實現(xiàn)思路 [打印本頁]

作者: fangdong0602    時間: 2022-2-23 16:28
標題: 51單片機如何制作有拖影的流水燈?新手請教實現(xiàn)思路
想寫一個51單片機控制8個LED有拖影的流水燈,第一顆亮度100%,第二顆亮度75%,第3顆亮度50%,最后25%亮度,請教一下程序設(shè)計思路,感謝!!

作者: 188610329    時間: 2022-2-23 18:23
你牽涉到頻占比,肯定要開一個定時器,設(shè)置4個變量,temp1-temp4,初始值分別0xf0,0xf8,0xfc,0xfe。在定時器中段中每隔1ms,把四個變量輪流賦值led,然后,按標準流水燈的做法,在合適時機,同時給這4個變量,做移位。
作者: npn    時間: 2022-2-23 18:36
在main函數(shù)內(nèi)產(chǎn)生8路不同占空比的PWM,用于控制8顆LED的不同亮度,然后用定時器中斷進行二維數(shù)組查表即可。
作者: lkc8210    時間: 2022-2-24 10:43
飯要一口一口吃,代碼要一個字一個字敲
A1.點亮第一顆Led
A2.用Delay令Led閃爍
A3.不用Delay令Led閃爍
A4.不用Delay令Led短亮長暗
A5.加速閃爍到肉眼看不出
A6.調(diào)節(jié)亮暗時間以控制Led亮度
A7.把亮暗時改為自動增減,形成一個呼吸燈
B1.點亮第二顆Led
B2.用Delay依次點亮其他Led
B3.不用Delay依次點亮其他Led
B4.重復(fù)B3,點亮第二顆Led時熄滅前一顆
B5.當最后一顆熄滅時,點亮第一顆,形成流水燈循環(huán)
B6.重復(fù)B3,點亮第三顆Led時熄滅第一顆形成拖尾
C1.A6+B3以半光亮度依次點亮Led
C2.A7+B6以漸暗方式形成拖尾達成目標
作者: mimidog111    時間: 2022-2-24 10:59
PWM 控制燈亮度  cross移位
作者: wulin    時間: 2022-2-24 14:54
給你一個示例參考
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. sbit P1_0 = P1^0;   
  6. sbit P1_1 = P1^1;
  7. sbit P1_2 = P1^2;
  8. sbit P1_3 = P1^3;
  9. sbit P1_4 = P1^4;
  10. sbit P1_5 = P1^5;
  11. sbit P1_6 = P1^6;
  12. sbit P1_7 = P1^7;

  13. unsigned char PWM0 = 15;//改變初值即改變初始狀態(tài)
  14. unsigned char PWM1 = 17;     
  15. unsigned char PWM2 = 19;
  16. unsigned char PWM3 = 21;
  17. unsigned char PWM4 = 23;     
  18. unsigned char PWM5 = 25;
  19. unsigned char PWM6 = 27;     
  20. unsigned char PWM7 = 29;
  21. unsigned char counter=0;  
  22. unsigned char tt1=0;   
  23. unsigned int count=0;//計數(shù)變量
  24. bit sign=0;                        //暫停標志

  25. void main()
  26. {
  27.         TMOD=0x01;
  28.         TH0=(65536-500)/256;      
  29.         TL0=(65536-500)%256;
  30.         TR0=1;
  31.         EA=1;
  32.         ET0=1;
  33.         while(1)
  34.         {  
  35.                 if(tt1>=55)
  36.                 {
  37.                         tt1=0;
  38.                         PWM7++;PWM6++;PWM5++;PWM4++;
  39.                         PWM3++;PWM2++;PWM1++;PWM0++;
  40.                         if(PWM7==30) PWM7=0;
  41.                         if(PWM6==30) PWM6=0;
  42.                         if(PWM5==30) PWM5=0;
  43.                         if(PWM4==30) PWM4=0;
  44.                         if(PWM3==30) PWM3=0;
  45.                         if(PWM2==30) PWM2=0;
  46.                         if(PWM1==30) PWM1=0;
  47.                         if(PWM0==30) PWM0=0;
  48.                         if(PWM0==16) sign=1;//PWM0=16時關(guān)閉所有PWM
  49.                 }
  50.         }
  51. }
  52. void Timer0(void) interrupt 1
  53. {                           
  54.         TH0=(65536-500)/256;   
  55.         TL0=(65536-500)%256;
  56.         if(sign==1)
  57.         {
  58.                 count++;
  59.                 if(count>=2000)//1秒
  60.                 {
  61.                         count=0;
  62.                         sign=0;//開啟所有PWM
  63.                 }
  64.         }
  65.         else
  66.         {
  67.                 counter++;
  68.                 tt1++;
  69.                 if(counter >= 15) counter = 0;  
  70.                 if(counter >= PWM7) P1_0 = 0; else P1_0 = 1;
  71.                 if(counter >= PWM6) P1_1 = 0; else P1_1 = 1;
  72.                 if(counter >= PWM5) P1_2 = 0; else P1_2 = 1;
  73.                 if(counter >= PWM4) P1_3 = 0; else P1_3 = 1;
  74.                 if(counter >= PWM3) P1_4 = 0; else P1_4 = 1;
  75.                 if(counter >= PWM2) P1_5 = 0; else P1_5 = 1;
  76.                 if(counter >= PWM1) P1_6 = 0; else P1_6 = 1;
  77.                 if(counter >= PWM0) P1_7 = 0; else P1_7 = 1;
  78.         }
  79. }
復(fù)制代碼

作者: Y_G_G    時間: 2022-2-24 21:35
板凳的方法最簡單
8路PWM,數(shù)組查表控制,通過占空比的控制達到位移的效果,連位移都不需要了
作者: yzwzfyz    時間: 2022-2-26 14:24
1、能控制一個任意一個LED的明滅。
2、能控制一個任意一個LED的亮度。
3、能按隨意控制任意一個LED的明滅時間
4、規(guī)劃一個圖表,在表中規(guī)劃好8個LED的明、滅、亮度時間、時序。讓它們看上去如同流水一樣。
提示:分成許多步(N),每步定義出各個LED的明、滅、亮度時間,以序做N步顯示,就完成了一次流水顯示。
5、重復(fù)4、就可以了,但要注意,讓第一步,與第N步的顯示方案接近,即看不出明顯的跳動。當然,你決定就是要讓人感覺到跳動,也行。

作者: 3花木城    時間: 2022-2-26 15:22
lkc8210 發(fā)表于 2022-2-24 10:43
飯要一口一口吃,代碼要一個字一個字敲
A1.點亮第一顆Led
A2.用Delay令Led閃爍

高手,循序漸進
作者: fangdong0602    時間: 2022-3-1 23:43
這幾天忙工作 ,沒有來得及回復(fù),感謝各位大佬細心教導(dǎo),按照各位的方法完成了目標,初學者望大家不要見笑
作者: fangdong0602    時間: 2022-3-1 23:49
lkc8210 發(fā)表于 2022-2-24 10:43
飯要一口一口吃,代碼要一個字一個字敲
A1.點亮第一顆Led
A2.用Delay令Led閃爍

剛剛學習純C語言基礎(chǔ)轉(zhuǎn)單片機2個月,A1-B6學會了,c1-c2可能有些邏輯思路還沒有轉(zhuǎn)回來 讓各位見笑了
作者: fangdong0602    時間: 2022-3-1 23:52
188610329 發(fā)表于 2022-2-23 18:23
你牽涉到頻占比,肯定要開一個定時器,設(shè)置4個變量,temp1-temp4,初始值分別0xf0,0xf8,0xfc,0xfe。在定 ...

謝謝指導(dǎo) ,讓我學到很多, 思路逐漸清晰。
作者: fangdong0602    時間: 2022-3-1 23:54
npn 發(fā)表于 2022-2-23 18:36
在main函數(shù)內(nèi)產(chǎn)生8路不同占空比的PWM,用于控制8顆LED的不同亮度,然后用定時器中斷進行二維數(shù)組查表即可。

非常感謝!學習了,有那種感覺了
作者: fangdong0602    時間: 2022-3-1 23:56
wulin 發(fā)表于 2022-2-24 14:54
給你一個示例參考

非常感謝!
作者: fangdong0602    時間: 2022-3-1 23:57
Y_G_G 發(fā)表于 2022-2-24 21:35
板凳的方法最簡單
8路PWM,數(shù)組查表控制,通過占空比的控制達到位移的效果,連位移都不需要了

非常感謝!都是高手
作者: fangdong0602    時間: 2022-3-2 00:00
yzwzfyz 發(fā)表于 2022-2-26 14:24
1、能控制一個任意一個LED的明滅。
2、能控制一個任意一個LED的亮度。
3、能按隨意控制任意一個LED的明滅 ...

感謝!剛開始學習,每個單步運行基本掌握了,就是組合運行時邏輯思維轉(zhuǎn)得有點慢
作者: zhxiufan    時間: 2022-3-2 07:28
如果進一步就可以實現(xiàn)“流星雨”效果,軟件上需要用一個定時器,利用PWM控制原理來實現(xiàn)。要想效果逼真,電路上可以加LC或RLC電路。
作者: xiaobu21    時間: 2022-3-2 16:14
這種需要一點一點調(diào)節(jié)PWM'的 占空比,不同的燈占空比不一樣。
作者: fangdong0602    時間: 2022-3-29 23:53
初來乍到,想學東西,我這里也有許多拆機的mcu,(stm32f0系列,at32系列,飛思卡爾等,還有其他品牌的)功能沒有問題,有需要的朋友可以聯(lián)系我,免費送,但是郵費自理
作者: wangyuejia2015    時間: 2022-3-30 14:04
開個定時器 對每個led占空比設(shè)置不同的初始值 沒個燈都自己的 自加或自減循環(huán)
作者: 1111513    時間: 2022-3-30 14:48
fangdong0602 發(fā)表于 2022-3-29 23:53
初來乍到,想學東西,我這里也有許多拆機的mcu,(stm32f0系列,at32系列,飛思卡爾等,還有其他品牌的)功 ...

感謝樓主,頂頂頂
作者: 小象    時間: 2022-4-11 16:00
地板適合新手入門,其他的適合高手技術(shù)交流。。。鑒定完畢




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