找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

Proteus模擬Arduino控制LED矩陣顯示屏測試程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:306434 發(fā)表于 2020-4-7 22:35 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
// Arduino 328 用16行*32列 LED矩陣顯示屏基礎測試程序,主頻是32MHz,在主菜單Project->工程設置中修改
// 項目格式 Proteus V8.9 SP2版本,測試如圖所示。


// 源代碼如下。
int A = 8;
int B = 9;
int C = 10;
int D = 11;
int DE = 12;
int LATCH = 2; //鎖存信號 Latch
int SCLK = 3; //時鐘信號 Shift Clock
int R0 = 4; //數據輸入 ,Data Shift in
char datain=0x0F;
int refreshtime=500;
int i=0,LineNum=0; // 臨時循環(huán)變量
#define NumOf74HC595  3// 從0開始查數,實際上是4個,0也算一個。


unsigned char zimo[][32]={
{0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xF8,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x08,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00},/*"中",0*/
/* (16 X 16 , 宋體 )*/

{0x00,0x00,0x7F,0xFC,0x40,0x04,0x40,0x04,0x5F,0xF4,0x41,0x04,0x41,0x04,0x4F,0xE4,0x41,0x04,0x41,0x44,0x41,0x24,0x5F,0xF4,0x40,0x04,0x40,0x04,0x7F,0xFC,0x40,0x04},/*"國",1*/
/* (16 X 16 , 宋體 )*/

{0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x7C,0xFE,0x44,0x12,0x44,0x12,0x44,0x12,0x44,0x12,0x44,0x12,0x44,0x12,0x44,0x12,0x44,0x22,0x44,0x22,0x7C,0x4A,0x44,0x84,0x00},/*"加",2*/
/* (16 X 16 , 宋體 )*/

{0x00,0x40,0x20,0x40,0x10,0x40,0x10,0x40,0x87,0xFC,0x44,0x44,0x44,0x44,0x14,0x44,0x14,0x44,0x27,0xFC,0xE4,0x44,0x24,0x44,0x24,0x44,0x24,0x44,0x27,0xFC,0x04,0x04},/*"油",3*/
/* (16 X 16 , 宋體 )*/

};

unsigned char DisplayBuffer[16][4]={};  // 16行*32(4*8bit)列的顯示緩沖區(qū),與LED點陣屏一一對應,要顯示什么內容,先把內容復制到這個緩沖區(qū)中即可。

void setup() {
  pinMode(LATCH, OUTPUT);
  pinMode(SCLK, OUTPUT);
  pinMode(R0, OUTPUT);
  pinMode(A, OUTPUT);
  pinMode(B, OUTPUT);
  pinMode(C, OUTPUT);
  pinMode(D, OUTPUT);
  pinMode(DE, OUTPUT);

  DDRB=0xFF;  // 8 pin output

  digitalWrite(DE, HIGH); // 關閉138的輸出,顯示屏不會亮
    // 填充顯示緩沖區(qū)
  for(LineNum=0;LineNum<16;LineNum++)
  {
     DisplayBuffer[LineNum][NumOf74HC595]=zimo[2][LineNum*2];
     DisplayBuffer[LineNum][NumOf74HC595-1]=zimo[2][LineNum*2+1];

     DisplayBuffer[LineNum][NumOf74HC595-2]=zimo[3][LineNum*2];
     DisplayBuffer[LineNum][NumOf74HC595-3]=zimo[3][LineNum*2+1];
  }


}

void loop() {



for(LineNum=0;LineNum<16;LineNum++)
{
    digitalWrite(DE, HIGH); // 關閉138的輸出,防止顯示串行
    PORTB=0xF0 | LineNum;    // 選擇第LineNum行   
    for (i = 0; i <= NumOf74HC595; i++)
    {  // 本電路圖中有4個595芯片,所以這里是4
       // 串行輸出數據
       digitalWrite(LATCH, LOW);
       shiftOut(R0, SCLK, MSBFIRST, DisplayBuffer[LineNum][NumOf74HC595-i]);
       digitalWrite(LATCH, HIGH);     
     }
     digitalWrite(DE, LOW); // 打開138的輸出,點亮相應的行
     delayMicroseconds(refreshtime); // 每行數據的顯示停留時間
  }
}

LEDMatrix1632_8_9.rar

73.47 KB, 下載次數: 22, 下載積分: 黑幣 -5

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:685875 發(fā)表于 2020-4-26 23:49 | 只看該作者
Arduino 328  主頻是32MHz?
回復

使用道具 舉報

板凳
ID:306434 發(fā)表于 2022-1-26 07:43 | 只看該作者
gch1 發(fā)表于 2020-4-26 23:49
Arduino 328  主頻是32MHz?

可以改,主頻低的話,顯示效果不好!
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表