找回密码
 立即注册

QQ登录

只需一步,快速开始

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

stm32串行控制lcd12864液晶显示器 程序

  [复制链接]
跳转到指定楼层
#
   手里有一块12864的液晶显示器,今天拿起来用stm32F103做了一个工程,方便大家参考,希望对大家能够有用。PDF文档仅共参考,我使用的LCD的核心与pdf上的有所不同。






  1. #include "12864.h"

  2. GPIO_InitTypeDef GPIO_InitStructure;
  3. void Delay(__IO uint32_t nCount)
  4. {
  5.    for(; nCount != 0; nCount--);
  6. }


  7. void send_dat(unsigned char dat)
  8. {
  9.     unsigned char i;
  10.         //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  11.     for(i=0;i<8;i++)
  12.     {
  13.                 if((dat&0x80)==0x80) SID_1;
  14.                 if((dat&0x80)==0x00) SID_0;
  15.         CLK_0;
  16.                 Delay(35);
  17.         CLK_1;
  18.                 dat<<=1;
  19.     }
  20. }


  21. unsigned char get_byte()
  22. {
  23.      unsigned char i,temp1=0,temp2=0;
  24.          //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;     
  25.      for(i=0;i<8;i++)   
  26.      {   
  27.            temp1=temp1<<1;   
  28.            CLK_0;  
  29.                    Delay(25);
  30.            CLK_1;  
  31.                    Delay(20);              
  32.            CLK_0;   
  33.            if(GPIO_ReadOutputDataBit(GPIOE,GPIO_Pin_3)) temp1++;   
  34.      }   
  35.      for(i=0;i<8;i++)   
  36.      {   
  37.            temp2=temp2<<1;   
  38.            CLK_0;  
  39.                    Delay(25);  
  40.            CLK_1;
  41.                    Delay(25);   
  42.            CLK_0;   
  43.            if(GPIO_ReadOutputDataBit(GPIOE,GPIO_Pin_3))  temp2++;   
  44.      }   
  45.          //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  46.      return ((0xf0&temp1)+(0x0f&temp2));   
  47. }

  48. void check_busy()
  49. {
  50.     do
  51.     {
  52.         send_dat(0xfc);
  53.     }
  54.     while((get_byte()&0x8000)==0x8000);
  55. }

  56. void send_cmd(unsigned char cmd)
  57. {
  58.     check_busy();
  59.     send_dat(0xf8);    //
  60.     send_dat(cmd&0xf0); //
  61.     send_dat((cmd&0x0f)<<4); //
  62. }

  63. void write_char(unsigned char dat)
  64. {
  65.     check_busy();
  66.     send_dat(0xfa);//rw=0;rs=1
  67.     send_dat(dat&0xf0);
  68.     send_dat((dat&0x0f)<<4);
  69. }

  70. void lcd_clear()        //清除显示
  71. {
  72.     send_cmd(0x01);
  73. }


  74. void lcd_pos(unsigned char y_add , unsigned char x_add)
  75. {
  76.     switch(y_add)
  77.     {
  78.         case 1:
  79.         send_cmd(0X80|x_add);break;
  80.         case 2:
  81.         send_cmd(0X90|x_add);break;
  82.         case 3:
  83.         send_cmd(0X88|x_add);break;
  84.         case 4:
  85.         send_cmd(0X98|x_add);break;
  86.         default:break;
  87.     }   
  88. }


  89. void lcd_wstr(unsigned char y_add , unsigned char x_add , unsigned char *str)    //
  90. {
  91.     unsigned char i;
  92.     lcd_pos(y_add , x_add);
  93.     for(i=0;str[i]!='\0';i++)
  94.     {
  95.         write_char(str[i]);  
  96.     }

  97. }

  98. void write_figer(unsigned char y_add , unsigned char x_add , unsigned int figer)//在任何位置写数字
  99. {
  100.     unsigned char d[5],i,j;
  101.     lcd_pos(y_add , x_add);
  102.     d[4]=figer%10;
  103.     d[3]=figer%100/10;
  104.     d[2]=figer%1000/100;
  105.     d[1]=figer%10000/1000;
  106.     d[0]=figer/10000;
  107.     for(i=0;i<5;i++)
  108.     {
  109.         if(d[i]!=0)break;
  110.     }

  111.     if(i==5)i--;

  112.     if(i==4)send_dat(0x30);//数据装完,准备发送

  113.     for(j=i;j<5;j++)
  114.     {
  115.        send_dat(d[j]|0x30);//取得的数字加上0x30也即得到该数字的ASCII码,再将该数字发送去显示
  116.     }

  117. }

  118. void lcd_init()     //
  119. {  

  120.     Delay(0xfff);
  121.     send_cmd(0x30);
  122.     send_cmd(0x0C);//0000,1100 整体显示,游标off,游标位置off
  123.     send_cmd(0x01);//0000,0001 清DDRAM
  124.     send_cmd(0x02);//0000,0010 DDRAM地址归位
  125.     send_cmd(0x80);//1000,0000 设定DDRAM 7位地址000,0000到地址计数器A
  126. }


  127. /******************* (C) COPYRIGHT 2011 奋斗STM32 *****END OF FILE****/
复制代码



12864.zip

1.16 MB, 下载次数: 826, 下载积分: 黑币 -5

评分

参与人数 2黑币 +10 收起 理由
00XIAOXU00 + 5 很给力!
shenlan121 + 5 赞一个!

查看全部评分

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

使用道具 举报

来自 67#
ID:196399 发表于 2017-5-9 19:03 | 只看该作者
从串行时序图中可以看出,发送一个指令需要三个字节,第一个是0xf8或者0xfa这个根据你要发送的是命令还是数据而定,然后发送下一个数据的高四位和第四位,但是数据都是在高四位上面,用51的话我们要分三次发送,但是32的话一个字节可以是32位的/所以我们一次就能完成,这也是为什么下面的i<24的原因因为最后的8位没有用,

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

来自 66#
ID:274187 发表于 2018-1-11 15:05 | 只看该作者
请问该模式是串口版硬件配置的程序吗?   PSB端口没用到的那个
回复

使用道具 举报

来自 65#
ID:302850 发表于 2018-8-20 18:38 | 只看该作者
这个似乎是目前为止能找到的最好的12864串行驱动程序了
回复

使用道具 举报

64#
ID:846097 发表于 2023-6-27 17:30 | 只看该作者
write_figer(unsigned char y_add , unsigned char x_add , unsigned int figer);为什么这个函数在主程序中调用不显示数字,想用这个函数显示变化的温度数值,温度数值已经测得,在OLED上可显示,想用LCD12864显示,不能显示,有知道原因的吗?谢谢!
回复

使用道具 举报

63#
ID:936311 发表于 2021-6-29 20:39 | 只看该作者
我的延迟太大了
回复

使用道具 举报

62#
ID:249942 发表于 2020-7-1 09:49 | 只看该作者
用不了的需要查看自己的屏幕 是什么控制器的,我的ST7565R控制器的也用不了这个,不同控制器的命令字节是不同的
回复

使用道具 举报

61#
ID:414257 发表于 2019-11-29 18:04 | 只看该作者
if(GPIO_ReadOutputDataBit(GPIOE,GPIO_Pin_3)) temp1++;  为什么要读这个口的值啊,要读那么E3接哪里
回复

使用道具 举报

60#
ID:344280 发表于 2019-10-29 21:12 | 只看该作者
黑币是扣了,但是不能用
回复

使用道具 举报

59#
ID:151654 发表于 2019-10-19 15:57 | 只看该作者
准备下载试试
回复

使用道具 举报

58#
ID:302850 发表于 2019-9-11 23:59 来自手机 | 只看该作者
感谢分享,收藏以备不时之需
回复

使用道具 举报

57#
ID:242804 发表于 2019-9-11 17:15 | 只看该作者
好棒啊,又可以好好学习了
回复

使用道具 举报

56#
ID:117531 发表于 2019-9-10 14:50 | 只看该作者
谢谢楼主
回复

使用道具 举报

55#
ID:587573 发表于 2019-8-9 18:28 | 只看该作者
可以显示数字嘛,不是字符型的那种
回复

使用道具 举报

54#
ID:125704 发表于 2019-8-7 16:30 | 只看该作者
下载来学习一下
回复

使用道具 举报

53#
ID:302646 发表于 2019-7-31 10:47 | 只看该作者
谢谢分享
回复

使用道具 举报

52#
ID:302646 发表于 2019-7-31 10:47 | 只看该作者
很棒,谢谢
回复

使用道具 举报

51#
ID:323518 发表于 2019-6-25 18:57 | 只看该作者
tongaoao 发表于 2018-1-11 15:05
请问该模式是串口版硬件配置的程序吗?   PSB端口没用到的那个

如果使用的是串行显示程序,PSB端口可以硬件置零,也就是说把PSB端口接地
回复

使用道具 举报

50#
ID:293835 发表于 2019-5-23 19:27 | 只看该作者
CNT 发表于 2017-7-28 14:26
**** 作者被禁止或删除 内容自动屏蔽 ****

怎么接线啊
回复

使用道具 举报

49#
ID:293835 发表于 2019-5-20 22:18 | 只看该作者
真的太棒了!
回复

使用道具 举报

48#
ID:256720 发表于 2019-5-12 18:07 | 只看该作者
stm32串行控制lcd12864液晶显示好东西正需要
回复

使用道具 举报

47#
ID:256720 发表于 2019-5-12 17:33 | 只看该作者
        很给力!
回复

使用道具 举报

46#
ID:256720 发表于 2019-5-12 17:33 | 只看该作者
谢谢,真需要
回复

使用道具 举报

45#
ID:515812 发表于 2019-5-11 15:53 | 只看该作者
完全可以用,用的是串行通信
回复

使用道具 举报

44#
ID:517650 发表于 2019-4-21 11:14 | 只看该作者
赞一个
回复

使用道具 举报

43#
ID:99685 发表于 2019-4-20 09:05 | 只看该作者
赞赞赞
回复

使用道具 举报

42#
ID:136633 发表于 2018-12-5 19:15 | 只看该作者
谢谢分享谢谢分享
回复

使用道具 举报

41#
ID:438377 发表于 2018-12-3 14:36 | 只看该作者

谢谢楼主分享,学习了。
回复

使用道具 举报

40#
ID:397808 发表于 2018-9-14 10:11 | 只看该作者

谢谢楼主分享资源
回复

使用道具 举报

39#
ID:397808 发表于 2018-9-14 10:10 | 只看该作者
赞一个
回复

使用道具 举报

38#
ID:393176 发表于 2018-9-3 21:05 | 只看该作者
不错的资源,赞一个
回复

使用道具 举报

37#
ID:267330 发表于 2018-9-1 13:38 | 只看该作者
这个似乎是目前为止能找到的最好的12864串行驱动程序了
回复

使用道具 举报

36#
ID:390544 发表于 2018-8-27 20:44 | 只看该作者
谢谢分享
回复

使用道具 举报

35#
ID:382798 发表于 2018-8-6 15:12 | 只看该作者
想下载来学习一下,,黑币不够
回复

使用道具 举报

34#
ID:380691 发表于 2018-7-30 09:02 | 只看该作者
谢谢lz分享,我一直就没有搞明白液晶屏咋驱动
回复

使用道具 举报

33#
ID:46517 发表于 2018-7-28 11:23 | 只看该作者
黑币扣了,弹出来,服务器故障,重新点,没黑币了,这是咋回事?
回复

使用道具 举报

32#
ID:294123 发表于 2018-7-22 00:26 | 只看该作者
学习了 谢楼主
回复

使用道具 举报

31#
ID:281804 发表于 2018-7-20 11:44 | 只看该作者
之前用51做过应用12864点阵液晶屏的东西,现在试试用STM32来
回复

使用道具 举报

30#
ID:374464 发表于 2018-7-18 23:26 | 只看该作者
tm32串行控制lcd12864液晶显示器
回复

使用道具 举报

29#
ID:346034 发表于 2018-7-15 14:15 | 只看该作者
谢谢楼主分享资源
回复

使用道具 举报

28#
ID:351564 发表于 2018-6-14 08:45 | 只看该作者
好东西,帮顶,看看参考
回复

使用道具 举报

27#
ID:197780 发表于 2018-4-3 00:40 | 只看该作者
深夜顶帖,望开源
回复

使用道具 举报

26#
ID:197780 发表于 2018-4-3 00:39 | 只看该作者
加油,没有钱下载啊
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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