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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1793|回復: 11
打印 上一主題 下一主題
收起左側

單片機點陣程序怎樣讓移動后的箭頭后面燈熄滅呢?

[復制鏈接]
跳轉到指定樓層
樓主


單片機源程序如下:
#include <reg51.h>
//定義74HC595控制管腳
sbit SCK=P3^6;
sbit RCK=P3^5;
sbit SER=P3^4;
unsigned char matrixLED1[8]={0x00,0x38,0x38,0x38,0xfe,0x7c,0x38,0x10};//LED點陣高電平端口數據
unsigned char temp[8];
unsigned char matrixLED0[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//LED點陣低電平端口數據
void delay(unsigned int a)
{
   while(a--);
   }
void col_data(unsigned char dat)
{
unsigned char i=0;
for(i=0;i<8;i++)//循環8次即可將一個字節寫入寄存器中
{SER=dat>>7;//!優先傳輸一個字節中的高位
dat<<=1;
SCK=0;
delay(1);
SCK=1;
delay(1); //上升沿時數據移位
}
RCK=0;
delay(1);
RCK=1;
}
void main()
{
unsigned char i,j,k;
while(1)
   {
for (i=0;i<15;i++)
   {
      if(i<8)
   {
      for(j=0;j<8;j++)  temp[j]=matrixLED0[j]<<(7-i);
         
      }
else
   {
      for(j=0;j<8;j++)
         temp[j]=(matrixLED0[j])&(0xff));

         }
for(k=0;k<5;k++)
   {
   for(j=0;j<8;j++)
      {
         P0=temp[j];
         col_data(matrixLED1[j]);//傳送高電平端口數據
         delay(100);
         col_data(0x00);
         }
         }}}}


程序哪里可以讓移動后后面的燈熄滅,不至于出現方塊移動
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1001921 發表于 2022-1-14 18:00 | 只看該作者
我想讓移動后無圖案的數組清0,應該就能熄滅,但不知道怎么弄
回復

使用道具 舉報

板凳
ID:517466 發表于 2022-1-14 19:49 | 只看該作者
你先搞清楚思路。顯示滾動其實就是利用時間差,靜態顯示數據,形成動態的圖案。這個時間差,你可以根據實驗結果來調整。在某一個時刻A圖,間隔一定時間后,顯示B圖;再次間隔一定時間顯示C圖......
具體就是這個思路。按照這個思路,如果想在箭頭后清除畫面,就是發送能讓LED滅掉的數據而已。看你提供的電路圖,應該是在顯示箭頭后的數據中,向P0口發送全1數據即可。即P0=0xFF;
回復

使用道具 舉報

地板
ID:624769 發表于 2022-1-14 20:33 | 只看該作者
最簡單的方法,就是把 8x8的箭頭圖,變成 16x8 ,其中8x8還是你原來的箭頭,另外的8x8 為全0,然后讓它 滾起來。
回復

使用道具 舉報

5#
ID:1001921 發表于 2022-1-14 21:52 | 只看該作者
suncat0504 發表于 2022-1-14 19:49
你先搞清楚思路。顯示滾動其實就是利用時間差,靜態顯示數據,形成動態的圖案。這個時間差,你可以根據實驗 ...

額。道理懂,但是我就是不太會改。我這就是掃描列,然后讓列移動。
回復

使用道具 舉報

6#
ID:213173 發表于 2022-1-15 08:36 | 只看該作者

  1. #include <reg51.h>
  2. //定義74HC595控制管腳
  3. sbit SCK=P3^6;
  4. sbit RCK=P3^5;
  5. sbit SER=P3^4;
  6. unsigned char matrixLED1[]={0x10,0x38,0x7c,0xfe,0x38,0x38,0x38,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//LED點陣高電平端口數據
  7. unsigned char temp[8];
  8. unsigned char matrixLED0[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//LED點陣低電平端口數據


  9. void delay(unsigned int a)
  10. {
  11.    while(a--);
  12. }
  13. void col_data(unsigned char dat)
  14. {
  15.         unsigned char i=0;
  16.         for(i=0;i<8;i++)//循環8次即可將一個字節寫入寄存器中
  17.         {
  18.                 SER=dat>>7;//!優先傳輸一個字節中的高位
  19.                 dat<<=1;
  20.                 SCK=0;
  21.                 delay(1);
  22.                 SCK=1;
  23.                 delay(1); //上升沿時數據移位
  24.         }
  25.         RCK=0;
  26.         delay(1);
  27.         RCK=1;
  28. }
  29. void main()
  30. {
  31.         unsigned char i,j,k;
  32.         while(1)
  33.         {
  34.                 P0=0x00;
  35.                 col_data(matrixLED0[i]);
  36.                 P0=matrixLED1[i];
  37.                 i=++i%8;
  38.                 delay(100);
  39.                 j++;
  40.                 if(j>=100)
  41.                 {
  42.                         j=0;
  43.                         matrixLED1[16]=matrixLED1[0];
  44.                         for(k=0;k<16;k++)
  45.                                 matrixLED1[k]=matrixLED1[k+1];
  46.                 }
  47.         }
  48. }
復制代碼



回復

使用道具 舉報

7#
ID:517466 發表于 2022-1-15 09:20 | 只看該作者
這是我修改后的代碼,沒有使用595,用P2口代替了
#include <reg51.h>
//定義74HC595控制管腳
sbit SCK=P3^6;
sbit RCK=P3^5;
sbit SER=P3^4;
unsigned char rows[24]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x1c,0x3e,0x7f,0x1c,0x1c,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

void delay(unsigned int a)
{
   while(a--);
   }
void col_data(unsigned char dat) {
    unsigned char i=0;
    //循環8次即可將一個字節寫入寄存器中
    for(i=0;i<8;i++) {
        SER=dat>>7;//!優先傳輸一個字節中的高位
        dat<<=1;
        SCK=0;
        delay(1);
        SCK=1;
        delay(1); //上升沿時數據移位
    }
    RCK=0;
    delay(1);
    RCK=1;
}

void main() {
    unsigned char i,j;
    while(1) {
        for(i=0;i<16;i++) {
            for(j=0;j<8;j++) {
                P2=rows[i+j];
                P0=(1<<j)^255;
                delay(1300);
                P0=255;
            }


        }

    }
}

回復

使用道具 舉報

8#
ID:517466 發表于 2022-1-15 09:24 | 只看該作者
這是執行效果

demo.zip

346.96 KB, 下載次數: 3

流動箭頭的演示

回復

使用道具 舉報

9#
ID:517466 發表于 2022-1-15 09:31 | 只看該作者
如果想使用595,那么修改一下代碼,增加595部分(紅色文字代碼)的處理即可:
                P2=rows[i+j];
                col_data(rows[i+j]);

                P0=(1<<j)^255;
電路修改為:

經測試,是一樣的效果
回復

使用道具 舉報

10#
ID:517466 發表于 2022-1-15 09:44 | 只看該作者
wulin提供代碼,可能需要修改點陣LED的接線圖,要把器件反轉180度后,照圖連接。這個需要特別注意。
回復

使用道具 舉報

11#
ID:332444 發表于 2022-1-15 13:22 | 只看該作者
用得著寫那么多?原本數據不用添加消隱值,重點提示2句完成P0=[cs];QuDong595((cs+d<8?[cs+d]:0x00));數據逐漸消失,數據逐漸出現cs+8-d
回復

使用道具 舉報

12#
ID:332444 發表于 2022-1-17 11:53 | 只看該作者
代碼簡潔源于精妙嚴謹推敲,看電路寫代碼,看代碼連接電路,看電路改代碼,看代碼改電路都是基礎,初學單片機時,雖然自己有想法能寫出來,也希望能多看看別人是如何寫的,于是周游論壇,遍覽群書,訪師尋友只是看看,自己歷練才能達到想要的結果。級聯595演示只有一個8*8數據,數組不再添加任何值,實現數據出現數據消失,90度轉向,實現4個方向花樣。

1.gif (562.88 KB, 下載次數: 30)

1.gif
回復

使用道具 舉報

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

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一区二区在线观看 | 91短视频网址 | 免费午夜视频 | 国产午夜精品一区二区三区嫩草 | 久久99网站| 久久久一区二区三区 | 国产中文字幕在线观看 | 国产欧美一区二区三区日本久久久 | 91精品久久久久久久99 | 国产一区二区精品在线观看 | 久久精品视频一区二区 | 婷婷成人在线 | 国产成人综合在线 | 国产精品久久久久久二区 | 亚洲美女一区 | 亚洲精品天堂 | 狠狠久| 二区高清 | 黑人精品| 欧美性猛交一区二区三区精品 | 日韩a在线观看 | 日韩在线视频免费观看 | 在线观看国产视频 | 欧美亚洲国产一区二区三区 | 国产精品久久久久久久久污网站 | 可以免费看的毛片 | 免费在线日韩 | 精品国产综合 | 精品欧美乱码久久久久久 | 亚洲综合在线播放 | 97人人爱 | 欧美一区二区三区视频在线观看 | 黄色a级一级片 | 爱爱视频网 | 日日干干| 国产精品美女久久久免费 | 婷婷一级片 | 精品视频一区二区三区 | 午夜视频在线 | 精品国产一区二区三区久久久久久 | 韩日有码 |