LCD160160驱动编写(uc1698u)

LCD160160液晶屏一般在电表远程终端领域应用较多。内置uc1698u为彩色驱动芯片,而LCD160160液晶屏是160*160像素的黑白显示屏,所以写入12bit数据才能控制3个像素。对应彩色屏的话就是RGB三色。

注意:阅读过uc1698u的手册发现,写指令是双字节。刚开始写驱动时也有点懵了。通过初始化LCD之后,配置好初始位置后,就可以写数据去点亮像素了,每写4个bit,控制1个像素。

配置好接口:

//==============================================================================
// 函数功能:LCD数据输入的修改
//==============================================================================
void write(uint8_t flag, uint8_t dat)
{
    cog_cd(flag); // flag=0,write command;flag=1,write data 
    cog_rd(1);
    cog_cs(0);
    cog_dportout(dat);
    cog_wr(0);
    cog_wr(1);
    cog_cs(1);
}

写入指令控制显示位置

//==============================================================================
// 函数功能:设置显示位置
//==============================================================================
void set_lcd_address(uint8_t x,uint8_t y)  //x:横坐标 , y:纵坐标
{
//	  write(0, 0x60); // row address LSB
//    write(0, 0x70); // row address MSB
//    write(0, 0x05); // culomn address LSB
//    write(0, 0x12); // culomn address MSB
	 
	write(0,0x60 + (y&0x0f)); write(0,0x70 + ((y>>4)&0x0f)); //设置y坐标起始位置
	write(0,0x05 + (x&0x0f)); write(0,0x12 + ((x>>4)&0x0f)); //设置x坐标起始位置
}

主要驱动代码

/*==============================================================================
    x:起始x坐标
    y:起始y坐标
	num:有几个字
	type: 1为英文,2为中文
    字模取16*16
==============================================================================*/
void Write_Word(uint8_t x, uint8_t y, uint8_t num, uint8_t type, const uint8_t *p)
{							
	uint8_t i,j,data0,data1;
	for(i=0;i<16;i++)
	{
		set_lcd_address(x,y+i);
		for(j=0;j<type*num;j++)
		{
			data1 = 0;
			data0 = (*(p+i*type*num+j)) & 0x80;
			data1 = data0;
			data0 = (*(p+i*type*num+j)) & 0x40;
			data1 = data1 | (data0>>3);
			write(1,data1);
			
			data1 = 0;
			data0 = (*(p+i*type*num+j)) & 0x20;
			data1 = data0<<2;
			data0 = (*(p+i*type*num+j)) & 0x10;
			data1 = data1 | (data0>>1);
			write(1,data1);
			
			data1 = 0;
			data0 = (*(p+i*type*num+j)) & 0x08;
			data1 = data0<<4;
			data0 = (*(p+i*type*num+j)) & 0x04;
			data1 = data1 | (data0<<1);
			write(1,data1);
			
			data1 = 0;
			data0 = (*(p+i*type*num+j)) & 0x02;
			data1 = data0<<6;
			data0 = (*(p+i*type*num+j)) & 0x01;
			data1 = data1 | (data0<<3);
			write(1,data1);
		}
		write(1,0);
	}
}

应用驱动示例,显示“功率”文字

//==============================================================================
// 函数功能:显示功率
//==============================================================================
void display_P(uint8_t x,uint8_t y)
{
	Write_Word(x, y, 6, 2, P_bytes);
}
// “功率(W):” 字模  16*8*num(12)
const uint8_t P_bytes[] = {
    0x00, 0x40, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x40, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 
    0x00, 0x40, 0x7f, 0xfc, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 
    0xfe, 0x40, 0x02, 0x00, 0x08, 0x00, 0xd6, 0x00, 0x10, 0x00, 0x00, 0x00, 
    0x11, 0xfc, 0x44, 0x44, 0x08, 0x00, 0x54, 0x00, 0x10, 0x00, 0x00, 0x00, 
    0x10, 0x44, 0x2f, 0x88, 0x10, 0x00, 0x54, 0x00, 0x08, 0x00, 0x00, 0x00, 
    0x10, 0x44, 0x11, 0x10, 0x10, 0x00, 0x54, 0x00, 0x08, 0x00, 0x00, 0x00, 
    0x10, 0x44, 0x22, 0x48, 0x10, 0x00, 0x54, 0x00, 0x08, 0x00, 0x00, 0x00, 
    0x10, 0x44, 0x4f, 0xe4, 0x10, 0x00, 0x54, 0x00, 0x08, 0x00, 0x00, 0x00, 
    0x10, 0x84, 0x00, 0x20, 0x10, 0x00, 0x6c, 0x00, 0x08, 0x00, 0x30, 0x00, 
    0x10, 0x84, 0x01, 0x00, 0x10, 0x00, 0x28, 0x00, 0x08, 0x00, 0x30, 0x00, 
    0x1e, 0x84, 0xff, 0xfe, 0x08, 0x00, 0x28, 0x00, 0x10, 0x00, 0x00, 0x00, 
    0xf1, 0x04, 0x01, 0x00, 0x08, 0x00, 0x28, 0x00, 0x10, 0x00, 0x30, 0x00, 
    0x41, 0x04, 0x01, 0x00, 0x04, 0x00, 0x28, 0x00, 0x20, 0x00, 0x30, 0x00, 
    0x02, 0x28, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 
    0x04, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

以上为简单的驱动代码,还有很多优化空间。

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值