找回密码
 立即注册

QQ登录

只需一步,快速开始

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

12864B串行通讯stm32源程序和原理图

  [复制链接]
跳转到指定楼层
楼主
最近弄了个12864串行通讯显示,如附件,供大家交流学习。

12864液晶屏的stm32单片机驱动源码和原理图下载:
12864B串行通讯stm32源程序和原理图.rar (1.43 MB, 下载次数: 476)





STM32F103系列 串行点亮LCD12864B部分源程序预览:
  1. #include "12864.h"
  2. #include "delay.h"        


  3. #define uchar unsigned char
  4. #define uint  unsigned int




  5. uchar const TABLE[]=
  6.    {   
  7.     0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,         
  8.     0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,         
  9.     0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,        
  10.     0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,      
  11.   };


  12. void SendByte(uchar Dbyte)   
  13. {   
  14.       uchar i;   
  15.       for(i=0;i<8;i++)   
  16.       {   
  17.                          GPIO_ResetBits(LCD_CLK);
  18.                         if(Dbyte&0x80)
  19.                                  GPIO_SetBits(LCD_DATA);
  20.                          else
  21.                                  GPIO_ResetBits(LCD_DATA);
  22.                          Dbyte=Dbyte<<1;      
  23.                    delay_us(10);        
  24.                         GPIO_SetBits(LCD_CLK);
  25.                         delay_us(10);        
  26.                         GPIO_ResetBits(LCD_CLK);
  27.                          delay_us(10);
  28.       }   
  29. }  


  30. uchar ReceiveByte(void)
  31. {
  32.       uchar i,temp1,temp2;
  33.      temp1 = 0;
  34.       temp2 = 0;
  35.       for(i=0;i<8;i++)
  36.       {
  37.             temp1=temp1<<1;
  38.             GPIO_ResetBits(LCD_CLK);
  39.                     delay_us(10);
  40.             GPIO_SetBits(LCD_CLK);
  41.                    delay_us(10);
  42.             GPIO_ResetBits(LCD_CLK);
  43.             if(GPIO_ReadInputDataBit(LCD_DATA)) temp1++;
  44.       }
  45.       for(i=0;i<8;i++)
  46.       {
  47.             temp2=temp2<<1;
  48.             GPIO_ResetBits(LCD_CLK);
  49.                     delay_us(5);
  50.             GPIO_SetBits(LCD_CLK);
  51.                    delay_us(5);
  52.             GPIO_ResetBits(LCD_CLK);
  53.             if(GPIO_ReadInputDataBit(LCD_DATA)) temp2++;
  54.       }
  55.       return ((0xf0&temp1)+(0x0f&temp2));
  56. }


  57. void CheckBusy(void)
  58. {
  59.       do  SendByte(0xfc);         
  60.      while(0x80&ReceiveByte());        
  61. }


  62. void WriteCommand(uchar Cbyte )   
  63. {   
  64.          GPIO_SetBits(LCD_CS);      
  65.          delay_ms(1);
  66.          SendByte(0xf8);              
  67.          SendByte(0xf0&Cbyte);         
  68.         SendByte(0xf0&Cbyte<<4);     
  69.          GPIO_ResetBits(LCD_CS);
  70.         delay_ms(2);
  71. }


  72. void WriteData(uchar Dbyte )   
  73. {   
  74.       GPIO_SetBits(LCD_CS);  
  75.      delay_ms(1);  
  76.       SendByte(0xfa);              
  77.       SendByte(0xf0&Dbyte);        
  78.       SendByte(0xf0&Dbyte<<4);     
  79.       GPIO_ResetBits(LCD_CS);   
  80.       delay_ms(2);
  81. }


  82. void LCD_GPIO_Config(void)
  83. {
  84.          GPIO_InitTypeDef  GPIO_InitStructure;  
  85.          
  86.          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);
  87.          
  88.          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9; //对结构体的GPIO_Pin对象赋值,声明要操作的是1,2,3,4端口
  89.          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//对结构体的GPIO_Mode对象赋值,声明IO口的模式是输出
  90.          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//对结构体的GPIO_OType对象赋值,声明IO口的结构是推挽输出
  91.          GPIO_Init(GPIOB, &GPIO_InitStructure);
  92.          GPIO_ResetBits(GPIOB,GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9);
  93. }


  94. void lcd_init(void)  
  95. {
  96.          LCD_GPIO_Config();
  97.          delay_ms(5);
  98.     //   GPIO_ResetBits(LCD_PSB); //L 串口方式   
  99.          GPIO_ResetBits(LCD_RST); // 复位端,低电位有效        
  100.          delay_ms(100);
  101.          GPIO_SetBits(LCD_RST);         
  102.          delay_ms(5);


  103.         WriteCommand(0x30);      
  104.         WriteCommand(0x30);         
  105.         WriteCommand(0x0C);         
  106.         WriteCommand(0x01);      
  107.         delay_ms(20);
  108.         WriteCommand(0x06);     
  109. }


  110. void LcmClearTXT( void )   
  111. {   
  112.       uchar i;   
  113.       WriteCommand(0x30);      
  114.      WriteCommand(0x80);      
  115.      for(i=0;i<64;i++)   
  116.       WriteData(0x20);   
  117. }   
  118.    


  119. void LcmClearBMP( void )   
  120. {   
  121.       uchar i,j;   
  122.       WriteCommand(0x34);      
  123.      WriteCommand(0x36);      
  124.      for(i=0;i<32;i++)            
  125.      {   
  126.             WriteCommand(0x80|i);      
  127.            WriteCommand(0x80);         
  128.             for(j=0;j<32;j++)           
  129.             WriteData(0);   
  130.       }   
  131. }   
  132.    
  133. void LCD_ShowString(uchar row,uchar col,uchar *puts)   
  134. {   
  135.       WriteCommand(0x30);      
  136.      WriteCommand(TABLE[8*row+col]);      
  137.       while(*puts != '\0')     
  138.       {   
  139.             if(col==8)            
  140.            {              
  141.                   col=0;   
  142.                   row++;   
  143.             }   
  144.             if(row==4) row=0;      
  145.            WriteCommand(TABLE[8*row+col]);   
  146.             WriteData(*puts);      
  147.             puts++;   
  148.             WriteData(*puts);   
  149.             puts++;   
  150.             col++;   
  151.       }   
  152. }


  153. void PutBMP(uchar *puts)   
  154. {   
  155.       uint x=0;   
  156.       uchar i,j;   
  157.       WriteCommand(0x34);        
  158.       WriteCommand(0x36);        
  159.       for(i=0;i<32;i++)               
  160.       {   
  161.             WriteCommand(0x80|i);        
  162.             WriteCommand(0x80);        
  163.             for(j=0;j<32;j++)         
  164.             {            
  165.                  WriteData(puts[x]);   
  166.                   x++;   
  167.             }   
  168.       }   
  169. }   


  170. void DisplayDots(uchar DotByte)   
  171. {   
  172.       uchar i,j;   
  173.       WriteCommand(0x34);      
  174.      WriteCommand(0x36);         
  175.       for(i=0;i<32;i++)               
  176.      {   
  177.             WriteCommand(0x80|i);        
  178.             WriteCommand(0x80);        
  179.             for(j=0;j<32;j++)         
  180.             {           
  181.                WriteData(DotByte);                     
  182.             }   
  183.             DotByte=~DotByte;   
  184.       }   
  185. }
复制代码



评分

参与人数 2黑币 +6 收起 理由
訇雨由此 + 1 很好 就是没给硬件连接,希望大佬解答硬件.
wxq987113431 + 5 很给力!

查看全部评分

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

使用道具 举报

沙发
ID:79034 发表于 2016-11-21 08:25 | 只看该作者
谢谢楼主分享,下载了就顶贴,养成良好的习惯。
回复

使用道具 举报

板凳
ID:146960 发表于 2017-5-3 16:55 | 只看该作者
DB0到D87定以在那个口?
回复

使用道具 举报

地板
ID:146960 发表于 2017-5-3 16:56 | 只看该作者
DB0-7定义在哪个口?
回复

使用道具 举报

5#
ID:167529 发表于 2017-6-21 01:08 | 只看该作者
谢谢楼主
回复

使用道具 举报

6#
ID:239119 发表于 2017-10-13 11:17 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

7#
ID:277370 发表于 2018-7-5 17:12 | 只看该作者
学习学习,可惜没分下载
回复

使用道具 举报

8#
ID:296216 发表于 2018-7-11 20:10 | 只看该作者
大佬 我想问一下那个硬件连接和引脚定义是什么呐?
回复

使用道具 举报

9#
ID:294123 发表于 2018-7-22 11:03 | 只看该作者
谢谢楼主 F103C8已经下载进去了
回复

使用道具 举报

10#
ID:377502 发表于 2018-7-22 19:17 | 只看该作者
正好赶上用 谢谢分享
回复

使用道具 举报

11#
ID:221557 发表于 2018-7-28 16:30 | 只看该作者
没时间写了,正好要用到,
回复

使用道具 举报

12#
ID:393176 发表于 2018-9-3 21:06 | 只看该作者
东西不错,谢谢分享
回复

使用道具 举报

13#
ID:254431 发表于 2018-9-11 20:32 | 只看该作者
顶一下,最近在学习
回复

使用道具 举报

14#
ID:389852 发表于 2018-9-29 11:13 | 只看该作者
感谢啊,正好需要,stm刚入手
回复

使用道具 举报

15#
ID:393181 发表于 2018-11-2 15:06 | 只看该作者
没点亮是什么原因呢,程序没改直接测试的
回复

使用道具 举报

16#
ID:143930 发表于 2019-1-30 11:38 | 只看该作者
非常感谢,正在学习这方面的。
回复

使用道具 举报

17#
ID:474348 发表于 2019-1-31 14:36 | 只看该作者
谢谢分享
回复

使用道具 举报

18#
ID:496679 发表于 2019-3-23 14:12 来自手机 | 只看该作者
谁有程序给我发一下,我自己写了好久.都没出来,谢谢大佬,邮箱596752284@qq.com
回复

使用道具 举报

19#
ID:514580 发表于 2019-4-17 14:53 | 只看该作者
非常需要,正在学习中
回复

使用道具 举报

20#
ID:530137 发表于 2019-5-7 22:48 | 只看该作者
最近电设要用到这个,学习一下!
回复

使用道具 举报

21#
ID:197515 发表于 2019-6-30 10:42 | 只看该作者
感谢分享,成功点亮12864B串行通讯。楼上没点亮的注意跳线,有个跳线是选择串行通讯还是并行通讯,我的屏是R9R10为跳点,这里用的是串行通讯。包括楼上还有问D0-D7,那并行通讯方式才用到的,串行不需要。多看产品资料啊,楼主的压缩包里也包含了12864B的文档。
回复

使用道具 举报

22#
ID:463265 发表于 2019-7-1 16:55 | 只看该作者
下载来学习学习
回复

使用道具 举报

23#
ID:587963 发表于 2019-7-22 09:43 | 只看该作者
厉害,
回复

使用道具 举报

24#
ID:593999 发表于 2019-8-2 11:33 | 只看该作者

您好
我想问一下关于12864B的问你
如果你看到麻烦加我QQ1963664468,非常感谢
回复

使用道具 举报

25#
ID:545952 发表于 2019-8-3 01:22 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

26#
ID:381820 发表于 2019-8-5 10:06 | 只看该作者
刚入手32学习
回复

使用道具 举报

27#
ID:136633 发表于 2019-8-26 17:21 | 只看该作者
谢谢分享
回复

使用道具 举报

28#
ID:86901 发表于 2019-12-23 14:15 | 只看该作者
谢谢!!!很给力!
回复

使用道具 举报

29#
ID:658039 发表于 2019-12-24 18:54 | 只看该作者
程世龙 发表于 2017-5-3 16:56
DB0-7定义在哪个口?

标题已经说了,是用串口,PB0~7是并口,就不用定义。
回复

使用道具 举报

30#
ID:694424 发表于 2020-2-17 19:06 | 只看该作者
我也是来找原因的,,,,51那边可以用。。。换了STM电压不一样就不好搞
回复

使用道具 举报

31#
ID:473635 发表于 2020-3-20 16:36 | 只看该作者
感谢分享,现在正好有用到这个资料
回复

使用道具 举报

32#
ID:252148 发表于 2020-6-18 10:56 | 只看该作者

正好赶上用 谢谢分享
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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