久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機LED流水燈 求實現(xiàn)思路

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:968157 發(fā)表于 2021-9-25 13:28 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
由于本論壇禁止直接求程序,禁止伸手黨,所以向大家請教一下大致的實現(xiàn)方法與思路,理清頭緒后我自己來寫程序去實現(xiàn),謝謝大家

P0口接八個紅色發(fā)光LED,P1.0,P1.1,P1.2分別接三個按鍵,上電后流水燈自上往下,延時2秒閃爍。
P1.0按鍵控制流水燈工作模式,每按一次改變一次流水燈閃爍模式,從上至下,再按一次,改為從下至上閃爍。
P1.1 按一次,閃爍時延加0.5秒,最慢閃爍為4秒。
P1.2按一次,閃爍時延減0.5秒,最快閃爍為0.5秒)

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

使用道具 舉報

沙發(fā)
ID:517951 發(fā)表于 2021-9-28 14:04 | 只看該作者
delay(unsigned char time)
{
   for (;time;time--)
  ;
}

按不同的鍵,time取不同的值,就可以改變間隔時間了

回復(fù)

使用道具 舉報

板凳
ID:969030 發(fā)表于 2021-9-29 11:06 | 只看該作者
無非就是切換函數(shù),延遲,這不挺簡單的嗎
回復(fù)

使用道具 舉報

地板
ID:57657 發(fā)表于 2021-9-29 13:47 | 只看該作者
rayin 發(fā)表于 2021-9-28 14:04
delay(unsigned char time)
{
   for (;time;time--)

延時建議用定時器中斷,軟件延時誤差不好計算。
回復(fù)

使用道具 舉報

5#
ID:23640 發(fā)表于 2021-9-29 14:00 | 只看該作者
npn 發(fā)表于 2021-9-29 13:47
延時建議用定時器中斷,軟件延時誤差不好計算。

題主剛開始學(xué)就別為難他了,簡單點先把功能做出來
回復(fù)

使用道具 舉報

6#
ID:23640 發(fā)表于 2021-9-29 14:19 | 只看該作者
unsigned char TEMP;
unsigned int timeout=0;
while(1)
{
        for(i=0;i<8;i++)
        {
                switch(mode)//暫定3個模式
                {
                        case 0:P0=TEMP;TEMP=TEMP<<i;
                                break;
                        case 1:P0=TEMP;TEMP=TEMP>>i;
                                break;       
                }
                delayms(timeout);       
        }
        keyval = keyscan();//按鍵掃描
        if(keyval==1)//模式鍵
        {
                mode++;
                if(mode>1)mode=0;
                switch(mode)
                {
                        case 0:TEMP=0X01;
                                break;       
                        case 1:TEMP=0X80;
                                break;
                }       
        }
        else if(keyval==2)//加鍵
        {
                timeout+=500;       
        }
        else if(keyval==3)//減鍵
        {
                timeout-=500;       
        }
}
回復(fù)

使用道具 舉報

7#
ID:800529 發(fā)表于 2021-9-29 14:57 | 只看該作者
6樓給出了實現(xiàn)程序,要想時間準(zhǔn),可以考慮改為定時器中斷模式。
回復(fù)

使用道具 舉報

8#
ID:57657 發(fā)表于 2021-9-29 16:59 | 只看該作者
  1. #include "reg51.h"
  2. #include "intrins.h"
  3. #define U8 unsigned char
  4. #define U16 unsigned int
  5. sbit sKEY0 = P1 ^ 0;
  6. sbit sKEY1 = P1 ^ 1;
  7. sbit sKEY2 = P1 ^ 2;
  8. bit key0, key1, key2;
  9. U8 k0ms, k1ms, k2ms;        //3個按鍵按下的時間(毫秒) 按下計數(shù) 松開清0
  10. U16 delay = 500; //流水燈延時(毫秒)
  11. bit lr = 0;     //流水燈方向

  12. void InitTimer0(){
  13.     TMOD = 0x01;
  14.     TH0 = 0x0FC;
  15.     TL0 = 0x18;
  16.     EA = 1;
  17.     ET0 = 1;
  18.     TR0 = 1;
  19. }

  20. void main(){
  21.     InitTimer0();
  22.     while (1) {
  23.         if (sKEY0 == 0) {
  24.             lr = !lr;
  25.             while (sKEY0 == 0);
  26.         }
  27.         if (sKEY1 == 0) {
  28.             if (delay < 4000) delay += 500;
  29.             while (sKEY1 == 0);
  30.         }
  31.         if (sKEY2 == 0) {
  32.             if (delay > 500) delay -= 500;
  33.             while (sKEY2 == 0);
  34.         }
  35.     }
  36. }

  37. void Timer0Interrupt() interrupt 1 {        //12Mhz 1mS 定時器中斷
  38.     static U8 a = 1;
  39.     static U16 ms = 0;
  40.     TH0 = 0x0FC;
  41.     TL0 = 0x18;
  42.     if (sKEY0) {k0ms = 0;}else{if (k0ms != 0xFF) {k0ms++;}}
  43.     if (sKEY1) {k1ms = 0;}else{if (k1ms != 0xFF) {k1ms++;}}
  44.     if (sKEY2) {k2ms = 0;}else{if (k2ms != 0xFF) {k2ms++;}}
  45.     key0 = !(k0ms >= 25);       //按鍵消抖25毫秒
  46.     key1 = !(k1ms >= 25);
  47.     key2 = !(k2ms >= 25);
  48.     if (++ms >= delay) {
  49.         ms = 0;
  50.         P0 = ~a;
  51.         a = lr ? _cror_(a, 1) : _crol_(a, 1);
  52.     }

  53. }
復(fù)制代碼
回復(fù)

使用道具 舉報

9#
ID:161164 發(fā)表于 2021-9-30 10:21 | 只看該作者
不用定時器版本,誤差2.5%
  1. #include <reg52.h>

  2. typedef         unsigned char        u8;  //0 to 255
  3. typedef         unsigned int        u16;  //0 — 65535
  4. typedef         unsigned long        u32;  //0 — 4294967295
  5. sbit KEY_0 = P1 ^ 0;
  6. sbit KEY_1 = P1 ^ 1;
  7. sbit KEY_2 = P1 ^ 2;
  8. sbit Sys_HB = P3^7;       
  9. u16 TMR_ms_ACC = 0;
  10. u8 Delay_XD = 0;                      //消抖計數(shù)
  11. u16 Flash_delay = 2000, TMR_Flash_ACC;
  12. bit Swap;

  13. void main()
  14. {u8 i;
  15.     while (1)
  16.     {
  17.         if(TMR_ms_ACC)TMR_ms_ACC--;
  18.         if(!TMR_ms_ACC)
  19.         {   TMR_ms_ACC = 45;
  20.                                                 if(TMR_Flash_ACC)TMR_Flash_ACC--;
  21.                                                 if(!TMR_Flash_ACC)
  22.                                                 {   TMR_Flash_ACC = Flash_delay;
  23.                                                                 if(Swap)
  24.                                                                 {
  25.                                                                         P0 = 0x80 >> i;
  26.                                                                 }else
  27.                                                                 {
  28.                                                                         P0 = 0x01 << i;
  29.                                                                 }i = (++i) % 8;
  30.                                                 }
  31.                                                 Sys_HB ^= 1;//輸出系統(tǒng)周期,計算TMR_ms_ACC
  32.         }
  33.         if(!KEY_0 || !KEY_1 || !KEY_2)
  34.         {
  35.             if(Delay_XD < 0xFF)Delay_XD++;
  36.             if(Delay_XD == 250)                      //消抖
  37.             {
  38.                 if(!KEY_0)
  39.                                                                 {
  40.                                                                         Swap ^= 1;
  41.                                                                 }
  42.                 if(!KEY_1)
  43.                                                                 {
  44.                                                                         if (Flash_delay < 4000)
  45.                                                                                 Flash_delay += 500;
  46.                                                                 }
  47.                 if(!KEY_2)
  48.                                                                 {
  49.                                                                         if (Flash_delay > 500)
  50.                                                                                 Flash_delay -= 500;
  51.                                                                 }
  52.             }
  53.         }
  54.         else                                                        //按鍵抬起
  55.             Delay_XD = 0;                                      //Delay_XD清0

  56.     }
  57. }
復(fù)制代碼




回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美激情综合色综合啪啪五月 | 国产精品美女久久久久久免费 | 99av成人精品国语自产拍 | 在线免费观看视频你懂的 | 国产成人在线看 | 婷婷在线网站 | 欧美极品一区二区 | 美女在线观看国产 | 中文在线一区二区 | 日韩av成人| 99久久免费精品 | 欧美日韩在线一区二区三区 | 在线午夜电影 | 免费黄色的网站 | 羞羞视频免费观看 | 国产美女在线免费观看 | 欧美日韩国产一区二区三区 | 国产在线精品一区二区三区 | av网站观看 | 久久精品色欧美aⅴ一区二区 | 亚洲日韩中文字幕 | 一区二区三区在线电影 | 国产欧美精品 | 精品福利一区 | 免费黄色特级片 | 久久精品亚洲精品 | 亚洲国产一区二区三区四区 | 亚洲手机视频在线 | av入口| 99re超碰| 久久久国产精品一区 | 99国产视频 | 婷婷五月色综合 | 免费黄色片视频 | 91福利在线观看 | 草久久| 国产精品18hdxxxⅹ在线 | 91精品久久久久久久久 | 色999日韩| 99精品国自产在线 | 欧美一区二区二区 |