野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14615|回复: 1

求组STM32与LCD12864的串口显示程序

[复制链接]
发表于 2018-4-4 00:38:08 | 显示全部楼层 |阅读模式
我自己配置了一个晚上发现没有显示,屏幕亮着,但没有显示,在网上找程序后发现还是没有显示,不知道哪里出问题了,现在想借鉴一下大神门的程序。
扣扣邮箱   107‘‘’‘’’204____9809
先行谢过各位大神

回复

使用道具 举报

发表于 2019-10-16 10:56:24 | 显示全部楼层
STM8_两线驱动12864节省GPIO实验   不知道有没有帮助  有点迟

******************************************************************/
#include "iostm8s208mb.h"//主控芯片的头文件   
/************************常用数据类型定义*************************/
#define u8  uint8_t
#define u16 uint16_t
#define u32 uint32_t
typedef unsigned char    uint8_t;
typedef unsigned short   uint16_t;
typedef unsigned long    uint32_t;
/***********************端口/引脚定义区域************************/
#define LCDCS           PF_ODR_ODR0//LCD12864片选端口(原RS)
#define LCDDIO          PF_ODR_ODR3//LCD12864串行数据输入/输出(原RW)
#define LCDCLK          PF_ODR_ODR4//LCD12864串行时钟(原EN)
#define LCDPSB          PF_ODR_ODR5//LCD12864串/并行数据选择端口
/*************************函数声明区域***************************/
void delay(u16 Count);//延时函数声明
void LCD12864_init(void);//12864初始化函数声明
void LCD12864_SBYTE(u8 byte);//逐位写入串行数据函数声明
void LCD12864_Write(u8 cmdordata,u8 writetype);//写入液晶模组命令或数据函数声明
void Display12864(u8 row,u8 col,u8 *string);//显示字符串函数声明
/**************************主函数区域****************************/
int main(void)
{
  PF_DDR_DDR0=1;        //配置PF0为输出模式
  PF_CR1_C10=1;         //配置PF0为推挽输出模式
  PF_CR2_C20=0;         //配置PF0低速率输出
  
  PF_DDR_DDR3=1;        //配置PF3为输出模式
  PF_CR1_C13=1;         //配置PF3为推挽输出模式
  PF_CR2_C23=0;         //配置PF3低速率输出
  
  PF_DDR_DDR4=1;        //配置PF4为输出模式
  PF_CR1_C14=1;         //配置PF4为推挽输出模式
  PF_CR2_C24=0;         //配置PF4低速率输出
  
  PF_DDR_DDR5=1;        //配置PF5为输出模式
  PF_CR1_C15=1;         //配置PF5为推挽输出模式
  PF_CR2_C25=0;         //配置PF5低速率输出
  
  LCD12864_init();      //初始化12864液晶
  Display12864(1,0,"STM8S208系统界面");//显示第一行数据
  Display12864(2,0,"================");//显示第二行数据
  Display12864(3,0,"串行数据控制方式");//显示第三行数据
  Display12864(4,0,"ST7920控制器液晶");//显示第四行数据
  while(1);
}
/****************************************************************/
//延时函数delay(),有形参Count用于控制延时函数执行次数,无返回值
/****************************************************************/
void delay(u16 Count)
{
  u8 i,j;
  while (Count--)//Count形参控制延时次数
  {
    for(i=0;i<50;i++)
      for(j=0;j<20;j++);
  }
}
/****************************************************************/
//初始化液晶模块函数LCD12864_init(),无形参和返回值
/****************************************************************/
void LCD12864_init(void)
{  
  LCDPSB=0;//选择串行模式将PSB置“0”或直接接地
  LCDCS=1;//片选12864
  delay(10);//延时等待稳定
  LCD12864_Write(0x30,0);//选择基本指令集   
  LCD12864_Write(0x0C,0);//开显示,无游标,不反白
  LCD12864_Write(0x01,0);//清除显示屏幕,把DDRAM位址计数器调整为00H
}
/****************************************************************/
//逐位写入串行数据函数LCD12864_SBYTE(),有形参byte,无返回值
/****************************************************************/
void LCD12864_SBYTE(u8 byte)
{  
  u8 i;  
  for(i=0;i<8;i++)//一个字节由8位组成故而循环8次写入  
  {  
    LCDCLK = 0;//拉低时钟线
    if((byte<<i)&0x80)//取位操作
      LCDDIO=1;//写入数据‘1’   
    else  
      LCDDIO=0;//写入数据'0'  
    LCDCLK = 1;//拉高时钟线
  }   
}
/****************************************************************/
//命令或数据写入函数LCD12864_Write(),有形参cmdordata和writetype
//cmdordata是欲写入数据,writetype是写入类型,无返回值
/****************************************************************/
void LCD12864_Write(u8 cmdordata,u8 writetype)
{
  if(writetype==0)//判断写入类型
    LCD12864_SBYTE(0xF8); //“1111 1000”表示写入命令信息
  else
    LCD12864_SBYTE(0xFA);//“1111 1010”表示写入数据信息
  LCD12864_SBYTE(0xF0&cmdordata);//取高四位传送
  LCD12864_SBYTE(0xF0&(cmdordata<<4));//取低四位传送
}
/****************************************************************/
//字符串显示函数Display12864(),有形参row,col,*string,row表示行
//col表示列,字符指针string指向字符串数据,无返回值
/****************************************************************/
void Display12864(u8 row,u8 col,u8 *string)
{
  switch(row)//行变量判断
  {
    case 1:row=0x80;break;//第一行DDRAM首地址为0x80
    case 2:row=0x90;break;//第二行DDRAM首地址为0x90
    case 3:row=0x88;break;//第三行DDRAM首地址为0x88
    case 4:row=0x98;break;//第四行DDRAM首地址为0x98
    default:break;
  }
  LCD12864_Write(row+col,0);//写入行列地址
  while(*string!='\0')//输出字符串直到结束标志‘|0’
  {
    LCD12864_Write(*string,1);//写入字符数据
    string++;//指针后移
  }
}


STM8_两线驱动12864节省GPIO实验.zip

326.66 KB, 下载次数: 34

回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-4-25 21:35 , Processed in 0.029144 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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