LCDモニター
概要
RS232C(±12V)経由でデータを受信しLCDに表示します。
TTLレベルでも可能ですので、PICと直接接続することが出来ます。
以下の制御コードを受け付けます。
- %:ブザーを100msec間だけ鳴らせる。
- &:画面をオールクリアする。
- <:1行目にカーソルを移動させる。
- >:2行目にカーソルを移動させる。
回路図
ソースコード
- LcdMonitor2.c
//********************************************************************** /* ; 2006.12.31 JF3SFB ; ; 【液晶表示器(LCD モジュールSC1602BS*B)を利用した簡易モニタ】 ; ; RS232C(9600bps)からデータを受信し表示する。 ; パソコンとの接続やPIC同士の直結(TTLレベル)が可能です。 ; ; ■制御コード ; %:ブザーを100msec間だけ鳴らせる。 ; &:画面をオールクリアする。 ; <:1行目にカーソルを移動させる。 ; >:2行目にカーソルを移動させる。 ; ; ■履歴 ; R1.00 2006.09.22 ASM ; R2.00 2006.12.31 MikroC ; */ //********************************************************************** void interrupt() { if (INTCON.T0IF == 1) { INTCON.T0IF = 0; } if (PIR1.TMR1IF == 1) { PORTB.F3 = ~PORTB.F3; PIR1.TMR1IF = 0; } } //********************************************************************** void Pwm_Change_DutyEx(unsigned int duty_ratio) { CCPR1L = duty_ratio >> 2; CCP1CON.F6 = duty_ratio & 0b00000001; CCP1CON.F7 = (duty_ratio & 0b00000010) >> 1; } //********************************************************************** void Usart_Write_String(char *buf) { static int len, i; len = strlen(buf); for (i = 0; i < len; i++) { Usart_Write(buf[i]); } } //********************************************************************** void main() { static unsigned int cnt; static unsigned short rd; // OSCCON = 0b01110000; // クロックは8Mhz CMCON = 0b00000111; // コンパレータは使用しない。 ANSEL = 0b00000000; // A/D変換は使用しない。 TRISA = 0b01111100; TRISB = 0b00000100; OPTION_REG = 0b10000111; PIE1.TMR1IE = 1; PIR1.TMR1IF = 0; T1CON = 0b00110001; INTCON = 0b01100000; // Pwm_Init(3000); // 3Khz Pwm_Change_DutyEx(1024 / 2); // Lcd_Custom_Config(&PORTB, 4, 6, 7, 1, &PORTA, 1, 0, 7); TRISA = 0b01111100; Lcd_Custom_Cmd(LCD_CURSOR_OFF); for (cnt = 0; cnt < 5; cnt++) { Lcd_Custom_Out(1, 1, "LcdMonit"); Lcd_Custom_Out(2, 1, "or R2.0"); Pwm_Start(); Delay_ms(300); Pwm_Stop(); Lcd_Custom_Cmd(LCD_CLEAR); Delay_ms(300); } // Usart_Init(9600); // INTCON.GIE = 1; // これ以降の処理で割り込みを許可する。 // Pwm_Start(); Delay_ms(300); Pwm_Stop(); // while (1) { if (Usart_Data_Ready() == 0) continue; rd = Usart_Read(); switch(rd) { case '%': Pwm_Start(); Delay_ms(300); Pwm_Stop(); break; case '&': Lcd_Custom_Cmd(LCD_CLEAR); break; case '<': Lcd_Custom_Cmd(LCD_FIRST_ROW); break; case '>': Lcd_Custom_Cmd(LCD_SECOND_ROW); break; case '?': Lcd_Custom_Out(1, 1, "LcdMonit"); Lcd_Custom_Out(2, 1, "or R2.0"); break; default: Lcd_Custom_Chr_Cp(rd); break; } } } //**********************************************************************




