LCD 驱动 伪代码

参考链接:LCD液晶屏的占空比、偏压比_lcd偏压比-CSDN博客

typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;

/***********************
液晶屏的占空比 1/4
液晶屏的偏压   1/3
用2个seg,4个com
想要别的自己改
*************************/
#define DSP_DATA_LEGNTH 1//要显示的数据长度

#define V_FULL //满压,一般是VCC
#define V_2_3  //2/3电压
#define V_1_3  //1/3电压
#define V_0_3  //0电压

#define SEG0
#define SEG1
#define COM0
#define COM1
#define COM2
#define COM3

/*************************
 bit 7 6 5 4 3 2 1 0
 COM 3 2 1 0 3 2 1 0
 SEG 1 1 1 1 0 0 0 0
*************************/

typedef struct{
	uint8_t Data[DSP_DATA_LEGNTH];
	uint8_t BitRightMove;
	uint8_t ToggleFlag;
}DspStruct;

DspStruct Dsp;

void Drive(void)//暂定100us执行一次,自己调
{
	if(Dsp.ToggleFlag == 0)
	{
		switch(Dsp.BitRightMove)
		{
			case 0:
				COM0 = V_0_3;
				COM1 = V_2_3;
				COM2 = V_2_3;
				COM3 = V_2_3;
				break;
			case 1:
				COM0 = V_2_3;
				COM1 = V_0_3;
				COM2 = V_2_3;
				COM3 = V_2_3;
				break;
			case 2:
				COM0 = V_2_3;
				COM1 = V_2_3;
				COM2 = V_0_3;
				COM3 = V_2_3;
				break;
			case 3:
				COM0 = V_2_3;
				COM1 = V_2_3;
				COM2 = V_2_3;
				COM3 = V_0_3;
				break;
		}

		if(Dsp.Data[0]&(1<<(Dsp.BitRightMove+4)))//点亮
		{
			SEG1 = V_FULL;
		}
		else//熄灭
		{
			SEG1 = V_1_3;
		}

		if(Dsp.Data[0]&(1<<Dsp.BitRightMove))//点亮
		{
			SEG0 = V_FULL;
		}
		else//熄灭
		{
			SEG0 = V_1_3;
		}
	}
	else
	{
		switch(Dsp.BitRightMove)
		{
			case 0:
				COM0 = V_FULL;
				COM1 = V_1_3;
				COM2 = V_1_3;
				COM3 = V_1_3;
				break;
			case 1:
				COM0 = V_1_3;
				COM1 = V_FULL;
				COM2 = V_1_3;
				COM3 = V_1_3;
				break;
			case 2:
				COM0 = V_1_3;
				COM1 = V_1_3;
				COM2 = V_FULL;
				COM3 = V_1_3;
				break;
			case 3:
				COM0 = V_1_3;
				COM1 = V_1_3;
				COM2 = V_1_3;
				COM3 = V_FULL;
				break;
		}


		if(Dsp.Data[0]&(1<<(Dsp.BitRightMove+4)))//点亮
		{
			SEG1 = V_0_3;
		}
		else//熄灭
		{
			SEG1 = V_2_3;
		}

		if(Dsp.Data[0]&(1<<Dsp.BitRightMove))//点亮
		{
			SEG0 = V_0_3;
		}
		else//熄灭
		{
			SEG0 = V_2_3;
		}
		

		if(++Dsp.BitRightMove >= 4)
		{
			Dsp.BitRightMove=0;
		}
	}
	
	Dsp.ToggleFlag ^= 0x01;
}


/*
液晶屏的占空比
将所有公共电极(COM)各施加一次扫描电压的时间叫一帧,
单位时间内扫描多少帧的帧率叫帧频,将扫描公共电极(COM)选通的时间与帧周期之比叫占空比。
通常占空比等于公共电极数N的倒数,即1/N。在电压一定的情况下,行数的增加意味着占空比的下降,使液晶的显示质量下降。
液晶屏的偏压
LCD的驱动波形由几级电平组成,为防止对比度不均匀,
在不点亮像素对应的电极上仍加有一定电压,这对降低点亮像素产生的交叉干扰和防止对比度不均匀很重要。
LCD中非点亮像素(非选点)的电压有效值与点亮像素(选择点)电压有效值之比(1/n)成为偏压比。
选择点的电压为1的话,那么非选点的施加电压为1/2(按1/2偏压比算),偏压主要用于调整液晶的对比度。
*/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值