找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STM32F103单片机的LCD12864程序 亲测可用

[复制链接]
跳转到指定楼层
楼主
ID:292427 发表于 2022-4-1 22:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32F103ZET6并行驱动LCD12864的程序,亲测可用

单片机源程序如下:
  1. #include "lcd.h"
  2. #include "sys.h"
  3. #include "delay.h"

  4. u16 temp;

  5. void IO_Init(void)
  6. {
  7.         GPIO_InitTypeDef GPIO_InitStructure;
  8.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);
  9.        
  10.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  11.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2;
  12.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  13.         GPIO_Init(GPIOC,&GPIO_InitStructure);
  14.        
  15.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
  16.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  17.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  18.         GPIO_Init(GPIOA,&GPIO_InitStructure);       
  19. }
  20. //LCD初始化
  21. void LCD_Init()
  22. {
  23.         LCD_wcmd(0x30);//功能设定:基本指令集
  24.         delay_ms(5);
  25.         LCD_wcmd(0x0C);//显示开,关光标
  26.         delay_ms(5);
  27.         LCD_wcmd(0x01);//清除显示
  28. }
  29. //忙判断
  30. void CheckBusy(void)
  31. {
  32.         u8 status;
  33.         RS=0;
  34.         RW=1;
  35.         GPIOA->ODR = 0xFF;//和这个有什么关系??
  36.         do
  37.         {
  38.                 EN = 1;
  39.                 delay_ms(5);
  40.                 status = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_7);//判断BF位
  41.         }while(status & 0x80);
  42.         EN=0;
  43. }
  44. //LCD写命令
  45. void LCD_wcmd(u8 cmd)
  46. {
  47.         CheckBusy();
  48.         RS=0;
  49.         RW=0;
  50.         delay_ms(5);
  51.         temp=(temp&0xff00)|cmd;
  52.         GPIO_Write(GPIOA,temp);
  53.         EN=1;
  54.         delay_ms(10);
  55.         EN=0;
  56. }
  57. //LCD写数据
  58. void LCD_wdat(u8 dat)
  59. {
  60.         CheckBusy();
  61.         RS=1;
  62.         RW=0;
  63.         delay_ms(5);
  64.         temp=(temp&0xff00)|dat;
  65.         GPIO_Write(GPIOA,temp);
  66.         EN=1;
  67.         delay_ms(10);
  68.         EN=0;
  69. }
  70. //向LCD12864中写入一行数据
  71. void LCD_Wmessage(u8* message,u8 address)
  72. {
  73.         LCD_wcmd(address);//要显示的位置
  74.        
  75.         while(*message>0)//这个判断很关键
  76.         {
  77.                 LCD_wdat(*message);
  78.                 message++;
  79.         }
  80. }
复制代码

Keil代码下载: 代码.7z (186.01 KB, 下载次数: 84)

评分

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

查看全部评分

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

使用道具 举报

沙发
ID:637927 发表于 2022-10-17 18:21 | 只看该作者
这个就是正点原子的例子程序,完全没有必要下
回复

使用道具 举报

板凳
ID:637927 发表于 2022-10-17 18:22 | 只看该作者
这个就是正点原子的例子程序,没有必要下载。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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