手把手教会你:使用STM32F103驱动ST7567液晶屏

发布时间:2023-01-04  

ST7567是一种LCD液晶屏的驱动芯片之一,它是单芯片点矩阵式的LCD驱动器,集成了LCD控制器和公共/段驱动器。从MPU发送的显示数据存储在65x132位的内部显示数据RAM(DDRAM)中。

DDRAM中存储的显示数据位与LCD面板的像素直接相关。ST7567包含132个段输出,64个公共输出和1个图标公共输出。借助内置的振荡电路和低功耗电源电路,ST7567无需外部时钟或电源即可生成LCD驱动信号,从而可以使显示系统的组件最少,功耗最小。

而且它还具有6800,8080和4线SPI等通信方式,其中6800和8080是屏幕专用的一种并口通信方式,但是我们常用的就是8080总线方式和4线SPI通信方式来驱动液晶屏,本次使用的是4线SPI通信方式来驱动ST7567的LCD液晶屏。今天我们就来驱动一款TM9665ACC的LCD液晶屏。

这个是老王的屏幕,这个屏幕最大的特点就是便宜好用,驱动简单,但是这个屏里有个背景纸,不是太好看,如果动手能力强的话,可以把背景纸去掉,显示效果会更好看。非常通透。首先,要知道屏的各个引脚,而且要知道每个引脚是什么功能。屏幕引脚如下图所示。

首先,这个屏有14个引脚,1,2,3,11和14引脚是GND其次是4,5引脚是VCC,电压是3.3V接下来6,7,8,9,10,都是功能引脚,分别是复位引脚,CS片选引脚,A0数据/命令引脚,数据信号,时钟信号,12和13是背光引脚,A代表正极,K代表负极,知道每个引脚的定义之后,就可以焊接或者做电路板了,由于之前做好了电路,就不用很麻烦的飞线了。电路板的图纸是搬抄群里大佬的,在这里深表感谢。

接下来由于知道驱动是ST7567,所以就可以直接写驱动代码了,驱动代码部分展示。

void Lcd_Init(void)

{

delay_ms(10);

LCD_RST_LOW();

delay_us(100);

LCD_RST_HIGH();

delay_ms(255);

delay_ms(255);

delay_ms(255);

LCD_WR_REG(0X2F); //开内部升压,不然要接外部VLCD

LCD_WR_REG(0X81); //要求输入对比度

LCD_WR_REG(0XB0); //对比度数值,这个要自己试验一下最佳效果。

LCD_WR_REG(0XEB); //液晶偏压设置 1/9

LCD_WR_REG(0XC2); //设置扫描方式,默认从左到右,上到下。

LCD_WR_REG(0XAF); //开显示

}



//清屏函数

void LCD_Clear(void)

{

u16 i, j;

i = 192 * 64 / 8; //128X64像素,但是RAM是192列的,我也没有找到如何设置列结束位置。数据大小要除以8位数据

for(; i > 0; i--)

LCD_WR_DATA8(0x00); //DAT =0X00,清全白,OXFF,清全黑

}


//-------LCD设置坐标---------------------------------------

void LCD_SetPos(u8 page, u8 column)

{

column = column - 1; //我们平常所说的第 1 列,在 LCD 驱动 IC 里是第 0 列。所以在这里减去 1.

page = page - 1;

LCD_WR_REG(0xb0 + page);/*设置页地址。每页是 8 行。一个画面的 64 行被分成 8 个页。我们平常所说的第 1 页,在 LCD

驱动 IC 里是第 0 页,所以在这里减去 1*/

LCD_WR_REG(column & 0x0f); //设置列地址的低 4 位

column >>= 4;

column = column | 0x10;

LCD_WR_REG(column); //取高4位行地址

}



//显示 16x16 点阵图像、汉字、生僻字或 16x16

void display_graphic_16x16(u8 page, u8 column, unsigned char *dp)

{

u8 i, j;

LCD_SetPos(page, column); //发送地址,第一页

for (i = 0; i < 16; i++) //第一页的数据16字节,列号自动累加

{

LCD_WR_DATA8( *dp); //写数据到LCD,如果要反色显示,就在*P前用~取反。

dp++;

}

LCD_SetPos(page + 1, column); //发送地址,第二页

for (i = 0; i < 16; i++) //第二页的数据16字节

{

LCD_WR_DATA8( *dp); //写数据到LCD,如果要反色显示,就在*P前用~取反。

dp++;

}

}


汉字取模部分代码

unsigned char huan[] =

{

0x04, 0x24, 0x44, 0x84, 0x64, 0x9C, 0x40, 0x30, 0x0F, 0xC8, 0x08, 0x08, 0x28, 0x18, 0x00, 0x00,

0x10, 0x08, 0x06, 0x01, 0x82, 0x4C, 0x20, 0x18, 0x06, 0x01, 0x06, 0x18, 0x20, 0x40, 0x80, 0x00

};/*"欢",0*/

unsigned char ying[] =

{

0x40, 0x40, 0x42, 0xCC, 0x00, 0x00, 0xFC, 0x04, 0x02, 0x00, 0xFC, 0x04, 0x04, 0xFC, 0x00, 0x00,

0x00, 0x40, 0x20, 0x1F, 0x20, 0x40, 0x4F, 0x44, 0x42, 0x40, 0x7F, 0x42, 0x44, 0x43, 0x40, 0x00

};/*"迎",1*/

unsigned char shi[] =

{

0x80, 0x60, 0xF8, 0x07, 0x04, 0xE4, 0x24, 0x24, 0x24, 0xFF, 0x24, 0x24, 0x24, 0xE4, 0x04, 0x00,

0x00, 0x00, 0xFF, 0x00, 0x80, 0x81, 0x45, 0x29, 0x11, 0x2F, 0x41, 0x41, 0x81, 0x81, 0x80, 0x00

};/*"使",0*/

unsigned char yong[] =

{

0x00, 0x00, 0xFE, 0x22, 0x22, 0x22, 0x22, 0xFE, 0x22, 0x22, 0x22, 0x22, 0xFE, 0x00, 0x00, 0x00,

0x80, 0x60, 0x1F, 0x02, 0x02, 0x02, 0x02, 0x7F, 0x02, 0x02, 0x42, 0x82, 0x7F, 0x00, 0x00, 0x00

};/*"用",1*/


主函数部分代码


int main(void)

{

u8 t;

u8 *temp;

u16 SET_VOLTAGE = 123;

SystemInit ();

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

delay_init(); //延时初始化

LCD_IO_init(); //显示屏IO初始化

Lcd_Init(); //显示屏寄存器初始化

LCD_Clear(); //显示屏清屏操作

uart_init(9600); //波特率使用115200

printf("欢迎使用rn");

while(1)

{

display_graphic_16x16(3, 16, 0, huan);

display_graphic_16x16(3, 32, 0, ying);

display_graphic_16x16(3, 48, 0, shi);

display_graphic_16x16(3, 64, 0, yong);

}

}

“欢迎使用”是最终的显示效果,感觉显示的效果还是不错的,而且比较清晰好看。不过显示过程中也有很多麻烦,比如显示位置不对,最后发现是设置坐标函数有问题导致的,重新计算和修改之后就没有这种问题发生了。最后把驱动程序部分分享出来,方便大家使用。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    我们找到了一个用51单片机驱动的程序例程,例程仅供参考,需要根据例程中的配置到芯片手册中查找确认,不可以直接套用。 首先完成液晶屏初始化操作,51程序流程如下: void......
    的并行接口连接,而单片机通过对该并行接口的操作实现对液晶显示。一般在进行液晶显示模块的控制时,采用间接访问方式。如图6所示为液晶屏驱动电路。 3 系统软件设计 本系统选用适时性强与透明度高的C语言作为编程语言,系统......
    设计所需要的各个功能。单片机端口可以控制显示模块、驱动电机模块、温度传感器模块、霍尔传感器模块以及DS1302时钟模块,还能控制各个按键的功能。设计使用单片机的P10,P11接口和直流电机驱动模块相连。使用P37......
    控制模块、温度传感器模块、显示模块、电机驱动控制模块、上位机通信模块及涡轮分散散热模块组成。如图1所示。 2 系统工作原理 该系统通过温度传感器DS18B20获取周围环境温度并送到单片机,并通过单片机......
    顿管组成的ULN2003驱动器对5种波段范围的LED诱虫灯板和继电器实现驱动。实时温湿度和时间信息通过12864LCD液晶屏显示出来。 1.4 逆变电路及高压模块 利用单片机通过ULN2003对继电器进行控制和驱动,经过......
    的控制系统硬件结构图。 2.1微处理器 考虑到控制对象较多、控制精度、和经济性等因素,微处理器选用新华龙公司C8051F340与具有64个I/O端口的C8051F020单片机分别作为上位机(手持控制器)和下位机(驱动......
    电子产品的不断更新,各种显示界面的开发越来越多,由于TFT彩屏的性价比高,因而被广泛用在各种电子设备上作为显示屏。目前驱动TFT彩屏的方案有很多,可以用底端单片机驱动一个终端类型的液晶模组,这种......
    随着电子产品的不断更新,各种显示界面的开发越来越多,由于TFT彩屏的性价比高,因而被广泛用在各种电子设备上作为显示屏。目前驱动TFT彩屏的方案有很多,可以用底端单片机驱动一个终端类型的液晶模组,这种模组价格比较贵,当然......
    LCD1602驱动的时候,其实ASCII在单片机程序编程中也是非常常用的,尤其是屏幕的显示,以及串口通讯、4G通讯等 例如1602液晶屏的显示,如果要显示 ’A’,需要给液晶屏输入“0x41” 在这里也给大家顺便讲一下单片机......
    器)的工作电压VDA及时序控制电路所需的工作电压VDD,从而驱动液晶屏正常工作而显像。同时,从主板送来的LVDS信号(包括数据信号、同步信号、时钟信号、使能信号)转换成数据驱动器和扫描驱动......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>