找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

51單片機(jī)如何制作有拖影的流水燈?新手請(qǐng)教實(shí)現(xiàn)思路

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:871926 發(fā)表于 2022-2-23 16:28 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
想寫(xiě)一個(gè)51單片機(jī)控制8個(gè)LED有拖影的流水燈,第一顆亮度100%,第二顆亮度75%,第3顆亮度50%,最后25%亮度,請(qǐng)教一下程序設(shè)計(jì)思路,感謝。!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:624769 發(fā)表于 2022-2-23 18:23 來(lái)自觸屏版 | 只看該作者
你牽涉到頻占比,肯定要開(kāi)一個(gè)定時(shí)器,設(shè)置4個(gè)變量,temp1-temp4,初始值分別0xf0,0xf8,0xfc,0xfe。在定時(shí)器中段中每隔1ms,把四個(gè)變量輪流賦值led,然后,按標(biāo)準(zhǔn)流水燈的做法,在合適時(shí)機(jī),同時(shí)給這4個(gè)變量,做移位。
回復(fù)

使用道具 舉報(bào)

板凳
ID:57657 發(fā)表于 2022-2-23 18:36 | 只看該作者
在main函數(shù)內(nèi)產(chǎn)生8路不同占空比的PWM,用于控制8顆LED的不同亮度,然后用定時(shí)器中斷進(jìn)行二維數(shù)組查表即可。
回復(fù)

使用道具 舉報(bào)

地板
ID:161164 發(fā)表于 2022-2-24 10:43 | 只看該作者
飯要一口一口吃,代碼要一個(gè)字一個(gè)字敲
A1.點(diǎn)亮第一顆Led
A2.用Delay令Led閃爍
A3.不用Delay令Led閃爍
A4.不用Delay令Led短亮長(zhǎng)暗
A5.加速閃爍到肉眼看不出
A6.調(diào)節(jié)亮暗時(shí)間以控制Led亮度
A7.把亮暗時(shí)改為自動(dòng)增減,形成一個(gè)呼吸燈
B1.點(diǎn)亮第二顆Led
B2.用Delay依次點(diǎn)亮其他Led
B3.不用Delay依次點(diǎn)亮其他Led
B4.重復(fù)B3,點(diǎn)亮第二顆Led時(shí)熄滅前一顆
B5.當(dāng)最后一顆熄滅時(shí),點(diǎn)亮第一顆,形成流水燈循環(huán)
B6.重復(fù)B3,點(diǎn)亮第三顆Led時(shí)熄滅第一顆形成拖尾
C1.A6+B3以半光亮度依次點(diǎn)亮Led
C2.A7+B6以漸暗方式形成拖尾達(dá)成目標(biāo)
回復(fù)

使用道具 舉報(bào)

5#
ID:1003226 發(fā)表于 2022-2-24 10:59 | 只看該作者
PWM 控制燈亮度  cross移位
回復(fù)

使用道具 舉報(bào)

6#
ID:213173 發(fā)表于 2022-2-24 14:54 | 只看該作者
給你一個(gè)示例參考
  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;//計(jì)數(shù)變量
  24. bit sign=0;                        //暫停標(biāo)志

  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時(shí)關(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;//開(kāi)啟所有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ù)制代碼
回復(fù)

使用道具 舉報(bào)

7#
ID:401564 發(fā)表于 2022-2-24 21:35 | 只看該作者
板凳的方法最簡(jiǎn)單
8路PWM,數(shù)組查表控制,通過(guò)占空比的控制達(dá)到位移的效果,連位移都不需要了
回復(fù)

使用道具 舉報(bào)

8#
ID:123289 發(fā)表于 2022-2-26 14:24 | 只看該作者
1、能控制一個(gè)任意一個(gè)LED的明滅。
2、能控制一個(gè)任意一個(gè)LED的亮度。
3、能按隨意控制任意一個(gè)LED的明滅時(shí)間
4、規(guī)劃一個(gè)圖表,在表中規(guī)劃好8個(gè)LED的明、滅、亮度時(shí)間、時(shí)序。讓它們看上去如同流水一樣。
提示:分成許多步(N),每步定義出各個(gè)LED的明、滅、亮度時(shí)間,以序做N步顯示,就完成了一次流水顯示。
5、重復(fù)4、就可以了,但要注意,讓第一步,與第N步的顯示方案接近,即看不出明顯的跳動(dòng)。當(dāng)然,你決定就是要讓人感覺(jué)到跳動(dòng),也行。
回復(fù)

使用道具 舉報(bào)

9#
ID:977804 發(fā)表于 2022-2-26 15:22 來(lái)自觸屏版 | 只看該作者
lkc8210 發(fā)表于 2022-2-24 10:43
飯要一口一口吃,代碼要一個(gè)字一個(gè)字敲
A1.點(diǎn)亮第一顆Led
A2.用Delay令Led閃爍

高手,循序漸進(jìn)
回復(fù)

使用道具 舉報(bào)

10#
ID:871926 發(fā)表于 2022-3-1 23:43 | 只看該作者
這幾天忙工作 ,沒(méi)有來(lái)得及回復(fù),感謝各位大佬細(xì)心教導(dǎo),按照各位的方法完成了目標(biāo),初學(xué)者望大家不要見(jiàn)笑
回復(fù)

使用道具 舉報(bào)

11#
ID:871926 發(fā)表于 2022-3-1 23:49 | 只看該作者
lkc8210 發(fā)表于 2022-2-24 10:43
飯要一口一口吃,代碼要一個(gè)字一個(gè)字敲
A1.點(diǎn)亮第一顆Led
A2.用Delay令Led閃爍

剛剛學(xué)習(xí)純C語(yǔ)言基礎(chǔ)轉(zhuǎn)單片機(jī)2個(gè)月,A1-B6學(xué)會(huì)了,c1-c2可能有些邏輯思路還沒(méi)有轉(zhuǎn)回來(lái) 讓各位見(jiàn)笑了
回復(fù)

使用道具 舉報(bào)

12#
ID:871926 發(fā)表于 2022-3-1 23:52 | 只看該作者
188610329 發(fā)表于 2022-2-23 18:23
你牽涉到頻占比,肯定要開(kāi)一個(gè)定時(shí)器,設(shè)置4個(gè)變量,temp1-temp4,初始值分別0xf0,0xf8,0xfc,0xfe。在定 ...

謝謝指導(dǎo) ,讓我學(xué)到很多, 思路逐漸清晰。
回復(fù)

使用道具 舉報(bào)

13#
ID:871926 發(fā)表于 2022-3-1 23:54 | 只看該作者
npn 發(fā)表于 2022-2-23 18:36
在main函數(shù)內(nèi)產(chǎn)生8路不同占空比的PWM,用于控制8顆LED的不同亮度,然后用定時(shí)器中斷進(jìn)行二維數(shù)組查表即可。

非常感謝!學(xué)習(xí)了,有那種感覺(jué)了
回復(fù)

使用道具 舉報(bào)

14#
ID:871926 發(fā)表于 2022-3-1 23:56 | 只看該作者
wulin 發(fā)表于 2022-2-24 14:54
給你一個(gè)示例參考

非常感謝!
回復(fù)

使用道具 舉報(bào)

15#
ID:871926 發(fā)表于 2022-3-1 23:57 | 只看該作者
Y_G_G 發(fā)表于 2022-2-24 21:35
板凳的方法最簡(jiǎn)單
8路PWM,數(shù)組查表控制,通過(guò)占空比的控制達(dá)到位移的效果,連位移都不需要了

非常感謝!都是高手
回復(fù)

使用道具 舉報(bào)

16#
ID:871926 發(fā)表于 2022-3-2 00:00 | 只看該作者
yzwzfyz 發(fā)表于 2022-2-26 14:24
1、能控制一個(gè)任意一個(gè)LED的明滅。
2、能控制一個(gè)任意一個(gè)LED的亮度。
3、能按隨意控制任意一個(gè)LED的明滅 ...

感謝!剛開(kāi)始學(xué)習(xí),每個(gè)單步運(yùn)行基本掌握了,就是組合運(yùn)行時(shí)邏輯思維轉(zhuǎn)得有點(diǎn)慢
回復(fù)

使用道具 舉報(bào)

17#
ID:121859 發(fā)表于 2022-3-2 07:28 | 只看該作者
如果進(jìn)一步就可以實(shí)現(xiàn)“流星雨”效果,軟件上需要用一個(gè)定時(shí)器,利用PWM控制原理來(lái)實(shí)現(xiàn)。要想效果逼真,電路上可以加LC或RLC電路。
回復(fù)

使用道具 舉報(bào)

18#
ID:1007767 發(fā)表于 2022-3-2 16:14 | 只看該作者
這種需要一點(diǎn)一點(diǎn)調(diào)節(jié)PWM'的 占空比,不同的燈占空比不一樣。
回復(fù)

使用道具 舉報(bào)

19#
ID:871926 發(fā)表于 2022-3-29 23:53 | 只看該作者
初來(lái)乍到,想學(xué)東西,我這里也有許多拆機(jī)的mcu,(stm32f0系列,at32系列,飛思卡爾等,還有其他品牌的)功能沒(méi)有問(wèn)題,有需要的朋友可以聯(lián)系我,免費(fèi)送,但是郵費(fèi)自理
回復(fù)

使用道具 舉報(bào)

20#
ID:775776 發(fā)表于 2022-3-30 14:04 | 只看該作者
開(kāi)個(gè)定時(shí)器 對(duì)每個(gè)led占空比設(shè)置不同的初始值 沒(méi)個(gè)燈都自己的 自加或自減循環(huán)
回復(fù)

使用道具 舉報(bào)

21#
ID:977831 發(fā)表于 2022-3-30 14:48 | 只看該作者
fangdong0602 發(fā)表于 2022-3-29 23:53
初來(lái)乍到,想學(xué)東西,我這里也有許多拆機(jī)的mcu,(stm32f0系列,at32系列,飛思卡爾等,還有其他品牌的)功 ...

感謝樓主,頂頂頂
回復(fù)

使用道具 舉報(bào)

22#
ID:480627 發(fā)表于 2022-4-11 16:00 | 只看該作者
地板適合新手入門(mén),其他的適合高手技術(shù)交流。。。鑒定完畢
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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