このパートでは、MIPSfpga-plusにNokia 5100の内蔵ADCと一般的なLCDを追加します。
前のパートから、MIPSFPGAでの周辺機器の統合は5つの主要なステップで構成されていると結論付けることができます。
- 周辺機器(i2c、spiなど)と通信するためのインターフェイスモジュールを追加します。
- モジュールの入力/出力ポートとAHB-Liteバスの接続。
- 接続されたデバイスの信号アドレスの割り当て。
- ボードの物理的な接点に構造を追加します。
- MIPSプロセッサ用のプログラムを作成します。
cmoda7の内蔵ADCの接続
すでに述べたように、cmodA7ボードにはADCが組み込まれており、ピン15および16はFPGAモジュールのアナログ入力として使用されます。 内蔵ADCの動作範囲は0〜1Vなので、外部回路を使用して入力電圧を3.3Vに上げます。
この回路により、XACDは0 V〜3.3 V(GNDを基準とする)の電圧を正確に測定できます。 ADCを使用するために、VivadoにはザイリンクスIP(Intellectual Property)ユニットがあり、MIPSfpgaシステムに簡単に統合できます。
モジュールを追加する
前のパート( パート1 、 パート2 )で作成されたプロジェクトを開きましょう。 まず、IPシステムと対話するためのモジュールを作成する必要があります。 Vivadoで、[ソースの追加]-> [デザインソースの追加または作成]-> [ファイルの作成]->(xadcを呼び出します)-> [完了]-> [OK]-> [はい]を選択します。 [ソース]セクションで、ファイルを開きます。
次に、IPを追加する必要があります。
[プロジェクトマネージャー]タブで、[IPカタログ]を選択します。 FPGAの機能とデザイン-> XADC-> XADCウィザードフォルダーに移動して開きます。
次のステップは、XADCブロックを構成することです。 [基本]タブで、画像のように値を設定します。
つまり、このタブでは、サンプリング周波数、ADCの動作モード、およびチャンネルを設定します。
[ADCセットアップ]タブに移動します。
すべての警告信号を使用するわけではありませんので:
[基本]タブで、シングルチャネルモードを選択しました(これは、1つのVAux4チャネルを使用する方法です)。
[OK]-> [生成]をクリックします。 IPを作成したら、それをxadcモジュールに追加する必要があります。
`timescale 1ns / 1ps module xadc( input i_clk, input i_rst_n, input i_xa_p, input i_xa_n, output reg [15:0] xadc_data ); wire [15:0] do_out; xadc_wiz_0 wiz ( .daddr_in(8'h14), // Address bus for the dynamic reconfiguration port .dclk_in(i_clk), // Clock input for the dynamic reconfiguration port .den_in(1'b1), // Enable Signal for the dynamic reconfiguration port .di_in(16'b0), // Input data bus for the dynamic reconfiguration port .dwe_in(1'b0), // Write Enable for the dynamic reconfiguration port .vauxp4(i_xa_p), // Auxiliary channel 4 .vauxn4(i_xa_n), .busy_out(), // ADC Busy signal .channel_out(), // Channel Selection Outputs .do_out(do_out), // Output data bus for dynamic reconfiguration port .drdy_out(), // Data ready signal for the dynamic reconfiguration port .eoc_out(), // End of Conversion Signal .eos_out(), // End of Sequence Signal .alarm_out(), // OR'ed output of all the Alarms .vp_in(1'b0), // Dedicated Analog Input Pair .vn_in(1'b0) ); always @(posedge i_clk, negedge i_rst_n) if (!i_rst_n) xadc_data <= 16'b0; else xadc_data <= do_out; endmodule
モジュールの入力/出力ポートとAHB-Liteバスの接続
MIPSfpgaシステムの階層を簡単に見て、必要な接続を追加しましょう。
「mfp_system」で、シェルモジュールからの入力信号を追加します。
`ifdef MFP_XADC input I_XA_P, input I_XA_N, `endif
「xadc」および「mfp_ahb_lite_matrix_with_loader」のインスタンスを接続するためのワイヤタイプの信号:
`ifdef MFP_XADC wire [15:0] XADC_DATA; `endif
`ifdef MFP_XADC .XADC_DATA ( XADC_DATA ), `endif
そして、xadcモジュール自体のインスタンスを接続します。
`ifdef MFP_XADC xadc xadc ( .i_clk ( SI_ClkIn ), .i_rst_n ( ~SI_Reset ), .i_xa_p ( I_XA_P ), .i_xa_n ( I_XA_N ), .xadc_data ( XADC_DATA ) ); `endif
「mfp_ahb_lite_matrix_with_loader」:
`ifdef MFP_XADC input [15:0] XADC_DATA, `endif
`ifdef MFP_XADC .XADC_DATA ( XADC_DATA ), `endif
「mfp_ahb_lite_matrix」:
`ifdef MFP_XADC input [15:0] XADC_DATA, `endif
`ifdef MFP_XADC .XADC_DATA ( XADC_DATA ), `endif
「mfp_ahb_gpio_slave」で出力ポートを追加します。
`ifdef MFP_XADC input [15:0] XADC_DATA, `endif
そして、2番目の常にブロックで、周辺機器を定義するマルチプレクサの入力に追加します。
`ifdef MFP_XADC `MFP_XADC_IONUM : HRDATA <= { 16'b0, XADC_DATA }; `endif
階層をトップモジュールシェルに戻して、ボード上の物理的な接点を持つ接続信号を追加しましょう。
input i_xa_p, input i_xa_n,
そしてmfp_systemインスタンスに追加します:
`ifdef MFP_XADC .I_XA_P ( i_xa_p ), .I_XA_N ( i_xa_n ), `endif
接続されたデバイスの信号アドレスを割り当てる
アドレス割り当ては、構成ファイル「mfp_ahb_litematrix_config.vh」によって実行されます。
最初に、コメントを解除する//コメント行を追加します。この場合、ifif MFP_XADC ... endifで定義したプロジェクトで記述された特定の周辺の行を除外するために含めることができます
`define MFP_XADC
アドレスを定義します。
`ifdef MFP_XADC `define MFP_XADC_ADDR 32'h1f80001C `endif
また、アドレスを定義する定数:
`ifdef MFP_XADC `define MFP_XADC_IONUM 4'h7 `endif
物理的なボードの連絡先への制約の追加
ここで、作成した信号を* .xdcファイルに追加する必要があります。 cmodA7ボードのビルトインADCには、ADx_P-G2およびADx_N-G3という名前のピンがあり、それらをファイルに追加します。
## Analog XADC Pins set_property -dict {PACKAGE_PIN G2 IOSTANDARD LVCMOS33} [get_ports i_xa_n] set_property -dict {PACKAGE_PIN G3 IOSTANDARD LVCMOS33} [get_ports i_xa_p]
MIPSプロセッサー用のプログラムの作成
最後のステップは、ADCと対話するプロセッサ用のプログラムを作成することです。
この記事の主な目的は、MIPSfpgaなどのプロジェクトの機能を実証することです。コードには数行しかないためです。 これは、ある程度、デジタルデザインを学ぶことを決定したプログラマーと、プログラミングプロセッサに深く入り込むことを決定したデザイナーの両方の出発点です。
柔軟性は、最も単純なVerilogモジュール(VHDL)と複雑なCプログラム(たとえば、大きなコードでSPIを実装する、またはその逆)を記述できることです。
MIPSfpgaプロセッサは、イマジネーションのCodescape開発ツールを使用してプログラムされます。 Codescape SDKとOpenOCDをインストールします。 Codescapeは、C言語とアセンブリ言語の両方でのプログラミングをサポートしています。
システムにコードをダウンロードするには、ダウンロードしたフォルダーmipsfpga plus-> github-> mipsfpga-plus-> Programs-> 01_light_sensor open "mfp_memory_mapped_registers.h"に移動します
#define MFP_XADC_ADDR 0xBF80001 #define MFP_XADC (* (volatile unsigned *) MFP_XADC_ADDR )
次に、main.cを開き、数行を記述します。
#include "mfp_memory_mapped_registers.h" void delay(); int main () { int n = 0; for (;;) { MFP_7_SEGMENT_HEX = MFP_XADC >> 8 ; delay(); } return 0; } void delay() { volatile unsigned int j; for (j = 0; j < (1000000); j++) ; // delay }
motorola_s_recordファイルを生成します。
08_generate_motorola_s_record_file
USB UARTコンバーターが接続されているCOMポートを確認します。
11_check_which_com_port_is_used
ファイル12_upload_to_the_board_using_uartを変更します。
set a=7 mode com%a% baud=115200 parity=n data=8 stop=1 to=off xon=off odsr=off octs=off dtr=off rts=off idsr=off type program.rec >\.\COM%a%
ここで、aはUSB UARTコンバーターが接続されているCOMポート番号です。
そして、プログラムをロードします。
12_upload_to_the_board_using_uart
配線図:
したがって、ADCでは、プロセッサは、抵抗器とフォトレジスタで構成される分周器からボード上のアナログ入力に供給される電圧に対応する16ビット数を受け取り、その後、プロセッサはデータを8ビット左にシフトし、7セグメントインジケータを表示します。 ご覧のとおり、すべてがシンプルです。 これで、ニーズにコードを追加できます。
Nokia 5100 LCDディスプレイ統合
ネットワークでは、このようなLCDディスプレイはArduinoの労働者の間で大きな需要があり、さまざまなプロジェクトでそれを使用する第二の人生の機会を彼に与えたと言えます。 そのため、慣例としてMIPSプロセッサに接続してみることにしました。
以下のアクションは、すべてのステップが上記で詳細に説明されているように、簡潔かつ本質的に説明します。
ディスプレイはSPIインターフェースを介して制御され、ディスプレイはスレーブデバイスです。 ただし、通常の4本の制御線の代わりに、3本しかありません。 これらは、CLKクロックライン、SCEチップ選択、およびMOSI入力データです。 MISO出力行がありません。 このため、特別な管理方法を適用する必要が生じます。これについては後で詳しく説明します。 Nokia 5110には、追加の情報/コマンド制御ライン-D /C̅もあります。 ディスプレイに送信される各バイトは、D /C̅ラインのレベルに応じて、コマンドまたは情報バイトとして解釈できます。
配線図:
ピン | 表示指定 | XDCファイルでの出力の指定 | 接点マーキング
FPGA | 予定 |
---|---|---|---|---|
34 | BL | o_sbl | W3 | バックライト |
33 | Clk | o_sck | V2 | 同期信号 |
32 | in騒 | o_sdo | W2 | データ転送 |
30 | DC | o_sdc | T2 | 信号コマンド/データ |
29日 | CE | o_sce | T1 | データ有効信号 |
28 | Rst | o_rst | R2 | リセット信号 |
Vcc | Vcc | - | - | 栄養 |
GND | Gnd | - | - | 地球 |
周辺機器通信インターフェースモジュールの追加
ディスプレイからのフィードバックがないため、データを送信するためだけにモジュールを作成できます。 Nokia 5100 LCDディスプレイのデータシート。
MIPSfpga-plusとのディスプレイインタラクション用のモジュールを作成し、プロジェクトに追加します。
/* * SPI interface for MIPSfpga */ module mfp_lcd_spi( input clk, input i_rst_n, input [7 : 0] value, input [2 : 0] ctrl, input send, output reg sdo, output sck, output reg ce, output reg sdc, output reg sbl, output reg o_rst_n ); parameter DIV_WIDTH = 16; // Width counter reg [DIV_WIDTH - 1:0] counter; reg [7:0] data_r; reg [3:0] bit_count_r; // register for control signal always @(posedge clk, negedge i_rst_n) if (!i_rst_n) begin sdc <= 1'b0; sbl <= 1'b0; o_rst_n <= 1'b0; end else begin sdc <= ctrl[0]; sbl <= ctrl[1]; o_rst_n <= ctrl[2]; end // assign sck = (counter[DIV_WIDTH - 1]); // counter for low frequency spi out always @(posedge clk, negedge i_rst_n) if (!i_rst_n ) begin counter <= {DIV_WIDTH{1'b0}}; end else if (!ce) counter <= counter + 1'b1; else counter <= {DIV_WIDTH{1'b0}}; // shift register for sending data always @(posedge clk, negedge i_rst_n) if (!i_rst_n) begin data_r <= 8'b0; sdo <= 1'b0; bit_count_r <= 4'b1001; end else if (bit_count_r != 4'b1001 && counter == 0) begin sdo <= data_r[7]; data_r <= data_r << 1; bit_count_r <= bit_count_r + 1'b1; end else if (send && ce) begin data_r <= value; bit_count_r <= 4'b0000; end // //control register for allow data transfer always @(posedge clk, negedge i_rst_n) if (!i_rst_n) begin ce <= 1'b1; end else if (!send && bit_count_r == 4'b1001) ce <= 1'b1; else ce <= 1'b0; // endmodule
SPIモジュールのタイミングチャート:
モジュールの入力/出力ポートとAHB-Liteバスの接続
「mfp_system」に追加:
`ifdef MFP_LCD_5100 output IO_CE, output SDO, output SCK, output SDC, output SBL, output RST, `endif
`ifdef MFP_LCD_5100 wire [`MFP_LCD_5100_WIDTH - 1:0] IO_LCD_5100; wire [`MFP_SEND_WIDTH - 1:0] IO_SEND; wire [`MFP_CTRL_WIDTH - 1:0] IO_CTRL; `endif
`ifdef MFP_LCD_5100 .IO_LCD_5100 ( IO_LCD_5100 ), .IO_SEND ( IO_SEND ), .IO_CE ( IO_CE ), .IO_CTRL ( IO_CTRL ), `endif
「mfp_ahb_lite_matrix_with_loader」:
`ifdef MFP_LCD_5100 output [`MFP_LCD_5100_WIDTH - 1:0] IO_LCD_5100, input [`MFP_CE_WIDTH - 1:0] IO_CE, output [`MFP_SEND_WIDTH - 1:0] IO_SEND, output [`MFP_CTRL_WIDTH - 1:0] IO_CTRL, `endif
`ifdef MFP_LCD_5100 .IO_LCD_5100 ( IO_LCD_5100 ), .IO_CE ( IO_CE ), .IO_SEND ( IO_SEND ), .IO_CTRL ( IO_CTRL ), `endif
「mfp_ahb_lite_matrix」:
`ifdef MFP_LCD_5100 output [`MFP_LCD_5100_WIDTH - 1:0] IO_LCD_5100, input [`MFP_CE_WIDTH - 1:0] IO_CE, output [`MFP_SEND_WIDTH - 1:0] IO_SEND, output [`MFP_CTRL_WIDTH - 1:0] IO_CTRL, `endif
`ifdef MFP_LCD_5100 .IO_LCD_5100 ( IO_LCD_5100 ), .IO_CE ( IO_CE ), .IO_SEND ( IO_SEND ), .IO_CTRL ( IO_CTRL ), `endif
「mfp_ahb_gpio_slave」に次の行を追加します。
`ifdef MFP_LCD_5100 output reg [`MFP_LCD_5100_WIDTH - 1:0] IO_LCD_5100, input [`MFP_CE_WIDTH - 1:0] IO_CE, output reg [`MFP_SEND_WIDTH - 1:0] IO_SEND, output reg [`MFP_CTRL_WIDTH - 1:0] IO_CTRL, `endif
`ifdef MFP_LCD_5100 IO_LCD_5100 <= `MFP_LCD_5100_WIDTH'b0; IO_CTRL <= `MFP_CTRL_WIDTH'b0; IO_SEND <= `MFP_SEND_WIDTH'b0; `endif
`ifdef MFP_LCD_5100 `MFP_LCD_5100_IONUM : IO_LCD_5100 <= HWDATA [`MFP_LCD_5100_WIDTH - 1:0]; `MFP_CTRL_IONUM : IO_CTRL <= HWDATA [`MFP_CTRL_WIDTH - 1:0]; `MFP_SEND_IONUM : IO_SEND <= HWDATA [`MFP_SEND_WIDTH - 1:0]; `endif
`ifdef MFP_LCD_5100 `MFP_LCD_5100_IONUM: HRDATA <= { { 32 - `MFP_LCD_5100_WIDTH{ 1'b0 } } ,IO_LCD_5100 }; `MFP_CTRL_IONUM: HRDATA <= { { 32 - `MFP_CTRL_WIDTH { 1'b0 } } ,IO_CTRL}; `MFP_SEND_IONUM: HRDATA <= { { 32 - `MFP_SEND_WIDTH { 1'b0 } } ,IO_SEND}; `MFP_CE_IONUM: HRDATA <= { { 32 - `MFP_CE_WIDTH { 1'b0 } } ,IO_CE}; `endif
上部シェルモジュールで、出力ポートをボードに追加します。
`ifdef MFP_LCD_5100 output o_rst, o_ce, o_sdc, o_sdo, o_sck, o_sbl, `endif
`ifdef MFP_LCD_5100 .IO_CE ( o_ce ), .SDO ( o_sdo ), .SCK ( o_sck ), .SDC ( o_sdc ), .SBL ( o_sbl ), .RST ( o_rst ), `endif
接続されたデバイスの信号アドレスを割り当てる
アドレスと定義をファイル「mfp_ahb_lite_matrix_config.vh」に追加します。
`define MFP_LCD_5100
`ifdef MFP_LCD_5100 `define MFP_LCD_5100_WIDTH 9 `define MFP_SEND_WIDTH 1 `define MFP_CE_WIDTH 1 `define MFP_CTRL_WIDTH 3 `endif
`ifdef MFP_LCD_5100 `define MFP_LCD_5100_ADDR 32'h1f800020 `define MFP_SEND_ADDR 32'h1f800024 `define MFP_CE_ADDR 32'h1f800028 `define MFP_CTRL_ADDR 32'h1f80002C `endif
`ifdef MFP_LCD_5100 `define MFP_LCD_5100_IONUM 4'h8 `define MFP_SEND_IONUM 4'h9 `define MFP_CE_IONUM 5'hA `define MFP_CTRL_IONUM 5'hB `endif
物理的なボードの連絡先への制約の追加
ディスプレイの出力をXDCファイルに追加します。
### GPIO Pins 33 - 40 LCD set_property -dict {PACKAGE_PIN W3 IOSTANDARD LVCMOS33} [get_ports o_sbl] set_property -dict {PACKAGE_PIN V2 IOSTANDARD LVCMOS33} [get_ports o_sck] set_property -dict {PACKAGE_PIN W2 IOSTANDARD LVCMOS33} [get_ports o_sdo] set_property -dict {PACKAGE_PIN T2 IOSTANDARD LVCMOS33} [get_ports o_sdc] set_property -dict {PACKAGE_PIN T1 IOSTANDARD LVCMOS33} [get_ports o_ce] set_property -dict {PACKAGE_PIN R2 IOSTANDARD LVCMOS33} [get_ports o_rst]
MIPSプロセッサー用のプログラムの作成
「mfp_memory_mapped_registers.h」内:
#define MFP_LCD_5100_ADDR 0xBF800020 #define MFP_SEND_ADDR 0xBF800024 #define MFP_CE_ADDR 0xBF800028 #define MFP_CTRL_ADDR 0xBF80002C
#define value (* (volatile unsigned *) MFP_LCD_5100_ADDR ) #define ctrl (* (volatile unsigned *) MFP_CTRL_ADDR ) #define send (* (volatile unsigned *) MFP_SEND_ADDR ) #define ce (* (volatile unsigned *) MFP_CE_ADDR )
main.cにプログラムを書きましょう。
main.c
#include "mfp_memory_mapped_registers.h" #include <stdlib.h> void delay(int delay); // void waitTillLCDDone(); // void init(); // void start_image(); // void disp_picture(); // void gotoXY(int x, int y); // void send_byte(int command, int data); // void clear_disp(); // int main () { init (); start_image(); delay(1000); } void init(){ unsigned int lcd_cmd[7] = {0x21, 0x13, 0x04, 0xC0, 0x20, 0x0C, 0x08}; unsigned int i; for (i=0; i<7; i++) { send_byte(0x06, lcd_cmd[i]); } } void start_image (){ unsigned int screen[504] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x07, 0x03, 0x83, 0x81, 0xC1, 0xC1, 0xE1, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xC1, 0xC1, 0xC1, 0x83, 0x83, 0x07, 0x07, 0x0F, 0x1F, 0x1F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x03, 0x01, 0x00, 0x00, 0xE0, 0xF8, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFC, 0xF0, 0xC0, 0x00, 0x00, 0x01, 0x07, 0x3F, 0xF3, 0xC3, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x03, 0x03, 0x03, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xF0, 0xC0, 0x80, 0x00, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x7F, 0x7F, 0x3F, 0x1F, 0x1F, 0x0F, 0x03, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFC, 0xF8, 0xF8, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xE0, 0xE0, 0xE0, 0xE0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF8, 0xF8, 0xFC, 0xFC, 0xFE, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, }; unsigned int i; gotoXY(0, 0); for (i=0; i<504; i++) { send_byte(0x7, screen[i]); } disp_picture(); for (i=0; i < 4; i++){ send_byte(0x06, 0x0D); delay(1000); send_byte(0x06, 0x0C); delay(1000); } } void send_byte(int command, int data){ ctrl = command; value = data; send = 1; send = 0; waitTillLCDDone(); waitTillLCDDone(); } void waitTillLCDDone() { do { } while (!ce); } void disp_picture(){ send_byte(0x06, 0x0C); } void clear_disp(){ send_byte(0x06, 0x08); } void gotoXY(int x, int y) { send_byte(0x6, 0x80 | x); // Column. send_byte(0x6, 0x40 | y); // Row. ? } void delay(int delay) { volatile unsigned int j; delay = delay * 5000; for (j = 0; j < (delay); j++) ; // delay }
0xE0となっ、0xE0となっ、0xE0となっ、0xE0となっ、0xE0となっ、0xC1、0xC1、0xC1、0x83の、0x83の、0x07の、0x07の、0x0Fの、0x1Fの、0x1Fの、から0x7F、0xFFで、0xFFで、0xFFで、0xFFで、0xFFを、 #include "mfp_memory_mapped_registers.h" #include <stdlib.h> void delay(int delay); // void waitTillLCDDone(); // void init(); // void start_image(); // void disp_picture(); // void gotoXY(int x, int y); // void send_byte(int command, int data); // void clear_disp(); // int main () { init (); start_image(); delay(1000); } void init(){ unsigned int lcd_cmd[7] = {0x21, 0x13, 0x04, 0xC0, 0x20, 0x0C, 0x08}; unsigned int i; for (i=0; i<7; i++) { send_byte(0x06, lcd_cmd[i]); } } void start_image (){ unsigned int screen[504] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x07, 0x03, 0x83, 0x81, 0xC1, 0xC1, 0xE1, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xC1, 0xC1, 0xC1, 0x83, 0x83, 0x07, 0x07, 0x0F, 0x1F, 0x1F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x03, 0x01, 0x00, 0x00, 0xE0, 0xF8, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFC, 0xF0, 0xC0, 0x00, 0x00, 0x01, 0x07, 0x3F, 0xF3, 0xC3, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x03, 0x03, 0x03, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xF0, 0xC0, 0x80, 0x00, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x7F, 0x7F, 0x3F, 0x1F, 0x1F, 0x0F, 0x03, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFC, 0xF8, 0xF8, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xE0, 0xE0, 0xE0, 0xE0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF8, 0xF8, 0xFC, 0xFC, 0xFE, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, }; unsigned int i; gotoXY(0, 0); for (i=0; i<504; i++) { send_byte(0x7, screen[i]); } disp_picture(); for (i=0; i < 4; i++){ send_byte(0x06, 0x0D); delay(1000); send_byte(0x06, 0x0C); delay(1000); } } void send_byte(int command, int data){ ctrl = command; value = data; send = 1; send = 0; waitTillLCDDone(); waitTillLCDDone(); } void waitTillLCDDone() { do { } while (!ce); } void disp_picture(){ send_byte(0x06, 0x0C); } void clear_disp(){ send_byte(0x06, 0x08); } void gotoXY(int x, int y) { send_byte(0x6, 0x80 | x); // Column. send_byte(0x6, 0x40 | y); // Row. ? } void delay(int delay) { volatile unsigned int j; delay = delay * 5000; for (j = 0; j < (delay); j++) ; // delay }
、から0x7F、0x7Fの、から0x7F、0x7Fの、から0x7F、0x7Fの、から0x7F、0x7Fの、から0x7F、0x7Fの、から0x7F、0x7Fの、から0x7F、0x7Fの、から0x7F、0x7Fの、から0x7F、0x7Fの、から0x7F、0x7Fの、0x7Fの#include "mfp_memory_mapped_registers.h" #include <stdlib.h> void delay(int delay); // void waitTillLCDDone(); // void init(); // void start_image(); // void disp_picture(); // void gotoXY(int x, int y); // void send_byte(int command, int data); // void clear_disp(); // int main () { init (); start_image(); delay(1000); } void init(){ unsigned int lcd_cmd[7] = {0x21, 0x13, 0x04, 0xC0, 0x20, 0x0C, 0x08}; unsigned int i; for (i=0; i<7; i++) { send_byte(0x06, lcd_cmd[i]); } } void start_image (){ unsigned int screen[504] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x07, 0x03, 0x83, 0x81, 0xC1, 0xC1, 0xE1, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xC1, 0xC1, 0xC1, 0x83, 0x83, 0x07, 0x07, 0x0F, 0x1F, 0x1F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x03, 0x01, 0x00, 0x00, 0xE0, 0xF8, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFC, 0xF0, 0xC0, 0x00, 0x00, 0x01, 0x07, 0x3F, 0xF3, 0xC3, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x03, 0x03, 0x03, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xF0, 0xC0, 0x80, 0x00, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x7F, 0x7F, 0x3F, 0x1F, 0x1F, 0x0F, 0x03, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFC, 0xF8, 0xF8, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xE0, 0xE0, 0xE0, 0xE0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF8, 0xF8, 0xFC, 0xFC, 0xFE, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, }; unsigned int i; gotoXY(0, 0); for (i=0; i<504; i++) { send_byte(0x7, screen[i]); } disp_picture(); for (i=0; i < 4; i++){ send_byte(0x06, 0x0D); delay(1000); send_byte(0x06, 0x0C); delay(1000); } } void send_byte(int command, int data){ ctrl = command; value = data; send = 1; send = 0; waitTillLCDDone(); waitTillLCDDone(); } void waitTillLCDDone() { do { } while (!ce); } void disp_picture(){ send_byte(0x06, 0x0C); } void clear_disp(){ send_byte(0x06, 0x08); } void gotoXY(int x, int y) { send_byte(0x6, 0x80 | x); // Column. send_byte(0x6, 0x40 | y); // Row. ? } void delay(int delay) { volatile unsigned int j; delay = delay * 5000; for (j = 0; j < (delay); j++) ; // delay }
、0x00に、0x00に、0xFFの、0xFFで、0xFFで、0xFFで、0xFFで、0xFFで、0xFFで、0xFFで、0xFFで、0xFFで、0xFFで、0xFFで、0xFFで、0xFFで、0xFFで、0xFFで、0xFFで、0xFFで、0xFFで#include "mfp_memory_mapped_registers.h" #include <stdlib.h> void delay(int delay); // void waitTillLCDDone(); // void init(); // void start_image(); // void disp_picture(); // void gotoXY(int x, int y); // void send_byte(int command, int data); // void clear_disp(); // int main () { init (); start_image(); delay(1000); } void init(){ unsigned int lcd_cmd[7] = {0x21, 0x13, 0x04, 0xC0, 0x20, 0x0C, 0x08}; unsigned int i; for (i=0; i<7; i++) { send_byte(0x06, lcd_cmd[i]); } } void start_image (){ unsigned int screen[504] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x07, 0x03, 0x83, 0x81, 0xC1, 0xC1, 0xE1, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xC1, 0xC1, 0xC1, 0x83, 0x83, 0x07, 0x07, 0x0F, 0x1F, 0x1F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x03, 0x01, 0x00, 0x00, 0xE0, 0xF8, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFC, 0xF0, 0xC0, 0x00, 0x00, 0x01, 0x07, 0x3F, 0xF3, 0xC3, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x03, 0x03, 0x03, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xF0, 0xC0, 0x80, 0x00, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x7F, 0x7F, 0x3F, 0x1F, 0x1F, 0x0F, 0x03, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFC, 0xF8, 0xF8, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xE0, 0xE0, 0xE0, 0xE0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF8, 0xF8, 0xFC, 0xFC, 0xFE, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, }; unsigned int i; gotoXY(0, 0); for (i=0; i<504; i++) { send_byte(0x7, screen[i]); } disp_picture(); for (i=0; i < 4; i++){ send_byte(0x06, 0x0D); delay(1000); send_byte(0x06, 0x0C); delay(1000); } } void send_byte(int command, int data){ ctrl = command; value = data; send = 1; send = 0; waitTillLCDDone(); waitTillLCDDone(); } void waitTillLCDDone() { do { } while (!ce); } void disp_picture(){ send_byte(0x06, 0x0C); } void clear_disp(){ send_byte(0x06, 0x08); } void gotoXY(int x, int y) { send_byte(0x6, 0x80 | x); // Column. send_byte(0x6, 0x40 | y); // Row. ? } void delay(int delay) { volatile unsigned int j; delay = delay * 5000; for (j = 0; j < (delay); j++) ; // delay }
、0xFFで、0xFFで、0xF0が、0xF0が、0xF0が、0xF0が、0xF0が、0xF0が、0xF0が、0xF0が、0xF0が、0xF0が、0xF0が、0xF0が、0xF0が、0xF0が、0xF0が、0xF0が、0xF0が、0xF0が、0xF0が #include "mfp_memory_mapped_registers.h" #include <stdlib.h> void delay(int delay); // void waitTillLCDDone(); // void init(); // void start_image(); // void disp_picture(); // void gotoXY(int x, int y); // void send_byte(int command, int data); // void clear_disp(); // int main () { init (); start_image(); delay(1000); } void init(){ unsigned int lcd_cmd[7] = {0x21, 0x13, 0x04, 0xC0, 0x20, 0x0C, 0x08}; unsigned int i; for (i=0; i<7; i++) { send_byte(0x06, lcd_cmd[i]); } } void start_image (){ unsigned int screen[504] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x07, 0x03, 0x83, 0x81, 0xC1, 0xC1, 0xE1, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xC1, 0xC1, 0xC1, 0x83, 0x83, 0x07, 0x07, 0x0F, 0x1F, 0x1F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x03, 0x01, 0x00, 0x00, 0xE0, 0xF8, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFC, 0xF0, 0xC0, 0x00, 0x00, 0x01, 0x07, 0x3F, 0xF3, 0xC3, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x03, 0x03, 0x03, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xF0, 0xC0, 0x80, 0x00, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x7F, 0x7F, 0x3F, 0x1F, 0x1F, 0x0F, 0x03, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFC, 0xF8, 0xF8, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xE0, 0xE0, 0xE0, 0xE0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF8, 0xF8, 0xFC, 0xFC, 0xFE, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, }; unsigned int i; gotoXY(0, 0); for (i=0; i<504; i++) { send_byte(0x7, screen[i]); } disp_picture(); for (i=0; i < 4; i++){ send_byte(0x06, 0x0D); delay(1000); send_byte(0x06, 0x0C); delay(1000); } } void send_byte(int command, int data){ ctrl = command; value = data; send = 1; send = 0; waitTillLCDDone(); waitTillLCDDone(); } void waitTillLCDDone() { do { } while (!ce); } void disp_picture(){ send_byte(0x06, 0x0C); } void clear_disp(){ send_byte(0x06, 0x08); } void gotoXY(int x, int y) { send_byte(0x6, 0x80 | x); // Column. send_byte(0x6, 0x40 | y); // Row. ? } void delay(int delay) { volatile unsigned int j; delay = delay * 5000; for (j = 0; j < (delay); j++) ; // delay }
簡単なスクリーンセーバーImagination Technologiesをダウンロードして、それからただのファンタジーにしましょう。
私は感謝します:
-cmodA7料金を提供してくれたYuri Panchul YuriPanchul 。
-ユージーンコロトコイ-提供されている周辺機器、およびオープンエレクトロニクス研究所のランパなどの場所を訪問する機会について、電子学部の電子計算装置設計学部の准教授。