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

QQ登錄

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

搜索
查看: 2457|回復(fù): 7
收起左側(cè)

關(guān)于騎自行車(chē)LED胸牌的單片機(jī)程序

[復(fù)制鏈接]
ID:1087674 發(fā)表于 2023-7-7 17:46 | 顯示全部樓層 |閱讀模式
想自行車(chē)后面裝一個(gè)LED胸牌做的顯示屏,這樣夜晚騎車(chē)安全點(diǎn)。自己不會(huì)寫(xiě)。因?yàn)樾嘏苾?nèi)置程序不能改,只能用單片機(jī)控制自動(dòng)切換字體了。
這程序要求如下:

  開(kāi)關(guān)打開(kāi),LED屏和單片機(jī)同時(shí)上電,LED屏初始化后,自動(dòng)顯示“小心尾隨”。

下面為單片機(jī)需要的程序:

單片機(jī)上電后,輸入高電平,輸出高電平。//LED屏顯示“小心尾隨”字不變。

(1)當(dāng)剎車(chē)時(shí):輸入低電平,單片機(jī)輸出低電平350毫秒。//(此時(shí)等于手動(dòng)按了下胸牌的切換鍵,LED屏顯示“剎車(chē).....)

(2)當(dāng)一直剎車(chē)時(shí):輸入一直是低電平,單片機(jī)在步驟(1)輸出低電平350毫秒后保持輸出高電平。//(此時(shí)LED屏?xí)恢憋@示“剎車(chē)....”)

(3)當(dāng)松開(kāi)剎車(chē)時(shí):輸入高電平,單片機(jī)輸出低電平350毫秒后恢復(fù)輸出高電平,然后再次輸出低電平350毫秒。//(此時(shí)LED屏跳過(guò)內(nèi)置的滾動(dòng)播放內(nèi)容后顯示“小心尾隨”)

(4)再次剎車(chē)時(shí)和松開(kāi)剎車(chē)時(shí),程序又從以上(1)至(3)循環(huán)。
————————————————————————————————————————————————————————————————


是的,硬件我自己會(huì)搞,但不會(huì)編程,想編來(lái)騎自行車(chē)。買(mǎi)了個(gè)STC15W204S單片機(jī),特別是那個(gè)延時(shí)不會(huì)弄。幫我看下下面自己糊弄的這個(gè)程序。
#include <reg52.h>
#define uint  unsigned int
sbit key  = P3^4;
sbit led  = P3^5;

初始輸入端口和輸出端口電平
/******************主程序**********************/
void main()
{
        while(1)
         {
                 if(key=0)                      //剎車(chē)
                 {
                    led=0;                       //輸出低電平,PNP三極管開(kāi)啟,LED顯示“剎車(chē)”
                    delay(350);
                  }
                    if(key=1);                     //松開(kāi)手摯
                 {
                    led=0;                        //輸出低電平,PNP三極管開(kāi)啟,LED顯示“勿靠近”
                    delay(350);
                  }
   
                 if(key=0)                       //再次剎車(chē)
                 {
                    led=0;                     
                    delay(350);
                    led=0;                      //連續(xù)兩次輸出低電平,連續(xù)兩次開(kāi)關(guān)PNP三極管,LED跳過(guò)閃爍程序后再次顯示“剎車(chē)”
                    delay(350);
                  }
         }
}

void delay_1ms(uint 350)
{
        uint i,j;
        for(i=0;i<350;i++)
           for(j=0;j<120;j++);
}
回復(fù)

使用道具 舉報(bào)

ID:161164 發(fā)表于 2023-7-8 11:27 | 顯示全部樓層
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. sbit key  = P3^4;
  5. sbit led  = P3^5;
  6. void Delay10ms()                //@12.000MHz
  7. {
  8.     unsigned char data i, j;

  9.     i = 117;
  10.     j = 184;
  11.     do
  12.     {
  13.         while (--j);
  14.     }
  15.     while (--i);
  16. }

  17. //初始輸入端口和輸出端口電平
  18. /******************主程序**********************/
  19. void main()
  20. {
  21.     bit key_old = 1;
  22.         uchar Output_cnt = 0;
  23.         uchar cnt_35 = 0;
  24.     while(1)
  25.     {
  26.                 if(Output_cnt == 0)//沒(méi)有脈沖輸出
  27.                 {                       
  28.                         if(key != key_old)//手剎信號(hào)變化
  29.                         {
  30.                                 if(!key)//手剎按下
  31.                                 {
  32.                                         Output_cnt = 1;//輸出1次脈沖
  33.                                 }else{//手剎放開(kāi)
  34.                                         Output_cnt = 2;//輸出2次脈沖
  35.                                 }
  36.                         }       
  37.                 }else{//有脈沖輸出       
  38.                         if(cnt_35==0)led = 0;//輸出低電平
  39.                         if(++cnt_35>=35)//計(jì)時(shí)350ms
  40.                         {
  41.                                 led = 1;//輸出高電平
  42.                                 Output_cnt--;//脈沖次數(shù)減一
  43.                                 cnt_35=0;//計(jì)時(shí)清零
  44.                         }       
  45.                 }
  46.                 key_old = key;//更新手剎信號(hào)
  47.                 Delay10ms();//控制10ms一次循環(huán)
  48.     }
  49. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

ID:1087674 發(fā)表于 2023-7-12 11:48 | 顯示全部樓層

非常感謝,我很多看不懂,怎么完全跟我學(xué)的不一樣,看來(lái)是高手。我們慢慢研究下再試下。再次感謝你,可以幫我實(shí)現(xiàn)這個(gè)功能,而且還可學(xué)到東西。
回復(fù)

使用道具 舉報(bào)

ID:1087674 發(fā)表于 2023-7-23 19:01 來(lái)自觸屏版 | 顯示全部樓層
lkc8210 發(fā)表于 2023-7-8 11:27

剛把電路搞好,燒錄了程序,按下能變化,但是還是沒(méi)跳過(guò)第三種輪流播放。你給的這個(gè)程序不對(duì)。你這個(gè)是輸入低電平(剎車(chē)),然后輸出低電平,然后放開(kāi)剎車(chē)后沒(méi)變化,又剎車(chē)(再次輸入低電平)才再輸出低電平,LED屏才變。
我要的效果是:放開(kāi)剎車(chē)(輸入低電平),輸出低電平,LED屏變化一次。
電路圖和實(shí)物如圖。另外,我開(kāi)始給單片機(jī)供電5伏,差點(diǎn)燒了,幸虧這個(gè)單片機(jī)有自動(dòng)保護(hù)。手不小心摸到芯片燙得起泡了。
http://www.torrancerestoration.com/bbs/dpj-230653-1.html




回復(fù)

使用道具 舉報(bào)

ID:161164 發(fā)表于 2023-7-24 10:13 | 顯示全部樓層
農(nóng)民阿伯 發(fā)表于 2023-7-23 19:01
剛把電路搞好,燒錄了程序,按下能變化,但是還是沒(méi)跳過(guò)第三種輪流播放。你給的這個(gè)程序不對(duì)。你這個(gè)是輸 ...

由于你要求的脈沖信號(hào)低電平要350ms
但沒(méi)說(shuō)兩個(gè)低電平之間的高電平是多少
所以我假設(shè)是10ms

可能是高電平時(shí)間不夠長(zhǎng)
改為以下代碼:
if(cnt_35==10)led = 0;//輸出低電平
if(++cnt_35>=45)//計(jì)時(shí)350ms
回復(fù)

使用道具 舉報(bào)

ID:1087674 發(fā)表于 2023-7-24 11:39 | 顯示全部樓層
lkc8210 發(fā)表于 2023-7-24 10:13
由于你要求的脈沖信號(hào)低電平要350ms
但沒(méi)說(shuō)兩個(gè)低電平之間的高電平是多少
所以我假設(shè)是10ms

總之十分感謝。請(qǐng)問(wèn),最后這句: Delay10ms();//控制10ms一次循環(huán)
時(shí)間要不要改呢?
回復(fù)

使用道具 舉報(bào)

ID:1087674 發(fā)表于 2023-7-28 00:33 | 顯示全部樓層
lkc8210 發(fā)表于 2023-7-24 10:13
由于你要求的脈沖信號(hào)低電平要350ms
但沒(méi)說(shuō)兩個(gè)低電平之間的高電平是多少
所以我假設(shè)是10ms

剛有空再重新改了程序,還是跳不過(guò)第三種方式。這個(gè)LED胸牌是先顯示“小心尾隨”,然后顯示“剎車(chē)”,然后再放開(kāi)手剎自動(dòng)顯示第三種方式:顯示“MI-8”后顯示“小心尾隨”然后顯示“剎車(chē)”,然后一直重復(fù)“小心尾隨”和“剎車(chē)”。就是想跳過(guò)第三種默認(rèn)的方式。如果手動(dòng)快速按是可以跳過(guò)的,時(shí)間也很短。
回復(fù)

使用道具 舉報(bào)

ID:1087674 發(fā)表于 2023-7-28 10:25 | 顯示全部樓層
lkc8210 發(fā)表于 2023-7-24 10:13
由于你要求的脈沖信號(hào)低電平要350ms
但沒(méi)說(shuō)兩個(gè)低電平之間的高電平是多少
所以我假設(shè)是10ms

程序是否有問(wèn)題。我要的是剎車(chē)顯示“剎車(chē)”,松開(kāi)剎車(chē)時(shí)顯示“小心尾隨”,即輸入端低電平時(shí)顯示,高電平又顯示。但是這個(gè)程序是每次都是要低電平才顯示。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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