找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3544|回复: 2
打印 上一主题 下一主题
收起左侧

STM32驱动LCD12864程序

[复制链接]
跳转到指定楼层
楼主
ID:495367 发表于 2019-9-21 17:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
LCD12864单片机源程序如下:
  1. #include "lcd12864.H"
  2. #include "delay.h"

  3. /*!
  4. *  @brief      GPIO_init
  5. *  @since      v1.0
  6. *  @param  None
  7. *  @author     Z小旋
  8. *  使用时自行修改这里的初始化即可
  9. */
  10. void lcd_GPIO_init()
  11. {
  12.       
  13.   GPIO_InitTypeDef  GPIO_InitStructure;

  14.   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);//使能GPIOE时钟

  15.   //GPIOE0,E1初始化设置
  16.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
  17.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式
  18.   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
  19.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  20.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//无上拉
  21.   GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化
  22.   SID=1;
  23.   SCLK=1;
  24. }

  25. /* 字符显示RAM地址    4行8列 */
  26. u8 LCD_addr[4][8]={
  27.         {0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87},                  //第一行
  28.         {0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97},                //第二行
  29.         {0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F},                //第三行
  30.         {0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F}                //第四行
  31.         };






  32. /*!
  33. *  @brief      LCD串行发送一个字节
  34. *  @since      v1.0
  35. *  @param  byte   写入字节
  36. *  @author     Z小旋
  37. */
  38. void SendByte(u8 byte)
  39. {
  40.      u8 i;
  41.           for(i = 0;i < 8;i++)
  42.     {
  43.                         if((byte << i) & 0x80)  //0x80(1000 0000)  只会保留最高位
  44.                         {
  45.                                 SID = 1;           // 引脚输出高电平,代表发送1
  46.                         }
  47.                         else
  48.                         {
  49.                                 SID = 0;         // 引脚输出低电平,代表发送0
  50.                         }
  51.                 /*或               
  52.                         SID =        (Dbyte << i) & 0x80;
  53.                                
  54.                         上面那样为了方便理解
  55.                 */
  56.                         SCLK = 0;   //时钟线置低  允许SID变化
  57.                         delay_us(5); //延时使数据写入
  58.                         SCLK = 1;    //拉高时钟,让从机读SID
  59.                 }   
  60. }


  61. /*!
  62. *  @brief      LCD写指令
  63. *  @since      v1.0
  64. *  @param  Cmd   要写入的指令
  65. *  @author     Z小旋
  66. */
  67. void Lcd_WriteCmd(u8 Cmd )
  68. {
  69.      delay_ms(1);     //由于我们没有写LCD正忙的检测,所以直接延时1ms,使每次写入数据或指令间隔大于1ms 便可不用写忙状态检测
  70.      SendByte(WRITE_CMD);            //11111,RW(0),RS(0),0   
  71.      SendByte(0xf0&Cmd);      //高四位
  72.      SendByte(Cmd<<4);   //低四位(先执行<<)
  73. }

  74. /*!
  75. *  @brief      LCD写数据
  76. *  @since      v1.0
  77. *  @param  Dat   要写入的数据
  78. *  @author     Z小旋
  79. */
  80. void Lcd_WriteData(u8 Dat )
  81. {
  82.      delay_ms(1);     
  83.      SendByte(WRITE_DAT);            //11111,RW(0),RS(1),0
  84.      SendByte(0xf0&Dat);      //高四位
  85.      SendByte(Dat<<4);   //低四位(先执行<<)
  86. }
  87. /*!
  88. *  @brief      LCD初始化
  89. *  @since      v1.0
  90. *  @param  None
  91. *  @author     Z小旋
  92. */
  93. void Lcd_Init(void)
  94. {
  95. delay_ms(50);           //等待液晶自检(延时>40ms)
  96.         Lcd_WriteCmd(0x30);        //功能设定:选择基本指令集
  97. delay_ms(1);//延时>100us
  98.         Lcd_WriteCmd(0x30);        //功能设定:选择8bit数据流
  99. delay_ms(1);        //延时>37us
  100.     Lcd_WriteCmd(0x0c);        //开显示
  101. delay_ms(1);        //延时>100us
  102.     Lcd_WriteCmd(0x01);        //清除显示,并且设定地址指针为00H
  103. delay_ms(30);        //延时>10ms
  104.                 Lcd_WriteCmd(0x06);        //进入设定点,初始化完成
  105. }


  106. /*!
  107. *  @brief      显示字符或汉字
  108. *  @since      v1.0
  109. *  @param  x: row(0~3)
  110. *  @param  y: line(0~7)
  111. *  @param         str: 要显示的字符或汉字
  112. *  @author     Z小旋
  113. */
  114. void LCD_Display_Words(uint8_t x,uint8_t y,uint8_t*str)
  115. {
  116.         Lcd_WriteCmd(LCD_addr[x][y]); //写初始光标位置
  117.         while(*str>0)
  118.     {
  119.       Lcd_WriteData(*str);    //写数据
  120.       str++;     
  121.     }
  122. }
  123. /*!
  124. *  @brief      显示图片
  125. *  @since      v1.0
  126. *  @param  *pic   图片地址
  127. *  @author     
  128. */
  129. void LCD_Display_Picture(uint8_t *img)
  130.         {
  131.                 uint8_t x,y,i;
  132.                 Lcd_WriteCmd(0x34);                //切换到扩充指令
  133.                 Lcd_WriteCmd(0x34);                //关闭图形显示
  134.                 for(i = 0; i < 1; i++)   //上下屏写入
  135.                 {
  136.                         for(y=0;y<32;y++)   //垂直Y写32次
  137.                         {  
  138.                                 for(x=0;x<8;x++)   //横向X写8次
  139.                                 {
  140.                                         Lcd_WriteCmd(0x80 + y);                //行地址
  141.                                         Lcd_WriteCmd(0x80 + x+i);                //列地址
  142.                                         Lcd_WriteData(*img ++);                //写高位字节数据 D15-D8   
  143.                                         Lcd_WriteData(*img ++);                //写低位字节数据 D7-D0
  144.                                 }
  145.                         }
  146.                 }
  147.                 Lcd_WriteCmd(0x36);//打开图形显示               
  148.                 Lcd_WriteCmd(0x30);        //切换回基本指令
  149.         }       
  150. /*!
  151. *  @brief      清屏函数
  152. *  @since      v1.0
  153. *  @param  None
  154. *  @author     Z小旋
  155. */
  156. void LCD_Clear(void)
  157.         {
  158.                 Lcd_WriteCmd(0x01);                        //清屏指令
  159.                 delay_ms(2);                                //延时以待液晶稳定【至少1.6ms】
  160.         }
  161.        
复制代码

所有资料51hei提供下载:
STM32 LCD12864 -Z小旋.7z (308.63 KB, 下载次数: 93)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:381035 发表于 2020-3-31 17:13 | 只看该作者
你好,请问有接线图吗
回复

使用道具 举报

板凳
ID:592475 发表于 2020-4-1 09:19 | 只看该作者
Robust 发表于 2020-3-31 17:13
你好,请问有接线图吗

程序里面不都写的很清楚了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表