/***********IOT 3.2.1yori*******************************
* I2C接続のセンサとLCDを使う mccだけでOK すばらしい
* 温湿度、気圧の表示
*****************************************/
#include "mcc_generated_files/mcc.h"
#include "mcc_generated_files/examples/i2c1_master_example.h"
//#include "mcc_generated_files/weather.h"
// 変数定義
uint8_t Flag;
double temp, humi, pres;
char Line1[17], Line2[17]; // aqm1602は16x2 17は多すぎ
char Line1[]="0123456789012345";
char Line2[]="0000000000000000";
// 液晶表示器 コントラスト用定数
//#define CONTRAST 0x18 // for 5.0V
#define CONTRAST 0x25 // for 3.3V bme280併用時はこれで
// 関数プロト
void lcd_data(char data);
void lcd_cmd(char cmd);
void lcd_init(void);
void lcd_str(char * ptr);
/***** タイマ0割り込み処理関数******/
void TMR0_Process(void){
Flag = 1;
}
/***** メイン関数 ******/
void main(void)
{
SYSTEM_Initialize(); // システム初期化
TMR0_SetInterruptHandler(TMR0_Process);
INTERRUPT_GlobalInterruptEnable();
INTERRUPT_PeripheralInterruptEnable();
lcd_init(); // LCD初期化
/****** メインループ ************/
while (1)
{
if(Flag == 1){
Flag = 0;
/** センサデータ読み出し **/
//Weather_readSensors();
//temp = Weather_getTemperatureDegC();
// humi = Weather_getHumidityRH();
//pres = Weather_getPressureKPa() * 10;
// 表示データ編集
// sprintf(Line1, "T=%2.1fC H=%2.1f%%", temp, humi);
// sprintf(Line2, "P=%4.1f hPa", pres);
// LCD表示
lcd_cmd(0x80); // 1行目
lcd_str(Line1);
lcd_cmd(0xC0); // 2行目
lcd_str(Line2);
}
}
}
/****** 液晶表示器ライブラリ ***************/
/******************************
* 液晶へ1文字表示データ出力
*******************************/
void lcd_data(char data){
I2C1_Write1ByteRegister(0x3E, 0x40, data);
__delay_us(30); // 処理待ち遅延
}
/*******************************
* 液晶へ1コマンド出力
*******************************/
void lcd_cmd(char cmd){
I2C1_Write1ByteRegister(0x3E, 0x00, cmd);
/* ClearかHomeのとき長遅延 */
if((cmd == 0x01)||(cmd == 0x02))
__delay_ms(2); // 2msec待ち
else
__delay_us(30); // 30μsec待ち
}
/*****************************
* 液晶表示器 文字列表示関数
*****************************/
void lcd_str(char * ptr){
while(*ptr != 0) // 文字列最後まで
lcd_data(*ptr++); // 文字表示実行
}
/*******************************
* 液晶表示器 初期化関数
*******************************/
void lcd_init(void){
__delay_ms(150); // ハード初期化待ち
lcd_cmd(0x38); // 8bit 2line Normal mode
lcd_cmd(0x39); // 8bit 2line Extend mode
lcd_cmd(0x14); // OSC 183Hz BIAS 1/5
/* コントラスト設定 */
lcd_cmd(0x70 + (CONTRAST & 0x0F));
lcd_cmd(0x5C + (CONTRAST >> 4));
// lcd_cmd(0x6B); // Follower for 5.0V
lcd_cmd(0x6B); // Follwer for 3.3V
__delay_ms(300);
lcd_cmd(0x38); // Set Normal mode
lcd_cmd(0x0C); // Display On
lcd_cmd(0x01); // Clear Display
}
0 件のコメント:
コメントを投稿