標(biāo)題: Proteus模擬Arduino控制LED矩陣顯示屏測(cè)試程序 [打印本頁(yè)]

作者: backup2k    時(shí)間: 2020-4-7 22:35
標(biāo)題: Proteus模擬Arduino控制LED矩陣顯示屏測(cè)試程序
// Arduino 328 用16行*32列 LED矩陣顯示屏基礎(chǔ)測(cè)試程序,主頻是32MHz,在主菜單Project->工程設(shè)置中修改
// 項(xiàng)目格式 Proteus V8.9 SP2版本,測(cè)試如圖所示。


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


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},/*"國(guó)",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點(diǎn)陣屏一一對(duì)應(yīng),要顯示什么內(nèi)容,先把內(nèi)容復(fù)制到這個(gè)緩沖區(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); // 關(guān)閉138的輸出,顯示屏不會(huì)亮
    // 填充顯示緩沖區(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); // 關(guān)閉138的輸出,防止顯示串行
    PORTB=0xF0 | LineNum;    // 選擇第LineNum行   
    for (i = 0; i <= NumOf74HC595; i++)
    {  // 本電路圖中有4個(gè)595芯片,所以這里是4
       // 串行輸出數(shù)據(jù)
       digitalWrite(LATCH, LOW);
       shiftOut(R0, SCLK, MSBFIRST, DisplayBuffer[LineNum][NumOf74HC595-i]);
       digitalWrite(LATCH, HIGH);     
     }
     digitalWrite(DE, LOW); // 打開138的輸出,點(diǎn)亮相應(yīng)的行
     delayMicroseconds(refreshtime); // 每行數(shù)據(jù)的顯示停留時(shí)間
  }
}

LEDMatrix1632_8_9.rar

73.47 KB, 下載次數(shù): 22, 下載積分: 黑幣 -5


作者: gch1    時(shí)間: 2020-4-26 23:49
Arduino 328  主頻是32MHz?
作者: backup2k    時(shí)間: 2022-1-26 07:43
gch1 發(fā)表于 2020-4-26 23:49
Arduino 328  主頻是32MHz?

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




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1