1.LCDディスプレイ表示
キャラクタLCDディスプレイ(SC1602)表示 |
キャラクタLCDディスプレイの表示にはPSoc Creatorで提供されるサンプルコードを利用します。
サンプルコード選択 |
〇プロジェクト新規作成
・プロジェクトテンプレート選択で「Code example」を選択。
・サンプルコード(code example)選択で「Char_LCD_Horizontal_Bar_Graph」を選択。
Bootladableコンポーネント追加 |
・Bootladableコンポーネントを追加(トラ技 Lチカプロジェクト(LEDBLINK) 参考)
〇このサンプルプロジェクトをビルド後PSoc基板に書き込む。
※書き込み後 サンプルプログラムが動き出す。
〇このプロジェクトのデモ表示部を削除して、LDC表示のみを残しベースプロジェクトとします。
2.GPIO割り込みの実装
操作SW用 Digital Input Pin コンポーネント追加 |
〇Digital Input Pinコンポーネントの追加
・Number Of Pinsを3に
・Interruptの設定
〇main.cの編集
・CY_ISR_PROTOマクロを使用してGPIO割り込み関数を宣言
CY_ISR_PROTO(GPIO_ISR);
・CY_ISRマクロを使用してGPIO割り込み関数を定義
CY_ISR(GPIO_ISR)
{
uint8 InterruptState = SW_ClearInterrupt();
・・・・・・・・
※InterruptStateにPinのIDが格納
・main()に初期処理を追加
isr_1_StartEx(GPIO_ISR); ・・・・GPIO割り込み関数を登録
CyGlobalIntEnable; ・・・・・割り込みを許可
3.74HC595のテスト
今回は、74HC595(シリアル/パラレル変換)のテストを行った。
74HC595テスト構成 |
・操作スイッチSW1~3でLEDの点灯パターンを切り替え。
・PSoc4100S ==> 74HC595 はシリアル。
・74HC126は今回のテストでは不要
(ほぼ無意味)
・PSoc4100S<==>LCDキャラクタLCDディスプレイの接続はP0をP2に変更
74HC595テスト |
※※※※※main.c※※※※※※
#include
#include
/* The LCD format in characters */
#define LCD_ROWS (2u)
#define LCD_COLUMNS (16u)
/* The delay between displaying bar graphs */
#define BARGRAPH_DELAY_MS (15u)
CY_ISR_PROTO(GPIO_ISR);
int iPtn = 0;
void fnc_595(int ic){
int i;
int j;
int k;
k = 128;
j = ic;
RCK_Write(0);
for(i=0;i<8 i="" p=""> if( k & j){
SI_Write(1);
} else {
SI_Write(0);
}
SCK_Write(1);
CyDelay(10u);
SCK_Write(0);
k = k >> 1;
}
RCK_Write(1);
return;
}
int main()
{
int idat = 1;
/* Start the LCD */
LCD_Start();
/* Show the demo start message */
LCD_Position(0u, 0u);
LCD_PrintString("Test 74HC595");
LCD_Position(1u, 0u);
LCD_PrintString("#####05######");
SI_Write(0);
RCK_Write(0);
SCK_Write(0);
CyDelay(1000u);
isr_1_StartEx(GPIO_ISR);
CyGlobalIntEnable;
for(;;)
{
if(iPtn == 0){
idat++;
}else if(iPtn ==1){
if(idat == 0) idat = 1;
else idat = idat << 1;
}else if(iPtn ==2){
if(idat == 0) idat = 128;
else idat = idat >> 1;
}
idat = idat & 0xFF;
fnc_595(idat);
CyDelay(100u);
}
}
CY_ISR(GPIO_ISR)
{
uint8 InterruptState = SW_ClearInterrupt();
char cbuff[8];
itoa(InterruptState,cbuff,10);
LCD_Position(1u, 0u);
if (InterruptState == 1){
LCD_PrintString("##Key1##");
iPtn =0;
}else if (InterruptState == 2){
LCD_PrintString("##Key2##");
iPtn =1;
}else if (InterruptState == 4){
LCD_PrintString("##Key3##");
iPtn =2;
}else {
LCD_PrintString("##KeyX##");
}
LCD_Position(1u, 9u);
LCD_PrintString(cbuff);
}
※※※※※※※※※※※※※※※※※※
GPIO割り込み時の押されたスイッチの識別は
uint8 InterruptState = SW_ClearInterrupt();
の InterruptState に格納される値で行いました。
Digital Input PinコンポーネントのSWのピンIDで
SW[0]の場合 1
SW[1]の場合 2
SW[2]の場合 4 となるようです。
8>
0 件のコメント:
コメントを投稿