Hobby Lab 趣味のモノ作り実験のサイトです。
部品 センサー他 LCD_MAR3953 最初に
1 LCD(MAR3953)を使う
 1.1 LCD(MAR3953)概要
 1.1.1 概要
 1.1.2 モジュールと内部端子
 1.1.3 交流特性
 1.1.4 CH32V203C8T6との接続
 1.2 LCD(MAR3953)コマンド
 1.3 プログラム概容
 1.3.1 事前準備 UARTの変更
 1.3.2 初期化
 1.3.3 LCDの基本アクセス方法
 1.3.4 モジュールの書込信号
 1.3.5 モジュールの読込信号
 1.3.6 描画範囲指定
 1.3.7 ドットを描く
 1.3.8 矩形を塗りつぶす
 1.3.9 直線を描く
 1.3.10 円を描く
 1.3.11 信号線描画
2 プログラム

Pr:Sensor_AD_時計等
PrS:電圧、電流
ADS1115 16bit4CH I2C A/D
 Hardware
 RaspberryPi_コマンド接続
 RaspberryPi_Python
 Arduino
 CH23V203 MounRiverStudioⅡ
INA226 I2C 直流電圧電流
 Hardware
 Arduino
 RaspberryPi_Python
WCS 電流ホール素子
 Hardware
PrS:温度、気圧、湿度、照度
BNE280 I2C 気圧,湿度,気温
 Hardware
 Arduino
 RaspberryPi_Python
BH1750 I2C 照度
 Hardware
 Arduino
 RaspberryPi_Python
DS18B20 1-Wire 温度計
 Hardware
 Arduino
 RaspberryPi_Python
PrS:時間、日時
DS3231 I2C 時計
 Hardware
 Arduino
 RaspberryPi_Python
PrS:表示器
MAR3953 320X480 3.95"
 概要と線や点を描く
SSD1306 I2C 0.96"OLED
 Hardware
 Arduino
 RaspberryPi_Python
Pr:Prプロセッサ関係
PrP:プロセッサ
動作比較
 STM32F動作比較
 CH32V203&STM32F 動作比較
 arduino動作比較
raspberrypi関係
 RaspberryPiハード
CH32V関係
 -CH32V開始
 -203K8T6(32Pin)開始
 -203C8T6(48P)開始
 -003J4M6(8Pin)開始
 -003F4P6(20Pin)開始
 -Moun River StudioⅡ
 プログラミング!
  203_GPIO関係
  203_TIME関係
  203_TIME Encoder
  203_I2C関係
  203_1-Wire関係
  003_DS18B20テスター
  USART(UART)関係
  DS18B20をModBus制御
 -マニュアル
 203データシート
 203取説
  MBA メモリとバス方式
  PWR 電力制御
  RCC リセット・拡張・クロック
  BKP バックアップレジスタ
  CRC 巡回冗長検査
  RTC リアルタイムクロック
  GPIO GPIOと代替機能
  DMA ダイレクトメモリアクセス制御
  ADTM 高度な制御タイマー
  GPTM 汎用タイマー
  BCTM 基本タイマー
  USART 同期非同期通信
arduino関係
 ESP12関係
 (a)ESP-8266D1mini注意
PrP:その他  RS485ドライバー
 CP2102 BRIDGE
 WCH-LinkEエミュレーター
Pr:Resistance 抵抗
Pr:Capacitor コンデンサ
Pr:Coil コイル
Pr:PassiveElmt 受動素子
Pr:Diode ダイオード関係
Pr:OPAMP オペアンプ  LM324
 LM358
Pr:Tr トランジスタ関係
2SC1815
 リレードライバー設計
 アンプ設計
 発振器
TLP152
 TLP152テスト
TLP2361
 TLP2361テスト
TLP5754
 TLP5754テスト
Pr:Source 電源関係  ツェナーダイオード
 TL431
 LM317
PrS:Downモジュール
 EGS002_IR2110S
 SKU011012
 ACDC02
 XH_M299
 LM2596
 Mini360_MP23070N
 DROK
 WH140
PrS:UPモジュール
 MT3608
PrS:充電モジュール
 TP4056
Pr:Old Processor他
Ot:Others その他
Pr:Wire 電線関係

1 LCD(MAR3953)を使う

 1.1 LCD(MAR3953)

 1.1.1 概要

今回使用のLCD MA3953 (上段表面、下段裏面)
この表示器(MAR3953)はドライバーにST7796Sを使用した 3.95インチのArduinoModuleです。
この表示器を使用し、受信機を作成したいと思いました。
いつ、どこから、いくらで購入したかは不明です。
今回も Arduino で言う ライブラリーは使用せずに MounRiver Studio Ⅱ でMCUはCH32V203C8T6を使用してプログラムを作成します。

MAR3953 表示部の仕様は
画面大きさ(inch)3.95
DriverST7796S
Doto320X480
発色RGB 65K(16bit)
データBUS16又は8bitパラレル
※8bitは、 のR4に短絡片を取り付ける。
付属品タッチパネル、SDメモリ
付属品I/OSPI
消費電流(mA)180
使用電圧5〜3.3(V)
※3.3Vは の 3端子レギュレータを外す事
本体大きさ(mm)106×62

今回使用するデータBUSは 8bit です。

タッチパネルの仕様は(不明なため予想も含め)
DriverXPT2046
方式4線式抵抗膜
分解能12bit 4096×4096
I/OSPI

 1.1.2 モジュールと内部端子

MAR3954モジュールと Driver ST7796Sとの端子の関係
MAR3954とST7796Sのマニュアルを見ていて端子がどんな関係なのか調べた結果を下表に示す。
MAR3954端子ST7796S端子目的機能
LCD_RSTRESXリセットシステムを初期化します(Lowでリセット)。
LCD_CSCSXチップセレクトこのパネルを選択して通信を有効にします(Lowで有効)。
LCD_RSD/CXレジスタ選択送信データが「コマンド(Low)」か「表示データ(High)」かを指定します。
LCD_WRWRX書き込み信号マイコンからLCDへデータを書き込む際の同期信号です。
LCD_RDRDX読み出し信号LCDからデータを読み出す際の同期信号です。
DB0〜DB7DB0〜DB7データ信号データ信号
ST7796S端子の名前末尾のXは負論理を示しているようだ。

 1.1.3 交流特性(※51P^52P)


 1.1.4 CH32V203C8T6との接続

今回テストするライン関係の表示状況
MAR3953のI/Oは8bitで以下の様にCH32V203C8T6と接続する。
LCDCH32V203C8T6
DB0PA0
DB1PA1
DB2PA2
DB3PA3
DB4PA4
DB5PA5
DB6PA6
DB7PA7
RDPB3
WRPB4
LCDCH32V203C8T6
RSPB5
CSPB8
RSTPB9
TP_IRQPC13(PA15)
TP_CSPC14(PB2)
SD_CSPC15(PA8)
MISOPB14
MOSIPB15
EX_CLKPB13
 

 1.2 コマンド

以下コマンドテーブルは ST7796S Datasheet『9 COMMAND Table List』に記載されています。
 
はよく使用されるコマンド。
各コマンドとデータの詳細は ST7796S Datasheet『9.2 COMMAND Table1』に記載されています。
コマンドデータ
概要R/WByte概要
D7D6D5D4D3D2D1D0
NOP0x00---- --------
Software reset0x01---- --------
Read display ID0x04R4 Dummy
ID17ID16ID15ID14ID13ID12ID11ID10
ID27ID26ID25IF24ID23ID22ID21ID10
ID37ID36ID35ID34ID33ID32ID31ID30
Read Number of the Errors on DSI0x05R2 Dummy
D7D6D5D4D3D2D1D0
Read display status0x09R5Dummy
BSTONMYMXMVMLRGBST25ST24
ST23IFPF2IFPF1IFPF0IDMONPTLONSLOUTNORON
VscrollST14INVONALLONALLOFFDISONTEONGCS2
GCS1GCS0TEMST4ST3ST2ST1ST0
Read display Power0x0AR2Dummy
BSTONIDMONPTLONSLPOUTNORONDISON00
Read display MADCTL0x0BR2Dummy
MYMXMVMLRGBDISDL00
Read display Interface Pixel Format0x0CR2Dummy
R3R2R1R00D2D1D0
Read display image0x0DR2Dummy
VSSON0INVON00GC2GC1GC0
Read display signal0x0ER2Dummy
TEONTEMHSYNVSYNPIXCLKDATEN0DSIER
Read display self-diagnostic result0x0FR2Dummy
D7D600000D0
Sleep in0x10---- --------
Sleep out0x11---- --------
Partial mode on0x12---- --------
Partial mode off0x13---- --------
Display inversion off0x20---- --------
Display inversion in0x21---- --------
Display off0x28---- --------
Display on0x29---- --------
Column address set
書き込み範囲の列(X軸)の開始・終了アドレスを設定します。
0x2AW4XStart add1[7:0]
XStart add2[7:0]
XEend add1[7:0]
XEend add2[7:0]
Row address set
き込み範囲の行(Y軸)の開始・終了アドレスを設定します。
0x2BW4YStart add1[7:0]
YStart add2[7:0]
YEend add1[7:0]
YEend add2[7:0]
Memory write
指定した範囲に対して、実際のピクセルデータを書き込みます。
0x2CWnD7D6D5D4D3D2D1D0
Memory read0x2ER2Dummy
D7D6D5D4D3D2D1D0
Partial sart/end address set0x30W4Partial start add1
Partial start add2
Partial end add1
Partial end add2
Vertical scrolling definition0x33W6 TFA15TFA14TFA13TFA12TFA11TFA10TFA9TFA8
TFA7TFA6TFA5TFA4TFA3TFA2TFA1TFA0
VSA15VSA14VSA13VSA12VSA11VSA10VSA9VSA8
VSA7VSA6VSA5VSA4VSA3VSA2VSA1VSA0
BFA15BFA14BFA13BFA12BFA11BFA10BFA9BFA8
BFA7BFA6BFA5BFA4BFA3BFA2BFA1BFA0
Tearing effect line off0x34------------
Tearing effect line on0x35W1-------TEM
Memory data access contro
画面の回転(向き)や色の並び(RGB/BGR)を指定します。
0x36W1MYMXMVMLRGBMH00
Vertical scrolling start address0x37W2VSP15VSP14VSP13VSP12VSP11VSP10VSP9VSP8
VSP7VSP6VSP5VSP4VSP3VSP2VSP1VSP0
Idle mode off0x38---- --------
Idle mode on0x39---- --------
Interface pixel format
1ピクセルあたりのビット数(16bit RGB565など)を設定します。
0x3AW1R3R2R1R00D2D1D0
Memory write continue0x3CW3D17D16D15D14D13D12D11D10
Dx7Dx6Dx5Dx4Dx3Dx2Dx1Dx0
Dn7Dn6Dn5Dn4Dn3Dn2Dn1Dn0
Memory read continue0x3ER4Dummy
D17D16D15D14D13D12D11D10
Dx7Dx6Dx5Dx4Dx3Dx2Dx1Dx0
Dn7Dn6Dn5Dn4Dn3Dn2Dn1Dn0
Set tear scanline0x44W2N15N14N13N12N11N10N9N8
N7N6N5N4N3N2N1N0
Get scanline0x45R3Dummy
N15N14N13N12N11N10N9N8
N7N6N5N4N3N2N1N0
Write display brightness0x51W1DBV7DBV6DBV5DBV4DBV3DBV2DBV1DBV0
Read display brightness0x52R2Dummy
DBV7DBV6DBV5DBV4DBV3DBV2DBV1DBV0
Write CTRL display0x53W100BCTRL0DDBL00
Read CTRL display0x54R2Dummy
00BCTRL0DDBL00
Write content adaptive brightness control0x55W1CECTRL0CE1CE000C1C0
Read content adaptive brightness control0x56R2Dummy
000000C1C0
Write CABC minimum brightness0x5EW1CMB7CMB6CMB5CMB4CMB3CMB2CMB1CMB0
Read CABC minimum brightness0x5FR2Dummy
CMB7CMB6CMB5CMB4CMB3CMB2CMB1CMB0
Read First Checksum0xAAR2Dummy
FCS7FCS6FCS5FCS4FCS3FCS2FCS1FCS0
Read Continue Checksum0xAFR2Dummy
CCS7CCS6CCS5CCS4CCS3CCS2CCS1CCS0
Read ID10xDAR2Dummy
ID17ID16ID15ID14ID13ID12ID11ID10
Read ID20xDBR2Dummy
ID27ID26ID25ID24ID23ID22ID21ID20
Read ID30xDCR2Dummy
ID37ID36ID35ID34ID33ID32ID31ID30
Interface Mode Control0xB0W1SPI_EN000VSCPHSCPPKPDEP
Frame Rate Control1
(In Normal Mode/Full Colors)
通常モード時のフレームレート(リフレッシュ速度)を調整します。
0xB1W2FRS[3:0]00DIVA[1:0]
000RTNA[4:0]
Frame Rate Control2
(In Idle Mode/8 colors)
0xB2W200000000
000RTNB[4:0]
Frame Rate Control3
(In Partial Mode/Full colors)
0xB3W200000000
000RTNC[4:0]
Display Inversion Control
画面の色の反転方式を設定します。
0xB4W1------DINV[1:0]
Blanking Porch Control0xB5W4VFP[7:0]
VBP[7:0]
00000000
HBP[7:0]
Display Function Control
走査方向やインターフェースの動作を制御します。
0xB6W3BYPASSRCMRM0PTG[1:0]PT[1:0]
0GSSSSMISC[3:0]
00NL[5:0]
Entry Mode Set0xB7W1EPF[1:0]00DSTBGONDTE0
Power Control 10xC0W2AVDD[1:0]AVCL[1:0]0000
VGHS [2:0]0VGLS [2:0]0
Power Control 20xC1W10VRH[6:0]
Power Control 30xC2W11010SOP[1:0]GOP[1:0]
Vcom Control0xC5W100VCMP[5:0]
Vcom Offset Register0xC6W1VMFSEL0VMF_REG [5:0]
NVM Address/Data0xD0W2000PROG_ADDR[4:0]
PROG_DATA[7:0]
NVM Byte Program Control0xD1W3PROGCODE[23:16]
PROGCODE[15:8]
PROGCODE[7:0]
NVM Status Read0xD2R5Dummy
ID2CNT[3:0]ID1CNT[3:0]
VMFCNT[3:0]ID3CNT[3:0]
BUSY-------
--VMF[5:0]
Read ID40xD3R4Dummy
ID41[7:0]
ID42[7:0]
ID41?[7:0]
Positive Gamma Control
階調表現(ガンマ特性)を微調整し、色味を整えます。
0xE0W14V63P[3:0]V0P[3:0]
00V1P[5:0]
00V2P[5:0]
000V4P[4:0]
000V6P[4:0]
00J0P[1:0]V13P[3:0]
0V20P[6:0]
0V36P[2:0]0V27P[2:0]
0V43P[6:0]
00J1P[1:0]V50P[3:0]
000V57P[4:0]
000V59P[4:0]
00V61P[5:0]
00V62P[5:0]
Negative Gamma Control
階調表現(ガンマ特性)を微調整し、色味を整えます。
0xE1W14V63N[3:0]V0N[3:0]
00V1N[5:0]
00V2N[5:0]
000V4P[4:0]
000V6P[4:0]
00J0N[1:0]V13N[3:0]
0V20N[6:0]
0V36N[2:0]0V27N[2:0]
00V43P[5:0]
00J1N[1:0]V50N[3:0]
000V57N[4:0]
000V59N[4:0]
00V61N[5:0]
00V62N[5:0]
Digital Gamma Control10xE2W64RCA00[3:0]BCA00[3:0]
RCA01[3:0]BCA01[3:0]
::
::
RCA62[3:0]BCA62[3:0]
RCA63[3:0]BCA63[3:0]
Digital Gamma Control20xE3W64RFA00[3:0]BFA00[3:0]
RFA01[3:0]BFA01[3:0]
::
::
RFA62[3:0]BFA62[3:0]
RFA63[3:0]BFA63[3:0]
Display Output CTRL Adjust0xE8W801000000
10001010
00000000
00000000
0010S_END[3:0]
00G_START[5:0]
G_EQ0G_END[5:0]
00110011
Command Set Control0xF0W1D[7:0]
SPI Read Control0xFBW1000SPI_RENSPI_CNT[3:0]


 1.3 プログラム概容

今回使用するMCUはCH32V203C8T6だが、systemクロックは内部の96MHzとしている。
後に1.5倍早い144MHzでもテストしてみたい。

 1.3.1 事前準備 UARTの変更

テスト中 printf( )でデータの異常を見ているが、これはUSART1で使用する事になっている。
しかしMCUのピンを振り分けると,UART4しか使用できなくなった。
(後にUSART1が使用できるようになったが)MounRiver Studio Ⅱのファイルをどのように変更したか記載しておく。
(1)debug.cに追記
約210行以下に関係する物が記載されており、UART3の次に書き内容を追記した。

#elif(DEBUG == DEBUG_UART4)
 while(USART_GetFlagStatus(UART4, USART_FLAG_TC) == RESET);
 USART_SendData(UART4, *buf++);

(2)debug.hを変更
約30行近くに記載されている UART1をUART4へ変更する。

/* DEBUG UATR Definition */
#ifndef DEBUG
#define DEBUG DEBUG_UART1
#endif

#define DEBUG DEBUG_UART4

以上でUART4に接続して printf()が使用できるようになった。

 1.3.2 初期化

リセットさせ、カラーフォーマットを16bit [190]、メモリアクセス制御[183]、LCD画面の向きなど設定してディスプレーをON[169]にすることで初期化します。
[ ]はST7796Sデータシート Version V1.0 2014/11 の掲載ページです。

なお初期化方法についてはデータシートにはライブラリを参照するように記載されている。
詳細については『3.95inch_Arduino_Mega2560_8&16BIT_Module_ST7796S_MAR3953_V1.0』の『Demo_STM32』にある『lcd.c』の初期化も参考になると思う。
上記のファイルについては、LCDWIKIにあるので探してほしい

関数名は
void Set_Init (void)
 MCUのI/O初期化とLCDの初期化をしています。

 1.3.3 LCDの基本アクセス方法

LCDの制御と表示は
RD,CS,RST,WR,RSの信号線とDB0〜DB7に値を入れる事により制御、表示している。
先に説明の1.1.3や1.1.4を参照ください。
RD (Read)
読み取り信号
液晶コントローラからデータを読み出す際に使用します。このピンを「Low」にすることで、液晶内のレジスタ値やグラフィックデータがデータバスに出力されます。
CS (Chip Select)
チップセレクト信号
モジュールを有効にするための信号です。このピンを「Low」にすると、モジュールがコマンドやデータを受け付けられる状態になります。
RST (Reset)
リセット信号
モジュールを初期状態に戻すための信号です。電源投入時や動作が不安定になった際に、このピンを一定時間「Low」にすることでハードウェアリセットをかけます。
WR (Write)
書き込み信号
液晶にデータを書き込む際に使用します。このピンが「High」から「Low」に立ち下がる、あるいは「Low」から「High」に立ち上がるタイミングで、データバス上の値が液晶コントローラに取り込まれます。
RS (Register Select)
レジスタ選択信号
送っているデータが「制御コマンド」なのか「表示データ(パラメータ)」なのかを区別します。
一般的に、RS=0 でコマンド、RS=1 でデータとして扱われます。製品によっては D/C (Data/Command) と表記されることもあります。

 1.3.4 モジュールの書込信号

(1)基本シーケンス (※60P)
 ※はSitronix ST7796S Datasheet VersionV1.0のページ
①ホスト(信号を送る側)は、WDX信号が「立ち下がる(ONからOFFになる)」瞬間に、データ(D lines)を準備して流し始めます。
②ディスプレイ(受け取る側)は、WRX信号が「立ち上がる(OFFからONに戻る)」瞬間に、そのデータを読み取ります。
③読み取りが終わると、ホストはデータの送出を終了します。

プログラム例(CH32V203C8T6)
共通

基本シーケンス分

(2)データ送信シーケンス(※61P)
ホスト→ディスプレイに送るものは
 インデックスだけ
 インデックス+1パラメータ
 インデックス+複数のパラメータ(ピクセルデータ)になる。
今回はデータBusが8bitで、カラーが65Kなのでピクセルデータは下記の様になる。
プログラム例(CH32V203C8T6)

 1.3.5 モジュールの読込信号

(1)基本シーケンス (※73P)
①ディスプレイ(信号を送る側)は、RDX信号が「立ち下がる(ONからOFFになる)」瞬間に、データ(D lines)を準備して流し始めます。
②ホスト(受け取る側)は、RDX信号が「立ち上がる(OFFからONに戻る)」瞬間に、そのデータを読み取ります。
③読み取りが終わると、ディスプレイはデータの送出を終了します。


基本シーケンス分
(2)データ送信シーケンス(※73P)
ホスト→ディスプレイに送るものは
 コマンド+1パラメータ
 コマンド+複数のパラメータ(ディスプレイデータ)になる。
今回はデータBusが8bitで、カラーが65Kなのでピクセルデータは下記の様になる。
プログラム例(CH32V203C8T6)

 1.3.6 描画範囲指定

描く範囲を指定する。
関数名
void Lcd_SetAddress (uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2) {
 x1:描画する左上のX軸ポイント
 y1:描画する左上のy軸ポイント
 x2:描画する右下のX軸ポイント
 y2:描画する右下のY軸ポイント

 1.3.7 ドットを描く

色データ(16bit RGB565形式)の送信は MAR3953とのデータバス接続が 8ビットなので上位Byte,下位Byteの2回に分けて送信する。
関数名
void Lcd_DrawPoint (uint16_t x, uint16_t y, uint16_t color)
 x1:描画する左上のX軸ポイント
 y1:描画する左上のy軸ポイント
 colir:描画するカラー16bit値

 1.3.8 矩形を塗りつぶす

Lcd_DrawPoint (x,y,color);を使って塗りつぶせばよいが、GRAMの範囲設定は1ドット毎に出す必要がなく、矩形の場合最初にGRAMの範囲設定をすれば良いので、下記の様な関数を作成した。
関数名
void Lcd_Fill (uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t bColor)
 x1:描画する左上のX軸ポイント
 y1:描画する左上のy軸ポイント
 x2:描画する右下のX軸ポイント
 y2:描画する右下のY軸ポイント
 colir:描画するカラー16bit値

 1.3.9 直線を描く

X軸やY軸上の水平・垂直線を描く場合は矩形の塗りつぶしの様に、GRAMの範囲指定は1回で済む。 ただし斜線の場合は Lcd_DrawPoint (x, y, color);を使用して(都度GRAMの範囲指定もして)点を描き斜線を描いている。
下記関数は内部で水平・垂直線と斜線を区別して処理している。 関数名
void LcdStraightLine (uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color)
 x1:描画する左上のX軸ポイント
 y1:描画する左上のy軸ポイント
 x2:描画する右下のX軸ポイント
 y2:描画する右下のY軸ポイント
 colir:描画するカラー16bit値

 1.3.10 円を描く

円を描くためにミッチェナーのアルゴリズムを使っている。
ラスタディスプレイ(ピクセルで構成された画面)上に円(円周)を高速かつ正確に描画するための手法です。
(1) 特徴とメリット
高速描画(整数演算のみ): 乗算や浮動小数点演算(小数計算)を使用せず、加減算とビットシフト(2倍)だけで描画できるため、計算処理が非常に高速です。
高品質な円 理想的な円の描画式 (X2+Y2 = r2) を基に、ピクセル中心がもっとも真の円に近い位置を選択するため、ギザギザ(エイリアシング)の少ない綺麗な円を描画できます。
計算の簡素化 ブレゼンハムのアルゴリズムよりも、判定式がシンプルに定式化されています。

(2) アルゴリズムの原理
円は対称的な図形であるため、第1象限の45°分( X = 0 から x = y になるまで)だけを計算すれば、他の7つの対称位置は符号を反転させることで描画できます(8分割描画)。
① 初期設定: 始点を( 0 , r )とする。
② 判定式: 次のピクセル(右、または右下)を選択する際、真の円の半径との二乗誤差に基づいた判定式 d を使用します。
③ ループ処理: x を1ずつ増やしながら、判定式 d の符号に応じて y の値を更新(減らすか維持)します。
④ 対称描画: 算出した点( x , y ) を、(x,y).(-x,y),(x,-y),(-x,-y),(y,x),(-y,x),(x,-y),(-x,-y) の8箇所にプロットします。

(3) ブレゼンハムのアルゴリズムとの関係
ミッチェナーのアルゴリズムは、しばしば「ブレゼンハムのアルゴリズム」と同一視、またはそのバリエーションとして扱われます。基本的には、円の描画において整数演算のみを用いる「中点円描画アルゴリズム」の一種に分類されます。

(4) 応用
かつて描画速度が重要だった時代によく利用されていました。現代でも、組み込みシステムや高速描画が求められるライブラリの低レイヤー部分で用いられる手法です。
関数名
void Lcd_DrawCircle (uint16_t x0, uint16_t y0, uint8_t r, uint16_t color)
 x0:描画する中心のX軸ポイント
 y0:描画する中心のy軸ポイント
 r:描画する半径
 colir:描画するカラー16bit値

 1.3.11 信号線描画

受信機を作成する場合に信号強度などを表す線が必要となったので、最初に紹介した線も描くようにしてみた。
入力値は0~127、表示している幅128となっている。
信号強度等はできるだけ早く描く必要があるので、信号値による色は計算せず事前に128個に2種類(Color HiByet,LoByet)の配列に記録した。
これはまだ使用する関数ではなく、テスト用なため、将来引数は変更になる可能性大!
バーの高さは5になっている。
関数名は
void LcdMeter(uint8_t Strength,uint16_t lcy)
 Strength:信号の値
 lcy:描画する左上のy軸ポイント





2 プログラム





































更新日 2026/04/19 11:17  管理者 平林 剛Hirabayashi Takeshi