⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.c

📁 h8/3649f的lcd驱动显示
💻 C
字号:
/***********************************************************************/
/*                                                                     */
/*  FILE        :lcd.c                                                 */
/*  DATE        :Fri, Dec 14, 2007                                     */
/*  DESCRIPTION :Main Program                                          */
/*  CPU TYPE    :H8/3694F                                              */
/*                                                                     */
/*  This file is generated by Renesas Project Generator (Ver.4.9).     */
/*                                                                     */
/***********************************************************************/
                  
#ifdef __cplusplus
extern "C" {
#endif
void abort(void);
#ifdef __cplusplus
}
#endif

struct BIT{
	unsigned char B7:1;	
	unsigned char B6:1;	
	unsigned char B5:1;	
	unsigned char B4:1;	
	unsigned char B3:1;	
	unsigned char B2:1;	
	unsigned char B1:1;	
	unsigned char B0:1;	
};

#define PCR1  (*(struct BIT *)0xffe4)
#define PCR10 PCR1.B0
#define PCR11 PCR1.B1
#define PCR12 PCR1.B2
#define PDR1  (*(struct BIT *)0xffd4)
#define LCD_RS PDR1.B0
#define LCD_RW PDR1.B1
#define LCD_E  PDR1.B2
#define PCR5 *(volatile unsigned char *)0xffe8
#define PDR5 *(volatile unsigned char *)0xffd8
#define LCD_DB PDR5

#define INPUT_BYTE 0x00
#define INPUT_BIT  0
#define OUTPUT_BYTE 0xff
#define OUTPUT_BIT  1

#define LCD_CMD   0
#define LCD_DAT   1
#define LCD_WRITE 0
#define LCD_READ  1

#define LCD_CLAR  0x01
#define LCD_HOME  0x02
#define LCD_ENTSET 0x06

#define LCD_DISP_OFF   0x08
#define LCD_DISP_NCUR  0x0c
#define LCD_DISP_CUR   0x0e
#define LCD_DISP_BNK   0x0d
#define LCD_DISP_ALL   0x0f
#define LCD_INIT8B     0x30
#define LCD_FCSET8B    0x38
#define LCD_INIT4B     0x20
#define LCD_FCSET4B    0x28

#define loop_const  3500

void wait(unsigned int wait_time){
	unsigned int loop1;
	unsigned int loop2;
	for(loop1=0;loop1<wait_time;loop1++){
		for(loop2=0;loop2<loop_const;loop2++);
	}
}

void write_lcd_data(unsigned char data, unsigned char rs){
	wait(500);
	PCR5 = OUTPUT_BYTE;
	LCD_RS=rs;
	LCD_RW=LCD_WRITE;
	LCD_E=1;
	LCD_DB=data;
	LCD_E=0;
}

void init_lcd(void){
	PCR10 = OUTPUT_BIT;
	PCR11 = OUTPUT_BIT;
	PCR12 = OUTPUT_BIT;
	PCR5  = OUTPUT_BYTE;
	
	LCD_RS = LCD_CMD;
	LCD_RW = LCD_WRITE;
	LCD_E = 0;
	
	wait(15);
	LCD_E=1;
	LCD_DB=LCD_INIT8B;
	LCD_E=0;
	
	wait(5);
	LCD_E=1;
	LCD_DB=LCD_INIT8B;
	LCD_E=0;
	
	wait(1);
	LCD_E=1;
	LCD_DB=LCD_INIT8B;
	LCD_E=0;
	
	wait(1);
	LCD_E=1;
	LCD_DB=LCD_INIT8B;
	LCD_E=0;
	
	write_lcd_data(LCD_FCSET8B, LCD_CMD);
	write_lcd_data(LCD_DISP_OFF, LCD_CMD);
	write_lcd_data(LCD_CLAR, LCD_CMD);
	write_lcd_data(LCD_ENTSET, LCD_CMD);
	write_lcd_data(LCD_DISP_CUR, LCD_CMD);
}

void lcd_puts(char *str){
	while(*str){
		write_lcd_data(*str, LCD_DAT);
		str++;
	}
}

void lcd_xy(unsigned char x, unsigned char y){
	unsigned char adr;
	adr=((x-1)+(y-1)*0x40) | 0x80;
	write_lcd_data(adr,LCD_CMD);
}
void main(void)
{
	init_lcd();
	lcd_puts("hello");
	lcd_xy(1,2);
	lcd_puts("12345");
	while(1);
}

void abort(void)
{

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -