STM32驱动ST7920的12864液晶(串行方式)

发布者:buzzedy最新更新时间:2017-01-10 来源: eefocus关键字:STM32  驱动ST7920  12864液晶  串行方式 手机看文章 扫描二维码
随时随地手机看文章

/******************************************************************************************
* 文件名称 :12864.c
* 版权     :
* 模块名称 :st7920驱动的12864液晶的串行工作方式驱动程序
* cpu      :  stm32f103rct6                       主频:72M
* 作者     :
* 创建日期 :2009-10-15
* 功能概要 :
*----------------------------------------修改历史------------------------------------------
* 当前版本 :       修改人:                  修改日期:
* 修改说明 :
******************************************************************************************/

#include "STM32Lib\\stm32f10x.h"
#include "hal.h"

#define SID_H   GPIOC->BSRR=GPIO_Pin_11
#define SID_L   GPIOC->BRR=GPIO_Pin_11 

#define CS_H  GPIOC->BSRR=GPIO_Pin_12
#define CS_L  GPIOC->BRR=GPIO_Pin_12 

#define SCLK_H  GPIOC->BSRR=GPIO_Pin_10
#define SCLK_L  GPIOC->BRR=GPIO_Pin_10

#define x1    0x80
#define x2    0x88
#define y     0x80
#define comm  0
#define dat   1

u8 const  num_lcd[]={"0123456789 :.-"};

/******************************************************************************************
* 函数名称    :Lcd_init
* 功能描述    :初始化LCD 
* 参数        :  参数名称: 输入/输出? 类型  描述

* 返回值      :
* 作者        :
* 创建日期    :2008-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    :     修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void Lcds_Config(void)
{
// SPI_InitTypeDef  SPI_InitStructure;
    GPIO_InitTypeDef GPIO_InitStructure;

 /*PC4-A0*/
// GPIO_SetBits(GPIOC, GPIO_Pin_12);//预置为高
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
 
}
/******************************************************************************************
* 函数名称    :Delaynms
* 功能描述    :延时
* 参数        :  参数名称: 输入/输出? 类型  描述

* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    :     修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void Delaynms(u16 di) 
{
 u16 da,db;
  for(da=0;da    for(db=0;db<10;db++);
}
/******************************************************************************************
* 函数名称    :Lcd_init
* 功能描述    :初始化LCD 
* 参数        :  参数名称: 输入/输出? 类型  描述

* 返回值      :
* 作者        :
* 创建日期    :2008-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    :     修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void Lcd_Init(void) 
{
 Delaynms(50); //启动等待,等LCM讲入工作状态
   CS_H;
   Write_Char(0,0x30);  //8 位介面,基本指令集
   Write_Char(0,0x0c);  //显示打开,光标关,反白关
   Write_Char(0,0x01);  //清屏,将DDRAM的地址计数器归零  
}

/******************************************************************************************
* 函数名称    :Write_char
* 功能描述    :写指令或数据
* 参数        :  参数名称: 输入/输出? 类型  描述

* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    :     修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void Write_Char(u8 start, u8 ddata) 
{
 u8 start_data,Hdata,Ldata;
   if(start==0) 
  start_data=0xf8;  //写指令
    else    
     start_data=0xfa;  //写数据
  
   Hdata=ddata&0xf0;    //取高四位
   Ldata=(ddata<<4)&0xf0;  //取低四位
   Send_Byte(start_data);   //发送起始信号
   Delaynms(10); //延时是必须的
   Send_Byte(Hdata);       //发送高四位
   Delaynms(5);  //延时是必须的
   Send_Byte(Ldata);    //发送低四位
   Delaynms(5);  //延时是必须的
}

/******************************************************************************************
* 函数名称    :Send_byte
* 功能描述    :发送一个字节
* 参数        :  参数名称: 输入/输出? 类型  描述

* 返回值      :
* 作者        :
* 创建日期    :2009-10-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    :     修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void Send_Byte(u8 bbyte) 
{
 u8 i,t;
  for(i=0;i<8;i++)
    {
  if((bbyte)&0x80)
         SID_H; //取出最高位
     else
   SID_L;
   SCLK_H;
  t = 0x10; 
  while(t--);   //延时 lcd读取数据
     SCLK_L;
     bbyte <<= 1; //左移
    }  
}


/******************************************************************************************
* 函数名称    :Clr_Scr
* 功能描述    :清屏函数
* 参数        :  参数名称: 输入/输出? 类型  描述

* 返回值      :
* 作者        :
* 创建日期    :2009-10-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    :     修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void Clr_Scr(void)//清屏函数
{
 Write_Char(0,0x01);
}

/******************************************************************************************
* 函数名称    : LCD_set_xy
* 功能描述    :设置LCD显示的起始位置,X为行,Y为列
* 参数        :  参数名称: 输入/输出? 类型  描述

* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    :     修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void LCD_Set_XY( u8 X, u8 Y )

    u8 address;
 switch(X)
 {
  case 0: 
   address = 0x80 + Y; 
   break;    
     case 1: 
      address = 0x80 + Y; 
      break; 
  case 2: 
   address = 0x90 + Y; 
   break; 
      case 3: 
       address = 0x88 + Y; 
       break;
  case 4: 
   address = 0x98 + Y; 
   break; 
  default:
   address = 0x80 + Y; 
   break;
 }
    Write_Char(0, address);
}

/******************************************************************************************
* 函数名称    :LCD_Write_string
* 功能描述    :中英文字符串显示函数
* 参数        :  参数名称: 输入/输出? 类型  描述

* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    :     修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void LCD_Write_String(u8 X,u8 Y,uc8  *s)

 LCD_Set_XY( X, Y );
    
    while (*s) 
    {
  Write_Char( 1, *s );
     s ++;
  Delaynms(1);
 }
}

/******************************************************************************************
* 函数名称    :LCD_Write_number
* 功能描述    :数字显示函数
* 参数        :  参数名称: 输入/输出? 类型  描述

* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    :     修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void LCD_Write_Number(u8 s)// 数字显示函数

 Write_Char(1,num_lcd[s]);
 Delaynms(1);
}

/******************************************************************************************
* 函数名称    :img_disp
* 功能描述    :显示图形
* 参数        :  参数名称: 输入/输出? 类型  描述

* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    :     修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void Display_Img(u8 const *img)
{
   u8 i,j;
   for(j=0;j<32;j++)
   {
     for(i=0;i<8;i++)
     {
       Write_Char(comm,0x34);
  Delaynms(10);
       Write_Char(comm,y+j);
  Delaynms(10);
       Write_Char(comm,x1+i);
  Delaynms(10);
       Write_Char(comm,0x30);
  Delaynms(10);
       Write_Char(dat,img[j*16+i*2]);
  Delaynms(10);
       Write_Char(dat,img[j*16+i*2+1]);
  Delaynms(10);
     }
   }
   for(j=32;j<64;j++)
   {
     for(i=0;i<8;i++)
     {
       Write_Char(comm,0x34);
  Delaynms(10);
       Write_Char(comm,y+j-32);
  Delaynms(10);
       Write_Char(comm,x2+i);
  Delaynms(10);
       Write_Char(comm,0x30);
  Delaynms(10);
       Write_Char(dat,img[j*16+i*2]);
  Delaynms(10);
       Write_Char(dat,img[j*16+i*2+1]);
  Delaynms(10);
     }
   }
 Delaynms(10);
   Write_Char(comm,0x36);
}

 

/******************************************************************************************
* 函数名称    :Delay_Lcd
* 功能描述    :
* 参数        :  参数名称: 输入/输出? 类型  描述

* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    :     修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void Delay_Lcd(u16 us)   //delay time
{
   while(us--);
}


关键字:STM32  驱动ST7920  12864液晶  串行方式 引用地址:STM32驱动ST7920的12864液晶(串行方式)

上一篇:STM32驱动12bit AD TLC2543(I/O模拟方式)
下一篇:ARM的启动和中断向量表

推荐阅读最新更新时间:2024-03-16 15:29

STM32 iap 关键点记录
想到公司的单片机程序更新太频繁,而且都是在生产现场作业,而下载程序对我来说太费时间,对操作员来说又太复杂,于是就研究研究iap,看看能不能降低复杂度。 我是在st官网的iap例程基础上调试的,例程里芯片是stm32f2xx,而我的板子是stm32f103,需要些调整,改下芯片,掉换下函数库,编译不过的地方改一改,ok,编译下载跑起来。。。 接下来就比较费时间了,例程里只有bootloader部分,没有app部分的工程,对与一个没有接触过iap的人来说就不知从哪下手了,于是各种baidu,气人的是Jlink和stlink不知道被人拿哪里去了,只能用串口各种调试,最后终于能从Bootloader跳转到app里了。下面给些关键部
[单片机]
<font color='red'>STM32</font> iap 关键点记录
STM32系列第14篇--TFTLCD驱动原理
ALINETEK2.8寸 TFTLCD模块特点 240*320分辨率 16位真彩显示(65536色) 自带电阻触摸屏 自带背光电路 注意:模块是3.3V供电的,不支持5V电压的MCU,如果是5VMCU,必须在信号线串接120R电阻使用。 ALINETEK2.8寸 TFTLCD接口说明(16位80并口) LCD_CS:LCD片选信号 LCD_WR:LCD写信号 LCD_RD:LCD读信号 DB :16位双向数据线。 LCD_RST:硬复位LCD信号 LCD_RS:命令/数据标志(0:命令,1:数据) BL_CTR:背光控制信号 T_MISO/T_MOSI/T_PEN/T_CS/T_CLK,触摸
[单片机]
<font color='red'>STM32</font>系列第14篇--TFTLCD<font color='red'>驱动</font>原理
STM32 OSC_IN和OSC_OUT的作用 和 各种接法
OSC_IN和OSC_OUT默认是外部晶振引脚的。 在STM32上如果不使用外部晶振,OSC_IN和OSC_OUT的接法 如果使用内部RC振荡器而不使用外部晶振,请按照下面方法处理: 1)对于100脚或144脚的产品,OSC_IN应接地,OSC_OUT应悬空。 2)对于少于100脚的产品,有2种接法: 2.1)OSC_IN和OSC_OUT分别通过10K电阻接地。此方法可提高EMC性能。 2.2)分别重映射OSC_IN和OSC_OUT至PD0和PD1,再配置PD0和PD1为推挽输出并输出'0'。此方法可以减小功耗并(相对上面2.1)节省2个外部电阻。
[单片机]
stm32专题二十五:基本定时器原理
STM32F103系列的定时器: 定时器功能:定时、输入比较、输出捕获、互补输出; 定时器分类:基本定时器、通用定时器、高级定时器; 定时器资源:高级定时器(2个)TIM1 和 TIM8;通用定时器(4个)TIM2 / 3 / 4 / 5;基本定时器(2个)TIM6 和 TIM7; 定时器功能表: 基本定时器功能简介: 计数器16bit,只能向上计数,只有TIM6和TIM7; 没有外部的GPIO,是内部资源,只能用来定时; 时钟来自PCLK1,为72M,可实现1~65536分频; 基本定时器的结构框图: 1 时钟源(72M): 2 控制器 控制器用于控制定时器的:复位、使能、计数、触发DAC,涉及到的寄存器为:CR
[单片机]
<font color='red'>stm32</font>专题二十五:基本定时器原理
keil环境下stm32下载和擦除程序对Flash的影响
一、烧录两个程序,读取FLASH(实测结果:两个区域都有程序,跟烧录的顺序没有关系) 1、首先 烧录0x08004000开始的程序 读取FLASH:只有0x08004000处有数据 2、烧写0x08000 0000程序 读取FLASH:0x08000000和 0x08004000处都有数据 二、擦除Flash(实测结论:擦除一个,即擦除所有的芯片,跟顺序无关。不更改keil的配置)
[单片机]
keil环境下<font color='red'>stm32</font>下载和擦除程序对Flash的影响
带字库型12864液晶的简单使用
昨天下午终于拿到了期盼已久的12864液晶,经过一天的研究,终于将它显示出字了,现在就在这里写一下,简单的使用方法,可以方便初学者学习,也方便自己以后查阅。 12864液晶,有名字便可以知道它有128*64个像素点,可以显示汉字和简单的图形。在这里先介绍显示字库汉字和自定义汉字的方法,图形的显示以后我也会在空间中更新。 12864显示数据传输也有两种方法,一种是串行方式,一种是并行方式,并行方式传输速度快,我也只介绍串行方式。 12864的读写命令和1602的时序完全一样,这里就不做详细说明,不清楚的可以看我的1602显示,时序图如下: 这个是读时序(包括读数据和读命令) 这个是写
[单片机]
带字库型<font color='red'>12864</font><font color='red'>液晶</font>的简单使用
基于STM32和CAN总线的湿度采集系统设计
1引言 现实生活中,湿度的测量和控制在纺织工业、林业、化工以及气象观测等领域中有着广泛的应用。传统的人工测试方法费时费力,因而有必要研制更智能方便的湿度测量采集系统,以便实时监测湿度,并根据所测量的数据来控制加湿器、空调器等设备的运行,确保得到合适的湿度环境。 这里提出的湿度测量采集系统是为民用设计的,可实时监测仓库,温室等对湿度有严格要求的场合下的湿度,根据检测结果对湿度加以控制,同时还具有在线修订湿度上下限,湿度显示和报警功能,并可向主控室传送数据。 2系统总体设计 湿度测量采集系统首先是一个实时性系统,需要传感器的各种测量数据能及时的显示,同时,监控系统又是一个多点检测系统,需要在不同的点布置传感器,这些传感器通过总线连
[单片机]
基于<font color='red'>STM32</font>和CAN总线的湿度采集系统设计
STM32学习笔记之绪论
学习STM32也有些日子了。作为初学者,从最初的一无所知,到现在略知皮毛之皮毛,感觉着实不容易。 下面把自己的体会以及自认为初学者不易掌握的要点和大家分享一下,有错误的地方,欢迎大家指正。 一、关于学习方法 初学STM32给我的一个感觉就是,概念繁多而且很多都可以继续深究下去, 教程对此又不可能都很详细的论述,但于我来说如鱼鲠喉实在不爽。 因为我喜欢刨根问底,网络资料又实在繁杂,如此又耗费精力,又打击学习积极性。 终于有一天,我转变了心态,如果STM32犹如枝繁叶茂的大树(整个嵌入式体系亦如此),我要做的不是连每一个叶子都明了,而是暂时只要知晓其主干及一些必要的干支即可。其他的枝叶等有时间再去深究,而很多脉络随
[单片机]
<font color='red'>STM32</font>学习笔记之绪论
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved