編集履歴一覧に戻る
taketea2018のアイコン画像

taketea2018 が 2026年06月30日17時57分17秒 に編集

初版

タイトルの変更

+

DIPマイコンLPC1114FNでmbed入門  Ledマトリックスで遊びましょう ~その3~

タグの変更

+

DIPマイコ

+

LPC1114FN

+

Mbed

+

Ledマトリックス

記事種類の変更

+

製作品

本文の変更

+

# DIPマイコンLPC1114FNでmbed入門  # Ledマトリックスで遊びましょう ~その3~ mbed LPC1114FN(以後、1114FN)は安価に購入できて、mbedクラウド開発環境を使ってプログラムを開発することができるマイコンです。1114FNを使って、8×8ドット=64個のLEDを使ったLEDマトリックスに文字を表示します。 1枚のLEDマトリックスに「0」を表示できましたか。今回はこのユニットに0~9を一文字ずつ表示します。 ![0~9](https://camo.elchika.com/07ffb7d15f3f35caf117dbb6e653cfc6b5487205/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35366430316335352d643164612d343337312d613931662d6436376466353963373766642f32303463303431612d363766302d346163372d613831372d313939613764623037363565/) # 注)  mbed LPC1114FNは発売からずいぶん経過しており、 Arm社が提供する「Mbed OS」および「Mbedプラットフォーム」は、2026年7月をもって完全にサポートを終了します。期間終了後はウェブサイトがアーカイブされ、オンラインでのプロジェクトビルドやコンパイルは一切できなくなります。回路図やプログラムは参考資料として公表します。 # ○フォントについて 文字や数字を表示するにはフォントを作る必要があります。フォント製作用ツールやサイトがいくつかあります。ここでは次のサイトを利用させて頂きました。このサイトは製作したLEDマトリックスユニットの使用を想定しているようです。ただ、ターゲットとしているマイコンはArduinoと思われます。 ``` http://xantorohara.github.io/led-matrix-editor/ ``` ここで制作するフォントは鏡文字のフォントです。左右が逆に配置されている点に注意して、プログラムを作成します。 # ○プログラムについて ## ■表示データ変換部 bitsum[i][j] i:0~9 数字の0~9を示します。j:0~7 LEDマトリックス 1列目から8列目のデータが入ります。 bitline[k] 二次元配列bitsum[i][j]のデータを表示しやすいように一元配列bitline[k]に入れます。この変換は後のスクロール文字を表示しやすくするために行っています。 ``` k=0; for(i=0;i<10;i++){// matrix data henkan for(j=0;j<8;j++){ bitline[k]=bitsum[i][j]; k++; } } ``` ## ■LEDマトリックス表示部 bitline[0~]のデータを8つずつ順番にLEDマトリックスに表示します。確認用LEDのON/OFFが入っていますが、なくてもかまいません。 ``` for(i=0;i<80;i=i+8){//1 moji goto hyouji led=ON; maxSingle(1,bitline[i+0]); maxSingle(2,bitline[i+1]); maxSingle(3,bitline[i+2]); maxSingle(4,bitline[i+3]); maxSingle(5,bitline[i+4]); maxSingle(6,bitline[i+5]); maxSingle(7,bitline[i+6]); maxSingle(8,bitline[i+7]); wait(0.2); led=OFF; wait(0.1); } ``` ## ■プログラム全体 プログラム全体を示します。 ``` // LedMatrix 1mai #include "mbed.h" DigitalOut led(dp28); // spi(mosi,miso,sck) SPI max72_spi(dp2, NC, dp6); DigitalOut load(dp14);//spi load // CPU MT7219 // dp1 mosi(Master In Salve Out) => DIN // dp2 miso(Master OutSlave) => nc // dp6 sck (Serial Clock) => clk // dp14 =>(Slave Select) load int maxInUse = 1; //change this variable to set how many MAX7219's you'll use // define max7219 registers #define max7219_reg_noop 0x00 #define max7219_reg_digit0 0x01 #define max7219_reg_digit1 0x02 #define max7219_reg_digit2 0x03 #define max7219_reg_digit3 0x04 #define max7219_reg_digit4 0x05 #define max7219_reg_digit5 0x06 #define max7219_reg_digit6 0x07 #define max7219_reg_digit7 0x08 #define max7219_reg_decodeMode 0x09 #define max7219_reg_intensity 0x0a #define max7219_reg_scanLimit 0x0b #define max7219_reg_shutdown 0x0c #define max7219_reg_displayTest 0x0f #define LOW 0 #define HIGH 1 #define MHZ 1000000 #define ON 1 #define OFF 0 void maxSingle( int reg, int col) { //maxSingle is the "easy" function to use for a //single max7219 load = LOW; // begin max72_spi.write(reg); // specify register max72_spi.write(col); // put data load = HIGH; // make sure data is loaded (on rising edge of LOAD/CS) } void maxAll (int reg, int col) { // initialize all MAX7219's in the system load = LOW; // begin for ( int c=1; c<= maxInUse; c++) { max72_spi.write(reg); // specify register max72_spi.write(col); // put data } load = HIGH; } void maxOne(int maxNr, int reg, int col) { //maxOne is for adressing different MAX7219's, //while having a couple of them cascaded int c = 0; load = LOW; for ( c = maxInUse; c >= maxNr; c--) { max72_spi.write(0); // no-op max72_spi.write(0); // no-op } max72_spi.write(reg); // specify register max72_spi.write(col); // put data for ( c=maxNr-1; c >= 1; c--) { max72_spi.write(0); // no-op max72_spi.write(0); // no-op } load = HIGH; } void setup () { // initiation of the max 7219 // SPI setup: 8 bits, mode 0 max72_spi.format(8, 0); // going by the datasheet, min clk is 100ns so theoretically 10MHz should work... // max72_spi.frequency(10*MHZ); maxAll(max7219_reg_scanLimit, 0x07); maxAll(max7219_reg_decodeMode, 0x00); // using an led matrix (not digits) maxAll(max7219_reg_shutdown, 0x01); // not in shutdown mode maxAll(max7219_reg_displayTest, 0x00); // no display test for (int e=1; e<=8; e++) { // empty registers, turn all LEDs off maxAll(e,0); } maxAll(max7219_reg_intensity, 0x0f & 0x0f); // the first 0x0f is the value you can set // range: 0x00 to 0x0f } void led_flash(){ int i; for(i=0;i<3;i++){ led=ON; wait(0.1); led=OFF; wait(0.1); } } int main(void) { const uint64_t moji_font[] = {// bold font , kagami moji font 0x3c66666e76663c00,//0~9 0x7e1818181c181800, 0x7e060c3060663c00, 0x3c66603860663c00, 0x30307e3234383000, 0x3c6660603e067e00, 0x3c66663e06663c00, 0x1818183030667e00, 0x3c66663c66663c00, 0x3c66607c66663c00, }; int i,j,k; uint8_t bitsum[1][8],bit1gyou,bitline[80]; uint64_t moji1; setup(); led_flash(); wait(0.1); while(1){ for(i=0;i<10;i++){ moji1=moji_font[i];// 0~9 for(j=0;j<8;j++){ bitsum[i][j]=0; } for(j=0;j<8;j++){ bit1gyou=moji1 & 0xff; for(k=0;k<8;k++){// kagamimoji no font //for(k=8;k>=1;k--){ // futuu no font bitsum[i][k]=bitsum[i][k]+(bit1gyou & 0x01)*pow((double)2,(double)(j)); bit1gyou=bit1gyou >> 1; }//i moji1=moji1 >> 8; }//j } k=0; for(i=0;i<10;i++){// matrix data henkan for(j=0;j<8;j++){ bitline[k]=bitsum[i][j]; k++; } } for(i=0;i<80;i=i+8){//1 moji goto hyouji led=ON; maxSingle(1,bitline[i+0]); maxSingle(2,bitline[i+1]); maxSingle(3,bitline[i+2]); maxSingle(4,bitline[i+3]); maxSingle(5,bitline[i+4]); maxSingle(6,bitline[i+5]); maxSingle(7,bitline[i+6]); maxSingle(8,bitline[i+7]); wait(0.2); led=OFF; wait(0.1); } }//while }//main ``` ## ■Publish このプログラムは下記URLにてPublishしています。 https://developer.mbed.org/users/takeuchi/code/20160505_V13_LedMatrix/ 次回はスクロール文字表示に挑戦します。 ![キャプションを入力できます](https://camo.elchika.com/ce1a999f81dd7090357ff520cdd41f0d2f9dd282/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35366430316335352d643164612d343337312d613931662d6436376466353963373766642f38306237313336372d376465612d343338342d386231372d643032393331636135306335/) ![キャプションを入力できます](https://camo.elchika.com/8290bd4e9da0d97e5f645475f4ac0c40f6a30659/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35366430316335352d643164612d343337312d613931662d6436376466353963373766642f38643732333231382d653233662d346264352d386538382d313963393364626535333433/) ![キャプションを入力できます](https://camo.elchika.com/77d865b3fadc9e4046b909eb701dbb7d7101753e/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35366430316335352d643164612d343337312d613931662d6436376466353963373766642f33386562313266392d636463342d346239622d626561662d336365376335666262303065/) ![キャプションを入力できます](https://camo.elchika.com/e10cdc0acdabef7a357144e0d4f1ca6656c3054c/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35366430316335352d643164612d343337312d613931662d6436376466353963373766642f65303938643364392d353833362d343135302d626365342d613533353935303735396237/) ![キャプションを入力できます](https://camo.elchika.com/19cf233aa79238a6683ecf501a167ecfc1ba407c/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35366430316335352d643164612d343337312d613931662d6436376466353963373766642f63316530313365322d633331642d346665642d616262372d323165383432646638353233/) ![キャプションを入力できます](https://camo.elchika.com/43bb88b256d7c033e2e053166a7c75268826f583/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35366430316335352d643164612d343337312d613931662d6436376466353963373766642f37366262373833352d323662322d346530322d623332372d643032313035623364316635/) ![キャプションを入力できます](https://camo.elchika.com/71e22baf242708cb3d36da74c7911b714c97a86d/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35366430316335352d643164612d343337312d613931662d6436376466353963373766642f39333733306330352d393737642d343665612d626163332d666161666534626365333963/) ![キャプションを入力できます](https://camo.elchika.com/af4b4f4884ec8090b403bb9582b14363d17e3e9f/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35366430316335352d643164612d343337312d613931662d6436376466353963373766642f38363437643565622d626331322d346263392d623039652d376131663935363538313936/) ![キャプションを入力できます](https://camo.elchika.com/bf3ef3b93d8054ed57cdb6de0b9237dd2afd2b91/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35366430316335352d643164612d343337312d613931662d6436376466353963373766642f37646234386463622d373566632d343038392d393232632d666234623661363234316439/) ![キャプションを入力できます](https://camo.elchika.com/98f8b6b4354b158a5bbd1d9fbef39c910fcb8907/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35366430316335352d643164612d343337312d613931662d6436376466353963373766642f39323233663232342d376566662d343038652d386433652d303865386661353061323038/)