2025年11月10日月曜日

pic16f1827 and aqm0802 without mcc

PIC16F1827 AQM0802A表示テスト

c90にしてlvp on,putch,putstrを改変

 #include <stdio.h>

#include <stdlib.h>

#include <xc.h>


// CONFIG1

#pragma config FOSC = INTOSC

#pragma config WDTE = OFF

#pragma config PWRTE = ON

#pragma config MCLRE = OFF

#pragma config CP = OFF

#pragma config CPD = OFF

#pragma config BOREN = ON

#pragma config CLKOUTEN = OFF

#pragma config IESO = OFF

#pragma config FCMEN = OFF


// CONFIG2

#pragma config WRT = OFF

#pragma config PLLEN = ON

#pragma config STVREN = ON

#pragma config BORV = HI

#pragma config LVP = ON


#define _XTAL_FREQ 32000000

#define LCD_addr 0x7C //3E+0



/* I2C 初期化*/

void I2C_init(){

SSP1CON1 = 0x28; //SSPEN = 1,I2C Master Mode

SSP1STATbits.SMP = 1; //標準速度モード(100KHz)

SSP1ADD = 0x4F; //Fosc/(4*Clock)-1 Clock=100kHz,Fosc=32MHz

}


/* スタートコンディション */

void I2C_start(){

SSP1CON2bits.SEN = 1;

while(SSP1CON2bits.SEN);

}


/* ストップコンディション */

void I2C_stop(){

SSP1IF = 0;

SSP1CON2bits.PEN = 1;

while(SSP1CON2bits.PEN);

SSP1IF = 0;

}


/* I2Cに1byte送信 */

void I2C_write(unsigned char dat){

SSP1IF = 0;

SSP1BUF = dat;

while(!SSP1IF);

}


/* write command */

void LCD_cmd(unsigned char cmd){

I2C_start(); //start condition

I2C_write(LCD_addr); //send slave address

I2C_write(0x00); //send control byte

I2C_write(cmd); //send command

I2C_stop(); //stop condition

}


/* write charactor */

void LCD_char(unsigned char dat){

I2C_start(); //start condition

I2C_write(LCD_addr); //send slave address

I2C_write(0x40); //send control byte

I2C_write(dat); //send data

I2C_stop(); //stop condition

}


/* LCD initialize ?*/

void LCD_init(){

__delay_ms(40); //40ms wait

LCD_cmd(0x38); //8bit,2line

LCD_cmd(0x39); //IS=1 : extention mode set

LCD_cmd(0x14); //Internal OSC Frequency

LCD_cmd(0x70); //Contrast set

LCD_cmd(0x56); //Power/ICON/Contrast Control

LCD_cmd(0x6C); //Follower control

__delay_ms(200);//200ms wait

LCD_cmd(0x38); //IS=0 : extention mode cancel

LCD_cmd(0x0C); //Display ON

LCD_cmd(0x01); //Clear Display

__delay_ms(2); //wait more than 1.08ms

}


/* Clear Display */

void LCD_clear(){

LCD_cmd(0x01);

__delay_ms(1);

__delay_us(80);

}


/* Return Home `*/

void LCD_home(){

LCD_cmd(0x02);

__delay_ms(1);

__delay_us(80);

}


/* Cursor 2line top */

void LCD_2line(){

LCD_cmd(0xC0);

}


/* write 1 charactor to LCD */

//void putch(unsigned char ch){

//LCD_char(ch);

//}


/* write string */

void LCD_str(const unsigned char *s){

while(*s){

LCD_char(*s++);

}

}


void main() {

OSCCON = 0b01110000 ; // 内部クロック8MHz

ANSELA = 0b00000000 ; // AN0-AN4は使用しない

ANSELB = 0b00000000 ; // AN5-AN11は使用しない

TRISA = 0b00000000 ; // RAは全て出力

TRISB = 0b00010010 ; // RB1,RB4は入力、他は出力

PORTA = 0b00000000 ; // PORTA初期化

PORTB = 0b00000000 ; // PORTB初期化


I2C_init();

LCD_init();


LCD_str("JH7UB");

//unsigned char count = 0;


//while(1){

//LCD_2line();

//printf("%3d",count);

//count++;

//__delay_ms(500);

}


}


0 件のコメント:

コメントを投稿