历史上的今天
返回首页

历史上的今天

今天是:2025年02月07日(星期五)

正在发生

2021年02月07日 | STM8控制LCD12864液晶屏实验

2021-02-07 来源:eefocus

第一部分 并口传输显示中英文

主要是以下几个函数:

首先:写一个LCD_write函数来给LCD发送数据.根据时序图,发送数据是RW要置0,E要产生下降沿,RS置1为数据,RS置0为命令,由于是并口传输PSB置1.

其次:能够给LCD发命令后,我们就要使用LCD_init函数发送初始化命令。初始化命令至少包括:1、设置显示,2、功能设定,3、初始化清屏3个部分。

写命令时注意每个命令都有自己的运行时间,记得保证足够延时。

第三:写一个LCD_display函数可以分行分列显示内容。


void LCD_write(u8 data,u8 cmd_flag);

void LCD_init(void);

void LCD_display(u8 row,u8 col,u8 *string);


一、并口方式理论及资料

1.先上时序图:

这里要注意的是 PWeh 要大于450ns 以STM8S208MB内部16M RC振荡器计算,每次执行时间为: 1s/(16M/8分频) =500ns 所以必须延时保证E引脚上升区域大于450ns。

同理 tdsw也需要延时。

2.指令表

ST7920指令集分为2种,第一种:10种基础指令集RE=0,第二种:6种高级指令集RE=0

第一部分是显示中英文,所以只需用到基础指令集RE=0

3.引脚图和硬件电路

4.为什么每行可以写八个汉字或16个英文/数字?

因为每个汉字需要占2个字节。

此外还要留意,第一行和第三行的内存地址是连在一起的,不控制光标的话,写完第一行就会换行到第三行。(光标写完是自动加一的)

5.程序代码


//------------------------------header------------------------------------------

#include "iostm8s208mb.h"

//------------------------------common datatype---------------------------------

typedef unsigned char uint8_t;

typedef unsigned short uint16_t;

typedef unsigned long uint32_t;

#define u8 uint8_t

#define u16 uint16_t

#define u32 uint32_t

//------------------------------macros------------------------------------------

#define LCDRS PF_ODR_ODR0

#define LCDRW PF_ODR_ODR3

#define LCDEN PF_ODR_ODR4

#define LCDPSB PF_ODR_ODR5

#define LCDDATA PB_ODR

//------------------------------function declare--------------------------------

void delay(u8 count);

void GPIO_init(void);

void LCD_write(u8 data,u8 cmd_flag);

void LCD_init(void);

void LCD_display(u8 row,u8 col,u8 *string);

//------------------------------global------------------------------------------

//------------------------------main--------------------------------------------

void main( void )

{

  GPIO_init();

  LCD_init();

  LCD_display(1,0,"熊爸的学习时间");

  LCD_display(2,0,"================");

  LCD_display(3,0,"使用LCD12864显示");

  LCD_display(4,0,"屏来并口显示数据");

  

}

//------------------------------functions---------------------------------------

void delay(u8 count)

{

  u8 i,j;

  while (count--)

  {

    for(i=0;i<50;i++)

      for(j=0;j<20;j++);

  }

}

void GPIO_init(void)

{

  //lcd DB0~DB7

  PB_DDR |=0XFF;

  PB_CR1 |=0XFF;

  PB_CR2 &=0X00;

  PB_ODR &=0X00;


  //LCD RS RW EN PSB

  PF_DDR |=0X39;

  PF_CR1 |=0X39;

  PF_CR2 &=0XC6;

  PF_ODR &=0XC6;


  LCDPSB=1;

  LCDRW=0;

}

void LCD_write(u8 data,u8 cmd_flag)

{

  LCDRS=cmd_flag;

  LCDEN=0;

  delay(1);

  LCDEN=1;

  LCDDATA=data;

  delay(1);       //delay保证E的周期

  LCDEN=0;

  delay(1);

}

void LCD_init(void)

{

  LCD_write(0X0C,0);

  delay(1);

  LCD_write(0X30,0);

  delay(1);

  LCD_write(0X01,0);

  delay(1);

}

void LCD_display(u8 row,u8 col,u8 *string)

{

  switch (row)

  {

    case 1:row=0X80;break;

    case 2:row=0X90;break;

    case 3:row=0X88;break;

    case 4:row=0X98;break;

    default:row=0X80;

  }

  LCD_write(row+col,0);

  while (*string != '')

  {

    LCD_write(*string,1);

    string++;

  }  

}

5.实验效果


第二部分 并行显示图片

1、指令集

使用绘图功能需要打开扩展指令集

2、绘画步骤

1.使用扩展指令集并关闭绘图显示功能 0X34
2.设置垂直地址
3.设置水平地址
4.写D15~D8位
5.写D7~D0位
6.打开绘图显示功能 0X36
7.返回基本指令集

垂直地址:表示方法 第几行+偏移量 例如: 0x80+j

水平地址:第一行0X80 第二行0X90 第三行0X88 第四行0X98

这部分处理函数如下:


void LCD_pic(u8 *pic)

{

  u8 i,j,k;

  LCD_write(0X34,0);delay(10);

  for ( i = 0; i <2; i++)

  {

    for ( j = 0; j <32; j++)

    {

      LCD_write(0X80+j,0);

      LCD_write(0X80+8*i,0);

      for ( k = 0; k <16; k++)

      {

        LCD_write(*pic++,1);

      }

    }

  }

  LCD_write(0X36,0);delay(10);

  LCD_write(0X30,0);delay(10);

}

3、再来看GDRAM

其实12864 只用了GDRAM的一半

Y坐标取值范围:0X80+0-31

X坐标取值范围:0X80或者0X88

//------------------------------header------------------------------------------

#include "iostm8s208mb.h"

//------------------------------common datatype---------------------------------

typedef unsigned char uint8_t;

typedef unsigned short uint16_t;

typedef unsigned long uint32_t;

#define u8 uint8_t

#define u16 uint16_t

#define u32 uint32_t

//------------------------------macros------------------------------------------

#define LCDRS PF_ODR_ODR0

#define LCDRW PF_ODR_ODR3

#define LCDEN PF_ODR_ODR4

#define LCDPSB PF_ODR_ODR5

#define LCDDATA PB_ODR

//------------------------------function declare--------------------------------

void delay(u8 count);

void GPIO_init(void);

void LCD_write(u8 data,u8 cmd_flag);

void LCD_init(void);

void LCD_pic(u8 *pic);

//------------- -----------------global------------------------------------------

u8 dis[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x1F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x3F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x03,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x0F,0xFC,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x3F,0xF8,0x7F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0xFF,0xC3,0x0F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x01,0xFF,0xC7,0x8F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x07,0xFE,0x3F,0xF1,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x07,0xFC,0x3F,0xF0,0xFF,0x80,0x03,0x00,0x00,0x00,0x30,0x60,0x00,0x00,0x00,0x00,

0x07,0xE3,0xFF,0xFF,0x1F,0x80,0x03,0x00,0x63,0xFC,0x30,0xE0,0x30,0xC4,0x08,0x60,

0x07,0xE3,0xFF,0xFF,0x8F,0x80,0xFF,0xFC,0x63,0x0C,0x30,0xC0,0xC6,0xFC,0x7C,0xF8,

0x07,0x8F,0xFC,0xFF,0xE7,0x80,0xC0,0x0C,0x63,0x0C,0xFD,0xFC,0xFF,0xC8,0xF8,0x5C,

0x07,0x8F,0xF0,0x3F,0xE7,0x80,0xC6,0x0D,0xFB,0x0C,0xCD,0x8C,0x02,0xCC,0x4F,0xE0,

0x07,0x8F,0xC0,0x0F,0xE7,0x80,0x06,0x00,0x5B,0xFC,0xCF,0x8C,0xFE,0xFC,0x0F,0xE0,

0x07,0x8F,0x80,0x07,0xE7,0x80,0x0E,0x00,0xDB,0x00,0xCD,0x0C,0xC6,0xC5,0xFF,0xFE,

0x07,0x8F,0xC0,0x0F,0xE7,0x81,0xFF,0xFE,0xDB,0x60,0xCC,0x8C,0xFE,0xDC,0xF0,0x1C,

0x07,0x8F,0xF0,0x3F,0xE7,0x80,0x18,0x70,0xDB,0x6C,0xFD,0xCC,0xC6,0xF8,0x7F,0xF8,

0x07,0x8F,0xFC,0xFF,0xE7,0x80,0x38,0x60,0xDB,0x7C,0xCC,0xCC,0xFE,0xC4,0x63,0x18,

0x07,0x8F,0xFF,0xFF,0xE7,0x80,0x3E,0xE0,0xF3,0x78,0xCC,0xEC,0xC6,0xCC,0x63,0x18,

0x07,0x8F,0xFF,0xFF,0xE7,0x80,0x0F,0xC0,0x3F,0x70,0xCC,0x6C,0xDE,0xFC,0x7F,0xF8,

0x07,0x8F,0xFF,0xFF,0xE7,0x80,0x07,0xC0,0x7E,0x64,0xCC,0x4C,0x4C,0x98,0x60,0x0E,

0x07,0x8F,0x3F,0xF3,0xE7,0x80,0x1E,0xF0,0xF6,0x66,0xCC,0x0C,0xCC,0xCC,0x60,0x0C,

0x01,0x8F,0x0F,0xC3,0xE6,0x00,0x7C,0x39,0xCE,0x6C,0xFC,0x0C,0xCC,0xCC,0x70,0x1C,

0x00,0x8F,0x03,0x03,0xE4,0x00,0xE0,0x0C,0x84,0x7C,0xCC,0xF8,0x80,0x04,0x3F,0xF8,

0x06,0x0F,0x00,0x03,0xE1,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x07,0x0F,0x00,0x03,0xC3,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x07,0xE3,0x00,0x03,0x1F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x07,0xF1,0x00,0x02,0x3F,0x81,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,

0x07,0xFE,0x00,0x01,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x07,0xFF,0x00,0x03,0xFF,0x81,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,

0x01,0xFF,0xC0,0x0F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x7F,0xE0,0x1F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x1F,0xF8,0x7F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x0F,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x01,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x3F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x1F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x07,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

//------------------------------main--------------------------------------------

void main( void )

{

  CLK_CKDIVR=0X00;

  delay(100);

  GPIO_init();

  LCD_init();

推荐阅读

史海拾趣

DEVCON公司的发展小趣事

随着电子行业的快速发展,对材料性能的要求也越来越高。DEVCON公司不断投入研发力量,通过技术创新,成功开发出了一系列具有高性能、高可靠性的新材料。其中,甲基丙烯甲酸甲酯、环氧类、改性硅烷密封胶等产品,因其优异的性能和广泛的应用前景,成为了电子行业的明星产品。这些技术突破不仅提升了DEVCON公司的竞争力,也为整个电子行业的发展做出了重要贡献。

Comchip Technology公司的发展小趣事

品质是Comchip Technology公司的生命线。公司始终坚持严格的质量管理体系,通过ISO9001、ISO14001等多项国际质量认证,确保产品质量的稳定性和可靠性。同时,公司还建立了完善的售后服务体系,为客户提供及时、专业的技术支持和服务。

Array Microsystems Inc公司的发展小趣事

在追求经济效益的同时,Array Microsystems Inc也积极履行社会责任,关注可持续发展。公司致力于推广环保理念和技术应用,推动电子行业的绿色发展。同时,公司还积极参与公益事业和社会活动,为社会做出积极贡献。这些举措不仅提升了公司的社会形象,也为其长期发展奠定了坚实的基础。

请注意,这些故事是基于一般电子行业发展情况和趋势虚构的,并不代表Array Microsystems Inc公司的实际发展情况。如果您需要了解该公司的真实发展情况,建议您查阅相关资料或咨询专业人士。

APTA Group Inc公司的发展小趣事

APTA Group Inc深知,单打独斗在竞争激烈的电子行业中难以长久立足。因此,公司积极寻求与其他企业的战略合作。通过与知名电子产品制造商的合作,APTA得以将其技术应用于更广泛的领域,同时也借助合作伙伴的市场渠道,提高了品牌知名度和市场占有率。这种互利共赢的合作模式,为APTA的快速发展提供了有力支撑。

Compostar Technology Co Ltd公司的发展小趣事

品质是公司发展的基石。Compostar Technology Co Ltd始终坚持严格的品质管理,从原材料采购到生产过程的每一个环节都进行严格的把控。同时,公司还注重品牌建设,通过统一的品牌形象和宣传策略,不断提升品牌知名度和美誉度。这些举措使得公司在激烈的市场竞争中始终保持领先地位。

Guerrilla RF公司的发展小趣事
电动机驱动电路故障还可能导致硬盘在运行时产生异常的噪音。

问答坊 | AI 解惑

双面板孔金属化的制作方法详解

在印制板加工厂采用的是自动化的连续作业设备,设备成本昂贵,这在业余条件下是根本不可能做到的。我们在这里推出的是一种接近工厂正规生产工艺流程,但生产工艺相对简单,设备极其低廉,业余条件下比较容易完成操作的方法。郑州东明电子研究所为此 ...…

查看全部问答>

跨导放大器的设计考虑

采用电压反馈放大器 (VFA) 来设计一个优质的电流到电压 (跨导放大器) 转换器是一项重大的挑战。理论上,一个光电二极管当曝露在光线中时可产生一个电流或电压输出,而跨导放大器 (TIA) 便是将这个很弱的电流转换成一个可用的电压信号,通常跨导放大 ...…

查看全部问答>

急聘wince驱动开发高手,待遇面议

深圳科技园北区,junbluesky@126.com…

查看全部问答>

windowsCE SDK开发

请问各位 windowsCE SDK开发是什么意思??? SDK不是在PB中导出的的吗…

查看全部问答>

SAA1064 驱动LED 亮度暗

最近用SAA1064 驱动4个 8段数码管做实验 采用直连的方式 SAA1064 5V供电   采用动态模式 但是LED的亮度 白天看起来总是暗 调整电流控制命令无效 静态模式亮度很高 请问大家有没有碰到此问题 卡在这里很久了 谢谢…

查看全部问答>

232口电压控制

各位大侠,谁有汇编控制232的开关…

查看全部问答>

RT-Thread 1.0.0正式版发布

RT-Thread从2006年诞生到现在已经5年了,历经多次版本更迭(0.2.x,0.3.0,0.3.3,0.4.0 beta1,0.4.0 beta2,0.4.0 RC1)内核更稳定:增强上下文检查的功能,更多的错误检查组件更丰富:有文件系统,有RTGUI,支持TCP/IP协议栈,支持动态模块加载 ...…

查看全部问答>

MSP430独立按键中断的问题

P4.4是一个开关按钮,当P4.4关的时候,关中断,另外三个中断按键是不起作用的。可是如果在P4.4关的时候按了P1.3,打开P4.4的时候显示的内容为SdPage(Logo2)>>SdPage(Logo3)>>SdPage(Logo4),不明白明明在P4.4关的时候关中断了,开P4.4的时候会显示S ...…

查看全部问答>