2025年11月1日土曜日

PIC16F84A - LCD 表示テスト

 かつて初代定番PIC16F84AのマイコンボードにLCDを取付けて、アッセブラによるプログラムでLCD表示テストを行っていました。今回、JH7UBC 畠さんのCプログラムを使いLCD表示を行いました。

 






参考サイト
●PIC16F84A LCD1602の表示テスト
●PIC16F84A/84の勉強と製作


回路図




















PIC 18ピン マイコンボード
秋月電子通商
PIC_18PIN V1.0基板(販売終了)












LCD1602を取付け










PICKit3プログラミングキット
互換器
※MPLAB X IDE 6.20までPICKit3が使用できる









MPLAB X IDE 6.20インストール
●MPLAB ®開発エコシステム ダウンロード アーカイブ









【MPLAB X v6.20】ダウンロード
画面に従ってインストールを行う

New Project











Select Device













Select Compiler














Project Name
Project Name:任意
※Encoding修正【Tools】【Options】【Enbeded 】【 Default Charset】【Shift JIS】















プログラム入力
















main.c ※下記サイトのコードと異なる部分があります。
//http://jh7ubc.web.fc2.com/pic/PIC16F84A/PIC16F84A_LCD1602.html

#include <xc.h>
#include <stdio.h>
#include <stdlib.h>

#define _XTAL_FREQ 10000000
#define EN RA2
#define RS RA3
#define LCD_DATA PORTB
// CONFIG
#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF // Watchdog Timer (WDT disabled)
#pragma config PWRTE = ON // Power-up Timer Enable bit (Power-up Timer is enabled)
#pragma config CP = OFF // Code Protection bit (Code protection disabled)

//STROBE信号
void LCD_STROBE(){
EN = 1;
EN = 0;
}

//4ビットモードでの8ビット分のデータ転送 
void lcd_write(unsigned char c)
{
__delay_us(40);
LCD_DATA = (LCD_DATA & 0x0f) | (c & 0xf0);
LCD_STROBE();
LCD_DATA = (LCD_DATA & 0x0f) | ((c << 4) & 0xf0);
LCD_STROBE();
}

//画面クリア 
void lcd_clear(void)
{
RS = 0;
lcd_write(0x01);
__delay_ms(2);
}

//カーソル位置に文字列を出力 
void lcd_puts(const char *s)
{
RS = 1; // write characters
while(*s)
lcd_write(*s++);
}

// カーソル位置に1文字出力 
void lcd_putch(char c)
{
RS = 1; // write characters
lcd_write( c );
}

/*//printf関数の出力先のスタブ関数を定義する
void putch(unsigned char ch){
lcd_putch(ch);
return;
} */

//カーソル位置の設定 y:行 x:桁
void lcd_locate(unsigned char y,unsigned char x){
RS = 0;
lcd_write(0x80 + (0x40 * y) +x);
}

// LCDの初期化 
void lcd_init(){
RS = 0;
EN = 0;
//RW = 0;
__delay_ms(15); //15ms待つ 
LCD_DATA = 0b00000011; //一旦8bitモード設定(初期化)
LCD_STROBE();
__delay_ms(5); //5ms待つ
LCD_STROBE();
__delay_us(200); //200us待つ
LCD_STROBE();
__delay_us(200); //200us待つ
LCD_DATA = 0b00000010; //4bitモード設定 
LCD_STROBE();

lcd_write(0x28); // 2行表示 7ドットモードに設定
lcd_write(0x0C); // 表示ON,カーソルOFF,カーソル点滅OFF 
lcd_clear();     // 画面クリア 
lcd_write(0x06); //Entry Modeセット 
}

// mainプログラム 
void main(void)
{
TRISA = 0x00; //PORTA 全てOUTPUT
TRISB = 0x00; //PORTB 全てOUTPUT
lcd_init();   //LCD初期化
lcd_locate(0,0); //Cursor Home
lcd_puts("CQ CQ CQ");
lcd_locate(1,0); //Cursor Home
lcd_puts("DE JA7MLC");
while(1)
{

}
}

PICKit3 Power設定


















0 件のコメント:

コメントを投稿

SI4732 - ESP32制御 DSPラジオモジュール 受信

aitendo : SI4732 DSPラジオ モジュールを使用して、ESP32制御DSPラジオをブレッドボードに組立。スケッチはPU2CLR 氏:pu2clr/SI4735 ライブラリーESP32【OLED_ALL_IN_ONE】を選択、AM放送・7MHz SSB CW・FM放...