【转载】贴个1602 液晶的驱动程序

/*======================================= 1602lcd模块驱动程序 ========================================== 说明:1.晶体:11.0592MHz 2.1602驱动:ks0066 ******************************************/ #i nclude #i nclude #define lcm_rs P2_7 //寄存器选择 #define lcm_rw P2_6 //读/写控制 #define lcm_e P2_5 //读/写使能 #define lcm_blk P2_4 //背光led 1.off 0.on #define lcm_data P0 //函数声明 void delay5ms(void); void delay400ms(void); void lcm_write_command(unsigned char wc_lcm,busy_c); /*********************************** //函数名称: void lcm_ini(void) //传递参数: 无 //返 回 值: 无 //函数功能: LCM初始化 //函数说明: ***********************************/ void lcm_ini(void) { lcm_data = 0; lcm_write_command(0x38,0); //16*2显示,5*7点阵,8位数据接口,不检测忙 delay5ms(); lcm_write_command(0x38,0); delay5ms(); lcm_write_command(0x38,0); //三次显示模式, 不检测忙 delay5ms(); lcm_write_command(0x38,1); //16*2显示,5*7点阵,8位数据接口,需要检测忙 lcm_write_command(0x80,1); //关闭显示 lcm_write_command(0x01,1); //clear显示 lcm_write_command(0x06,1); //指针和光标+1,不滚屏 lcm_write_command(0x0c,1); //开显示,不显示光标 } /*********************************** //函数名称: unsigned char lcm_read_status(void) //传递参数: 无 //返 回 值: unsigned char //函数功能: 读lcm状态,等待lcm空闲 //函数说明: DB7=1,忙 ***********************************/ unsigned char lcm_read_status(void) { lcm_data=0xff; lcm_rs=0; lcm_rw=1; lcm_e=0; lcm_e=0; lcm_e=1; while(lcm_data & 0x80); return lcm_data; } /*********************************** //函数名称: void lcm_write_data(unsigned char wd_lcm) //传递参数: unsigned char wd_lcm //返 回 值: 无 //函数功能: lcm写数据 //函数说明: ***********************************/ void lcm_write_data(unsigned char wd_lcm) { lcm_read_status(); //判断lcm忙标志 lcm_data = wd_lcm; lcm_rs = 1; lcm_rw = 0; lcm_e = 0; lcm_e = 0; lcm_e = 1; } /*********************************** //函数名称: void lcm_write_command(unsigned char wc_lcm, busy_c) //传递参数: unsigned char wc_lcm, busy_c //返 回 值: 无 //函数功能: lcm写命令 //函数说明: busy_c=0是,不用检测忙信号 ***********************************/ void lcm_write_command(unsigned char wc_lcm, busy_c) { if (busy_c) lcm_read_status(); lcm_data = wc_lcm; lcm_rs=0; lcm_rw = 0; lcm_e = 0; lcm_e = 0; lcm_e = 1; } /*********************************** //函数名称: void disp_one_char(unsigned char x, unsigned char y,unsigned char disp_data) //传递参数: unsigned char x, unsigned char y,unsigned char disp_data //返 回 值: 无 //函数功能: 指定位置显示一个字符 //函数说明: ***********************************/ void disp_one_char(unsigned char x,unsigned char y,unsigned disp_data) { y = y&0x01; x = x&0x0f; //限制2行,没行15个字 if (y) x =x + 0x40; //算RAM地址 x = x + 0x80; lcm_write_command(x,0); lcm_write_data(disp_data); } /*********************************** //函数名称: void disp_one_char(unsigned char x, unsigned char y,unsigned char *disp_data) //传递参数: unsigned char x, unsigned char y,unsigned char *disp_data //返 回 值: 无 //函数功能: 指定位置显示一串字符 //函数说明: ***********************************/ void disp_list_char(unsigned char x,unsigned char y,unsigned char *disp_data) { unsigned char char_length,j; char_length = strlen(disp_data); y = y&0x1; x = x&0x0f; for (j=0;j发表于 2007-04-28 16:02

评论

尚无评论

发表评论

标题:  
署名:  
链接:
内容:
验证码: