本帖最后由 youzizhile 于 2015-9-13 21:04 编辑
R7F0C809的IO数量不多,在连接了串口、两路AD采样之后,刚好留有控制LCD1602的IO口还可以使用。
1 LCD与R7F0C809的接口如下图所示:参照R7F0C809硬件开发手册编制LCD1602驱动程序,首先编写
2 IO端口定义和参数设置:PMC0 &=0x7F;//PMC07=0;/* Sets P07 as digital port */
PMC1 =0x83;//PMC10=1,AN11,PMC11=1,AN12,PMC12,13,14
POM0 &=0x00; /* Sets P00~P07 as noramal mode*/
POM1 &=0x00; /* Sets P12~P15 as noramal mode, P10(AN11)p11(AN12)*/
P0 =0x00; /* p00-p07*/
P1 &=0xc3; /* p12-p15*/
PM0 &=0x00; /* Sets P00~P07 as output mode */
PM1 &=0x83; /* Sets P12~P15 as output mode */
3 对LCD1602控制信号宏定义:define Clr_LCD_BK P1&=0xdf//p15 lcd bakclight
#define Set_LCD_BK P1|=0x20
#define Clr_LCD_RS P1&=0xef//p14
#define Set_LCD_RS P1|=0x10
#define Clr_LCD_RW P1&=0xf7//p13
#define Set_LCD_RW P1|=0x08
#define Clr_LCD_E P1&=0xfb//p12
#define Set_LCD_E P1|=0x04
//D7
#define Set_LCD_DB_7 P0|=0x80
#define Clr_LCD_DB_7 P0&=0x7f
//D6
#define Set_LCD_DB_6 P0|=0x40
#define Clr_LCD_DB_6 P0&=0xbf
//D5
#define Set_LCD_DB_5 P0|=0x20
#define Clr_LCD_DB_5 P0&=0xdf
//D4
#define Set_LCD_DB_4 P0|=0x10
#define Clr_LCD_DB_4 P0&=0xef
//D3
#define Set_LCD_DB_3 P0|=0x08
#define Clr_LCD_DB_3 P0&=0xf7
//D2
#define Set_LCD_DB_2 P0|=0x04
#define Clr_LCD_DB_2 P0&=0xfb
//D1
#define Set_LCD_DB_1 P0|=0x02
#define Clr_LCD_DB_1 P0&=0xfd
//D0
#define Set_LCD_DB_0 P0|=0x01
#define Clr_LCD_DB_0 P0&=0xfe
4 LCD1602相关函数void LCD_init(void); //initial
void LCD_write_command(unsigned charcommand); //写命令
void LCD_write_data(unsigned chardat); //写数据
void LCD_disp_char(unsigned charx,unsigned chary,unsigned chardat);//显示单个字符数据
void LCD_disp_str(unsigned charx,unsigned chary,unsigned char *str);//显示字符串
void delay_n10us(unsigned charn); //延时10us
void delay(unsigned long n); //延时
void lcd_test(void);//lcd 测试
5 LCD1602初始化void LCD_init(void)
{
Clr_LCD_BK;
P0=0;
Clr_LCD_RS;
Clr_LCD_RW;
Clr_LCD_E;
delay_n10us(DELAYTIME);
LCD_write_command(0x38);
delay_n10us(DELAYTIME);
LCD_write_command(0x0c);
delay_n10us(DELAYTIME);
LCD_write_command(0x06);
delay_n10us(DELAYTIME);
LCD_write_command(0x01);
delay_n10us(100);
}
6 void lcd_test(){
LCD_init();
LCD_write_cmd(0x01);
LCD_disp_char(0,1,1+'0');//
LCD_disp_char(15,1,1+'0');//
delay(1000000);//
LCD_write_command(0x01);//
delay(5000);//
LCD_disp_str(0,1,"happyyouzizhile");//
delay(5000);//
LCD_disp_str(0,2,"201509113");//
delay(5000);//
}
7显示效果
我的其他帖子: