你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32开发系列之Protues仿真LCD12864

[复制链接]
STMCU-管管 发布时间:2020-9-15 10:43

最近因为需要用到STM32F103R6来控制LCD12864显示屏,手中没有材料,就尝试用了Protues来仿真


一、创建Protues工程文件




现在Protues8.3版本已经支持STM32的仿真,但目前编译器支持GCC,所以我是创建了一个没有固件的工程,程序之后用Keil编写后导入。如何创建一个新的工程,我这里就不说了,网上有很多。


创建好工程后,从元件库里导入STM32F103R6和LCD12864,连接好电路,连接如下图所示





之后呢我们要配置供电网,在设计里面,把未连接到网络的GND,VCC接入网络,更改时钟频率,右击芯片选择编辑属性,我这里选的是常用的72M。



1.png


2.png



这样我们的仿真电路就弄好了,接下来开始写程序。




二、LCD程序


lcd头文件




  1. #define LCD_RS_PIN   GPIO_Pin_4
  2. #define LCD_RW_PIN   GPIO_Pin_5
  3. #define LCD_EN_PIN  GPIO_Pin_6
  4. #define LCD_SWE_PORT GPIOA

  5. #define LCD_RS(n)     (n==1)? GPIO_SetBits(LCD_SWE_PORT,LCD_RS_PIN):GPIO_ResetBits(LCD_SWE_PORT,LCD_RS_PIN)   
  6. #define LCD_RW(n)     (n==1)? GPIO_SetBits(LCD_SWE_PORT,LCD_RW_PIN):GPIO_ResetBits(LCD_SWE_PORT,LCD_RW_PIN)   
  7. #define LCD_EN(n)    (n==1)? GPIO_SetBits(LCD_SWE_PORT,LCD_EN_PIN):GPIO_ResetBits(LCD_SWE_PORT,LCD_EN_PIN)   
复制代码


lcd12864引脚初始化


  1. RCC->APB2ENR |= 1<<2;  //使能A口时钟

  2. GPIOA->CRL &= 0x0000FFFF;
  3. GPIOA->CRL |= 0x33330000;  //设置PA4(RS),PA(5)RW,PA(6)E.PA(7)RST为推挽输出50Mhz

  4. RCC->APB2ENR |= 1<<3;  //使能B口时钟

  5. GPIOB->CRH &= 0;
  6. GPIOB->CRH |= 0x33333333;
复制代码



数据脚配置为输入或输出


  1. GPIO_InitTypeDef GPIO_Initstructure;
  2. GPIO_Initstructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
  3. GPIO_Initstructure.GPIO_Mode  = GPIO_Mode_IPU;
  4. GPIO_Init(GPIOB,&GPIO_Initstructure);
  5. GPIOB->ODR |= 0xff<<8;
复制代码



  1. GPIO_InitTypeDef GPIO_Initstructure;
  2. GPIO_Initstructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
  3. GPIO_Initstructure.GPIO_Mode = GPIO_Mode_Out_PP;
  4. GPIO_Initstructure.GPIO_Speed = GPIO_Speed_50MHz;
  5. GPIO_Init(GPIOB,&GPIO_Initstructure);
  6. GPIOB->ODR |= 0xFF<<8;
复制代码


LCD屏初始化


  1. LCD12864_GPIO_INIT();
  2. LCD_Write_cmd(0x30);
  3. LCD_Write_cmd(0x0C);
  4. LCD_Write_cmd(0x01);
复制代码


等待数据脚空闲


  1. LCD_RS(0);
  2. delay_us(1);
  3. LCD_RW(1);
  4. delay_us(1);
  5. do{
  6.   LCD_EN(1);
  7.   delay_us(1);
  8.   
  9.   LCD12864_Input();
  10.   sta = GPIO_ReadInputData(GPIOB);
  11.   
  12.   LCD_EN(0);
  13.   delay_us(1);
  14.   
  15.   LCD12864_Output();
  16.   delay_us(1);
  17. }while(sta & 0x8000);
复制代码


写命令


  1. LCD_Wait_Ready();
  2. LCD_RS(0);
  3. delay_us(1);
  4. LCD_RW(0);
  5. delay_us(1);
  6. GPIOB->ODR &= 0X00FF;
  7. GPIOB->ODR |= cmd<<8;
  8. delay_us(10);
  9. LCD_EN(1);
  10. delay_us(1);
  11. LCD_EN(0);
  12. delay_us(1);
复制代码


写数据


  1. LCD_Wait_Ready();
  2. LCD_RS(1);
  3. delay_us(1);
  4. LCD_RW(0);
  5. delay_us(1);
  6. GPIOB->ODR &= 0X00FF;
  7. GPIOB->ODR |= data<<8;
  8. delay_us(10);
  9. LCD_EN(1);
  10. delay_us(1);
  11. LCD_EN(0);
  12. delay_us(1);
复制代码


起始位置设置

  1. unsigned char i;
  2.   switch(x)
  3. {
  4.    case 0x00: i=0x80;
  5.    break;
  6.    case 0x01: i=0x90;
  7.    break;
  8.    case 0x02: i=0x88;
  9.    break;
  10.    case 0x03: i=0x98;
  11.    break;
  12.    default: break;
  13.   }
  14. i=y+i;
  15. //LCD_Write_cmd(0x30);
  16. LCD_Write_cmd(i);
复制代码


中文显示


  1. LCD_Set_Cursor(x,y);
  2. while(*data != '\0')
  3. {
  4.   LCD_Write_data(*data);
  5.   data++;
  6. }
复制代码





收藏 评论0 发布时间:2020-9-15 10:43

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版