====== LCDモニター ======
===== 概要 =====
RS232C(±12V)経由でデータを受信しLCDに表示します。
TTLレベルでも可能ですので、PICと直接接続することが出来ます。
以下の制御コードを受け付けます。
* %:ブザーを100msec間だけ鳴らせる。
* &:画面をオールクリアする。
* <:1行目にカーソルを移動させる。
* >:2行目にカーソルを移動させる。
{{:imgpaste:202004:htmikan-20200429-154433.png?500}}
{{:imgpaste:202004:htmikan-20200429-154444.png?500}}
{{:imgpaste:202004:htmikan-20200429-154454.png?500}}
===== 回路図 =====
{{:imgpaste:202004:htmikan-20200429-154509.png}}
===== ソースコード =====
//**********************************************************************
/*
; 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;
}
}
}
//**********************************************************************
===== 動作確認 =====
PCのハイパータミナルよりデータを入力し動作確認をしました。
{{:imgpaste:202004:htmikan-20200429-154615.png?500}}
このページは稲崎様の閉鎖したHPのコピーで、著作権は稲崎様にあります。[[elechobby:picdic:picdic|詳細]]
This page is a copy of Mr. Inasaki's closed website, and the copyright is held by him.[[elechobby:picdic:picdic|Details]]