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

標題: 單片機數碼管筆劃跑馬燈程序怎樣實現? [打印本頁]

作者: ningsy    時間: 2022-9-23 23:28
標題: 單片機數碼管筆劃跑馬燈程序怎樣實現?
本人初學51單片機,最近在搞一個步進電機的小制作,主要功能就是用51控制A4988模塊,驅動步進電機實現正反轉,加減速,存儲當前速度等功能。拜論壇各位前輩所賜,下了些代碼拼到一塊,磕磕絆絆倒也實現了主要功能。興奮之余也想搞一點錦上添花的效果,就是讓數碼管筆劃做出跑馬燈的效果,用兩位數碼管,電機正轉就正向跑馬,反轉就反向跑馬(這是我們家壓力鍋上的效果,下有視頻)。然而功力太淺,毫無頭緒,故特來萬能的51hei求助。在此先謝謝了!

51hei.gif (3.03 MB, 下載次數: 94)

51hei.gif

作者: 名字不是重點    時間: 2022-9-24 17:10
不規則的、萬能的碼表!
作者: ningsy    時間: 2022-9-24 17:21
笨方法搞了一段代碼,可是實現不了反顯的效果呢?



#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char

//定義數碼管位選信號控制腳
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;


uchar fan;
uint zheng;

void delayms(uint xms)
{
        uint i;
        uchar j;
        for(i=xms;i>0;i--)
          for(j=110;j>0;j--);
}

void main()
{
   while(1)
       {        
         for(fan=0;fan<4;fan++)
         {
         P0=0x01;              //7 上筆劃從右往左  反轉
         LSC=1;LSB=1;LSA=0;      
         delayms(500);

         P0=0x01;              //8    上筆劃從右往左
         LSC=1;LSB=1;LSA=1;
         delayms(500);
      
         P0=0x20;              //8 左端左上筆劃
         LSC=1;LSB=1;LSA=1;
         delayms(500);
      
         P0=0x10;               //1 左端左下筆劃
         LSC=1;LSB=1;LSA=1;
         delayms(500);
      
         P0=0x08;               //8 下筆劃 從左往右
         LSC=1;LSB=1;LSA=1;
         delayms(500);
      

         P0=0x08;              //7    下筆劃 從左往右
          LSC=1;LSB=1;LSA=0;
         delayms(500);
                                 
         P0=0x04;               //1 右端右下筆劃
         LSC=1;LSB=1;LSA=0;                          
         delayms(500);      
                  
         P0=0x02;                //1 右端右上筆劃   
         LSC=1;LSB=1;LSA=0;                           
         delayms(500);
         }

         
           for(zheng=0;zheng<4;zheng++)
         { P0=0x01;              //7 上筆劃從左往右      正轉
         LSC=1;LSB=1;LSA=1;      
         delayms(500);

         P0=0x01;                //8  上筆劃從右往左
         LSC=1;LSB=1;LSA=0;
         delayms(500);
      
          P0=0x02;               //1 右端右上筆劃   
         LSC=1;LSB=1;LSA=0;                           
         delayms(500);

         P0=0x04;                //1 右端右下筆劃
         LSC=1;LSB=1;LSA=0;                          
         delayms(500);  
        
         P0=0x08;              //7    下筆劃 從右往左
          LSC=1;LSB=1;LSA=0;
         delayms(500);
                        
         P0=0x08;                //8 下筆劃 從右往左
         LSC=1;LSB=1;LSA=1;
         delayms(500);
      
        
         P0=0x10;                //1 左端左下筆劃
         LSC=1;LSB=1;LSA=1;
         delayms(500);
      

         P0=0x20;               //8 左端左上筆劃
         LSC=1;LSB=1;LSA=1;
         delayms(500);
         }
        
      }
}












作者: xuyaqi    時間: 2022-9-24 18:20
先想辦法讓指定的段亮起來,然后按順序執行,就實現了數碼管筆劃跑馬燈。
作者: mengsiu    時間: 2022-9-24 18:43
先顯示 [ ] ,再逐段熄滅。
作者: ningsy    時間: 2022-9-24 20:26
遇到一個新問題:把代碼帶入主程序,也許是delay時間太長,主程序都不干活了,電機不轉了調短delay時間,電機轉了,顯示效果又太差了
作者: 人中狼    時間: 2022-9-24 20:51
把現在代碼里的顯示數據取個反

作者: wulin    時間: 2022-9-24 21:05

示例程序 仿真.rar (126.08 KB, 下載次數: 14)




作者: 一事無成    時間: 2022-9-24 21:15
你的想法沒錯,就是萬能的狀態機嘛,一個個寫倒是沒必要,又不是Verilog,完全可以用數組存儲狀態,然后循環調用
你的P0不復位確定不會影響下一個狀態?
作者: zmc419    時間: 2022-9-24 21:26
看原理圖,找到每段對應代碼,做個數組,按順序讀出數字中數字輸出到端口。
作者: coody_sz    時間: 2022-9-24 22:30
像顯示數字那樣,搞個字形,按數字那樣顯示。
作者: ningsy    時間: 2022-9-24 23:44
感謝各位前輩指導,尤其感謝8樓wulin大師,您這個代碼容我好好消化下,腦子已經繞暈了
作者: xianfajushi    時間: 2022-9-25 03:58
15,14,13,11,7,57,49,41,25,56
作者: wulin    時間: 2022-9-25 06:37
ningsy 發表于 2022-9-24 23:44
感謝各位前輩指導,尤其感謝8樓wulin大師,您這個代碼容我好好消化下,腦子已經繞暈了

給你補充正反轉顯示,糾正s的數據類型。
示例程序 仿真.rar (126.79 KB, 下載次數: 14)


作者: ningsy    時間: 2022-9-25 13:05
wulin 發表于 2022-9-25 06:37
給你補充正反轉顯示,糾正s的數據類型。

多謝大師指導,感覺您代碼里有好多技巧,C語言控制單片機已經用的得心應手了,我還得繼續學習提高啊!
作者: yzwzfyz    時間: 2022-9-26 11:15
很簡單的事:
臺面上無論有多少個LED燈,只要你能將特定的一些LED燈,輪流亮、滅就達成了跑馬了。
舉一反三:滾字、閃動、閃光標、斜走字都一樣。
下面教你一個通用的方式:
本例你有4個數碼管,計8*4個LED燈。
1、用一個數組來表達每一個LED的明暗,本例:一個數組=4個字節,計32位,每位的0/1對應一個LED燈的暗/明。
2、將每一種顯示狀態用一個這個數組用表達:例如:全亮={FFH,FFH,FFH,FFH};全暗={00H,00H,00H,00H},如此你有100個狀態,就建立100數組。
本例轉一圈,共狀態,建8個數組就行了。
3、寫個程序,每間隔一段時間依序取出一組數據,送至IO口去顯示LED……,循環重復。
以上思路簡單、清晰、還易實現。顯示機動靈活,修改數組就玩轉了各種顯示方式了。
如果是點陣LED,做個紅心,弄個燈塔,擺個方陣,上移、下跳、斜跑……隨意,全在數組中編輯(EXCEL表中排排,導入到數組中),程序都不用改動。
作者: ningsy    時間: 2022-9-26 14:17
yzwzfyz 發表于 2022-9-26 11:15
很簡單的事:
臺面上無論有多少個LED燈,只要你能將特定的一些LED燈,輪流亮、滅就達成了跑馬了。
舉一反 ...

謝大師指點,B站上有高手做了一個數碼管跑馬燈視頻,正反流水、斜跑、追光等等很多復雜效果,很是酷炫。我剛學51,C語言基礎不扎實,屬于現學現賣的程度,現在是一看數組就頭暈的狀態

https://www.bilibili.com/video/BV1fJ411b7cU/?spm_id_from=333.337.search-card.all.click


作者: 人中狼    時間: 2022-9-26 14:40
最簡單的是根據要顯示的內容直接對顯示變量進行位操作,就不用考慮數組了





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 久久大陆| 伊人精品一区二区三区 | 亚洲一区二区三区四区在线观看 | 免费视频一区二区三区在线观看 | 奇米在线 | 自拍偷拍亚洲视频 | 亚洲一区二区三区免费视频 | 久久久做 | 亚洲高清视频在线 | 日韩av手机在线观看 | 免费观看成人av | 色综合久久天天综合网 | 国产一区二区三区在线看 | 日韩在线一区二区三区 | 久久久精品影院 | 国产精品美女久久久久久久网站 | 国产一区电影 | 久久久精品网 | 天天夜天天操 | 国产一区二区在线播放 | 中文字幕亚洲一区 | 国产成人自拍一区 | 最新国产精品精品视频 | 欧美日韩综合视频 | 日韩午夜网站 | 在线观看国产视频 | 狠狠亚洲| 91视频在线 | 国产精品欧美大片 | 亚洲精品9999 | 亚洲一区二区三 | 色爱综合网 | 国产精品一区久久久久 | 国产91亚洲精品一区二区三区 | 在线精品一区二区三区 | 日韩a v在线免费观看 | 欧美一区二区三区在线看 | 在线观看视频91 | 看a级黄色毛片 | 日本一区二区不卡 | 一本一道久久a久久精品综合蜜臀 |