IMGタグを使って画像を貼る実験も兼ねています。
バックライトありです。

バックライトなしです。

バックライトありです。

バックライトなしです。

#define CTRL P9H #define DATA P9L #define RST P9H.5 // 0 reset #define RW P9H.4 // 1 read 0 write #define CS2 P9H.3 // 1 select #define CS1 P9H.2 // 1 select #define E P9H.1 // 立ち下がりでデータ取り込み #define RS P9H.0 // 1 data 0 command #define BUSY P9L.7 // read時busy #define left() {CS2 = 0; CS1 = 1;} #define right() {CS1 = 0; CS2 = 1;} // ビジー待ち void busywait(void) { PM9L = 0xff; // read mode RS = 0; // command RW = 1; // read do { E = 1; E = 0; } while(BUSY) ; PM9 = 0x00; // write mode RW = 0; // write } // コマンドを送る void lcd_cmd(unsigned char c) { busywait(); RS = 0; // command DATA = c; E = 1; E = 0; } // データを送る void lcd_data(unsigned char c) { busywait(); RS = 1; // data DATA = c; E = 1; E = 0; } // 座標移動 void lcd_move(unsigned char x, unsigned char y) { lcd_cmd(0x40 | (x & 0x3f)); // 横 lcd_cmd(0xb8 | (y & 7)); // 縦 } // LCDクリア void lcd_clear(void) { unsigned char x, y; for(y = 0; y < 8; y++){ lcd_move(0, y); for(x = 0; x < 64; x++) lcd_data(0x00); } } // LCD初期化 void lcd_init(void) { CTRL = 0x20; // RST=1, RW=0, CS2=0, CS1=0, E=0, RS=0 RST = 0; RST = 1; left(); lcd_cmd(0xc0); // start line lcd_clear(); lcd_cmd(0x3e | 1); // display on right(); lcd_cmd(0xc0); // start line lcd_clear(); lcd_cmd(0x3e | 1); // display on } void main(void) { int x, y, p; lcd_init(); // 128x64画像の表示 p = 0; for(y = 0; y < 8; y++){ left(); lcd_move(0, y); for(x = 0; x < 64; x++) lcd_data(pic[p++]); right(); lcd_move(0, y); for(x = 0; x < 64; x++) lcd_data(pic[p++]); } while(1) ; }
P50/RTP00 CON2 10pin P51/RTP01 CON2 12pin P52/RTP02 CON3 4pin P53/RTP03 CON3 5pin P54/RTP04 CON3 2pin P55/RTP05 CON3 3pin
unsigned char val = 0x15; void main( void ) { RTO0_Output(val); // 出力予定の初期値 RTO0_Enable(); // リアルタイム出力許可 TMP4_Start(); // タイマー4開始 while(1) __halt(); // 無限ループ }
__interrupt void MD_INTTP4CC0( void ) { extern unsigned char val; val ^= 0x3f; // 反転 RTO0_Output(val); // 次に出す予定の値を設定 }
変換時間 3.25us 23.3us -------------------------- 平均値 333.748 334.642 標準偏差 2.557 2.479 最小 320 319 最大 348 348
0度 1.65V 0度~ 90度 増加 90度 2.31V (1.65V + 0.66V) 90度~180度 減少 180度 1.65V 180度~270度 減少 270度 0.99V (1.65V - 0.66V) 270度~360度 増加 360度 1.65V
#define MAX_VOLT 3250 // 実測3.25V volatile short rdy; void main( void ) { unsigned short val[3]; // A/D変換結果 int i, v; lcd_init(); // LCD初期化 while(1){ // A/D変換 rdy = 0; AD_Start(); // 変換開始 while(!rdy) ; // 変換完了まで待つ AD_Read(val); // 変換結果を読む // 結果表示 for(i = 0; i < 3; i++){ lcd_puthexs(val[i]); // 変換結果の16進出力 lcd_putc(' '); } lcd_puts(" "); for(i = 0; i < 3; i++){ v = (MAX_VOLT * (int)val[i]) >> 10; // mVに変換 lcd_putdec4(v); // mV値の10進出力 lcd_putc(' '); } lcd_puts(" "); } }
__interrupt void MD_INTAD( void ) { extern volatile int rdy; rdy = 1; // 変換終了 }
#define MAX_VOLT 3250 // 実測3.25V volatile int rdy; // 変換完了フラグ void main( void ) { unsigned short val; int v; lcd_init(); // LCD初期化 while(1){ rdy = 0; AD_Start(); // 変換開始 while(!rdy) ; // 変換完了まで待つ AD_Read(&val); // 変換結果を読む v = (MAX_VOLT * (int)val) >> 10; // mVに変換 lcd_puthex4(val); // 変換結果の16進出力 lcd_putc(' '); lcd_putdec(v); // mV値の10進出力 lcd_puts("mV "); ms_wait(100); // 100m秒待つ } }
void CALL_UART2_Receive( void ) { extern UCHAR *UART2_RX_ADDRESS; extern USHORT UART2_RX_CNT; if(UART2_RX_ADDRESS == q + QSIZE) UART2_RX_ADDRESS = q; // ラウンドアップ UART2_RX_CNT = 0; // 受信しなかったことにする。 q_ctr++; }
int q_putp = 0; __interrupt void MD_INTUA2R( void ) { unsigned char err = UA2STR; unsigned char c = UA2RX; if((err & 0x07) != 0 || q_ctr == QSIZE){ PCT.6 = 0; // LED点灯 } else { q[q_putp] = c; // キューに書き込む q_putp = (q_putp + 1) & QMASK; // ポインタを進める q_ctr++; // キューの中身が1つ増えた } }
void main(void) { unsigned char c; lcd_init(); // LCD初期化 while(1){ if(!empty()){ // キューが空でないときは c = q_get(); // キューから取り出す UART2_SendData(&c, 1); // エコーバック lcd_putc(c); // LCDに1文字出力 } } }
unsigned char q_get() { unsigned char c; if(q_ctr == 0){ // アンダーフロー PCT.6 = 0; // LED点灯 c = 0; } else { c = q[q_getp]; // 1文字取り出す q_getp = (q_getp + 1) & QMASK; // ポインターを進める q_ctr--; // キューの中身が1つ減った } return c; }
void CALL_UART2_Receive( void ) { extern volatile int rxrdy; rxrdy = 1; }
volatile int rxrdy; // 1のとき受信完了 void main( void ) { unsigned char rbuf, wbuf; // 通信用バッファ while(1){ rxrdy = 0; UART2_ReceiveData(&rbuf, 1); // 受信 while(!rxrdy) ; // 受信完了待ち wbuf = rbuf; // UART2_SendData(&wbuf, 1); // 送信 PCT.6 ^= 1; // LED反転 } }
_adpcm32k = audio_adpcm[0].address; audiosize = audio_adpcm[0].size; vDec32k();
PM5 = 0b11110011; // P5.3,P5.2は出力 PMC5 = 0b00110000; // P5.5,P5.4は機能モード CB2CTL1 = 0x02; // mode 0 2.5MHz CB2CTL2 = 0; // 8bit CB2CTL0 = 0xc0; // MSB first
void spi_send(unsigned char d) { CB2TX = d; while(CB2TSF) ; }