elechobby:picdic:pic16f88:44

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;
		}
	}
}
 
//**********************************************************************

PCのハイパータミナルよりデータを入力し動作確認をしました。

著作権表示 copyright notice

このページは稲崎様の閉鎖したHPのコピーで、著作権は稲崎様にあります。詳細
This page is a copy of Mr. Inasaki's closed website, and the copyright is held by him.Details
  • elechobby/picdic/pic16f88/44.txt
  • 最終更新: 2025/10/17 14:29
  • by 127.0.0.1