历史上的今天

今天是:2024年11月19日(星期二)

2019年11月19日 | LCD12864液晶显示程序

发布者:数据探险家 来源: 51hei关键字:LCD12864  液晶显示  ST7920驱动 手机看文章 扫描二维码
随时随地手机看文章

/***********************************************************************

工    程:ST7920驱动的12864液晶的3线串行驱动模式

引脚定义:RS(CS)=====>  PD3   //PB0

    RW(SID)====> PD4     //PB1

          EN(SCLK)===>   PD6//   PB2

    PSB为硬件控制,接高电平为8位或4位的并行模式,接低电平为串行模式

************************************************************************/

#include

#include

#define uchar unsigned char

#define uint unsigned int 

#define nop()  NOP()

#define xtal 8

#define Set_CS() DDRD |= (1<<3);PORTD |= (1<<3)

#define Set_SID() DDRD |= (1<<4);PORTD |= (1<<4)

#define Set_SCLK() DDRD |= (1<<6);PORTD |= (1<<6)

#define Clr_CS() DDRD |= (1<<3);PORTD &=~(1<<3)

#define Clr_SID() DDRD |= (1<<4);PORTD &=~(1<<4)

#define Clr_SCLK() DDRD |= (1<<6);PORTD &=~(1<<6)



//====================================================================

//函数声明

void Delay(uint ms);      //延时子程序

void W_1byte(uchar RW, uchar RS, uchar W_data);

void Write_8bits(uint W_bits);

void LCD_Init(void);

/********************************************************************

********************************************************************/ 

//===================================================================

const uchar mynew1[]={"欢迎你来到我的家"};

const uchar mynew2[]={"Create by:LQG  "};

const uchar mynew3[]={"海内存知己"};

const uchar mynew4[]={"天涯若比邻"};

/********************************************************************

********************************************************************/

void main()

{ uchar i = 0;

DDRD &= ~BIT(7);

PORTD &= ~BIT(7);

DDRC |=BIT(6);

PORTC &= ~BIT(6);

DDRC &= ~BIT(7);

PORTC &= ~BIT(7);

Clr_CS();

Clr_SID();

Clr_SCLK();

LCD_Init();

while(1)

  nop();

  nop();

  W_1byte(0,0,0x80);   //显示的地址0x80

  nop();

  for(i=0;mynew1[ i]!='';i++)

  {

   W_1byte(0,1,mynew1);

  }

  W_1byte(0,0,0x90);     //显示的地址0x90

  for(i=0;mynew2!='';i++)

  {

   W_1byte(0,1,mynew2); 

  }

  W_1byte(0,0,0x88);   //显示的地址0x88

  for(i=0;mynew3!='';i++)

  {

   W_1byte(0,1,mynew3);

  }

  W_1byte(0,0,0x98+3);     //显示的地址0x98  +3是空格三个字开始写,否则乱码

  for(i=0;mynew4!='';i++)

  {

   W_1byte(0,1,mynew4);

  }

  nop();

  for(;;)

  {

    continue;

  } 

}

}

/******************************************************************/

void LCD_Init(void)

{

  uchar cmd;

  cmd=0x30;   //功能设置 8位数据,基本指令

W_1byte(0,0,cmd);

Delay(2);

cmd=0x0C;   //显示状态 ON,游标OFF,反白OFF

W_1byte(0,0,cmd); //写指令

Delay(2);

cmd=0x01;   //清除显示

W_1byte(0,0,cmd); //写指令

Delay(2);

cmd=0x02;   //地址归位

W_1byte(0,0,cmd); //写指令

Delay(2);

cmd=0x80;   //设置DDRAM地址

W_1byte(0,0,cmd); //写指令

Delay(2);   //延时

}

/*******************************************************************

函 数 名:W_1byte

入口参数:RW、RS、W_data

出口参数:无

建立日期:2007年3月3日

修改日期:

函数作用:写一个字节的数据到12864液晶,包括指令和数据

说    明:RW=1,从液晶读数据到MCU;RW=0,写一个数据到液晶;

   (一般RW都设为0,即只向液晶写数据,不读数据)

          RS=1,写入的是数据;RS=0,写入的是指令;

    一般模式:RW=0,RS=1;写数据

       RW=0,RS=0;写指令

********************************************************************/

void W_1byte(uchar RW, uchar RS, uchar W_data)

{

uint H_data,L_data,S_ID = 0xf8;  //11111RWRS0

if(RW == 0)

{

   S_ID &=~ 0x04;

}

else     //if(RW==1)

{

   S_ID |= 0X04;

}

if(RS == 0)

{

   S_ID &=~ 0x02;

}

else     //if(RS==1)

{

   S_ID |= 0X02;

}

H_data = W_data;

H_data &= 0xf0;   //屏蔽低4位的数据

L_data = W_data;     //xxxx0000格式

L_data &= 0x0f;   //屏蔽高4位的数据

L_data <<= 4;   //xxxx0000格式

Set_CS();

Write_8bits(S_ID);   //发送S_ID

Write_8bits(H_data); //发送H_data

Write_8bits(L_data); //发送L_data

Clr_CS(); 

}

/********************************************************************

函 数 名:Write_8bits

入口参数:W_bits

出口参数:无

建立日期:2007年3月3日

修改日期:

函数作用:负责串行输出8个bit位

说    明:

********************************************************************/

void Write_8bits(uint W_bits)

{

uint i,Temp_data;

for(i=0; i<8; i++)

{

  Temp_data = W_bits;

  Temp_data <<= i;

  if((Temp_data&0x80)==0)  //bit7 is zero

  {

   Clr_SID();

   nop();

   Set_SCLK();

   nop();

   nop();

   Clr_SCLK();

   nop();

   Clr_SID();

  }

  else         //bit7 is one

  {

   Set_SID();

   nop();

   Set_SCLK();

   nop();

   nop();

   Clr_SCLK();

   nop();

   Clr_SID();

  } 

}

}

/********************************************************************

函 数 名:Delay

入口参数:ms

出口参数:无

建立日期:2007年3月3日

修改日期:

函数作用:毫秒级的延时程序,当晶振为1Mhz时,xtal=1;

说    明:

********************************************************************/

void Delay(uint ms) 

    uint i; 

    while(ms--)    

   { 

     for(i=1;i<(uint)(xtal*143-2);i++) 

         ; 

   }   

}

//===================================================================*/


关键字:LCD12864  液晶显示  ST7920驱动 引用地址:LCD12864液晶显示程序

上一篇:基于AVR的8色带位图采集串口(实验)
下一篇:最后一页

推荐阅读

之前,就有媒体报道过,苹果正在自主研发基带芯片,现在的Intel基带只是过渡,过几年,苹果手机所用的基带芯片要摆脱对外界的依赖。据国外媒体报道,苹果公司正在高通公司总部所在地圣地亚哥积极招聘工程师,寻求设计师开发无线组件和处理器,此举将进一步削弱高通未来为苹果设备提供芯片的机会。本月,苹果公司在其网站上发布了10个招聘职位,在圣地亚哥...
在Keil MDK 开发环境里,比如一个 无符号32位整形数据会有很多种表示方法:1.unsigned int 32 (C语言标准表达方法) 2.uint32_t ; 3.u32; 这三种方式都是在表达同一个意思。可为什么ST的开发人员要搞的这么乱呢? 其实ST 搞这么多花样,无非是想开发人员在写代码时定义数据类型能少写几个符号,然后又因为前后版本...
新浪数码讯 11月19日上午消息,前天,华为正式官宣出售荣耀品牌,之后荣耀手机的升级售后问题怎么办? 今天,@荣耀手机 官方微博回答了网友这个问题。  11月17日,深圳特区报上刊登了30多家公司收购华为荣耀的公告。华为出售荣耀品牌,在昨天正式官宣,收购方由 深圳市智信新信息技术有限公司,与30余家荣耀供应商、代理商共同组成。同日,华...
广告摘要声明广告随着工业4.0时代的到来,全球企业逐步利用信息化技术促进产业变革,这不仅仅对生产环节提出了智能化升级,更是要求生产与物流高度融合,这对于物流方的高效、柔性提出了更高要求。在消费升级后的市场压力之下,种类繁多的产品品类的库存管理、难以控制的人力成本,已经成为制造、电商仓储等行业的共同困扰。从“货架到人”到现在“货箱到...

史海拾趣

问答坊 | AI 解惑

改进的单级功率因数校正AC/DC变换器的拓扑综述

改进的单级功率因数校正AC/DC变换器的拓扑综述 摘要:单级功率因数校正(简称单级PFC)由于控制电路简单、成本低、功率密度高在中小功率场合得到了广泛的应用。但是,单级PFC中存在一些问题,如储能电容电压随输入电压和负载的变化而变化,在输入高压 ...…

查看全部问答∨

寻开关电源设计者

开关电源设计,要求不高, 有一定的模拟和数字电子的设计经验, 有开关电源设计经验,有自主设计或辅助设计的能力。 工作地点:成都 要求全职 联系邮箱:hswqs@yeah.net 联系人:文先生…

查看全部问答∨

招聘人员是这样受气的.....

1、需求单来了,发布了,没简历 2、简历来了,能力不合适 3、能力合适的来了,薪资谈判失败 4、薪资谈判成功了——用人部门领导说,恩,先缓缓 5、三催四请之后,用人部门领导说,哎呀,我们这个组织架构变更,现在这个职位划到XXX部门,由XXX ...…

查看全部问答∨

2440官方bsp的DM9000A驱动问题!

最近移植bsp发现wince5.0的DM9000A驱动有问题!现在在这个和大家讨论讨论! 首先dm9000大部分驱动是官方的,下面就是一些细节的研究、我首先讲讲我的平台情况。 1.SD0~SD15  --------   LDATA0~LDATA15  数据线和 ...…

查看全部问答∨

uboot和kernel共享内存区域问题!

各位高人! 我现在遇到这样一个问题!lcd驱动在uboot和kernel中使用了不同的buffer,从而导致了在进入kernel中lcd驱动时出现 lcd屏有个短暂的颜色渐变。为了消除这个bug。就想让uboot和kernel使用同一块内存。 1)下面是我的做法:    & ...…

查看全部问答∨

Vxworks下驱动移植问题

linux下的 驱动程序 要移植到Vxworks下一般都需要做什么工作啊?一般的步骤是什么?我是第一次做驱动移植,希望大家回答的能够细致一些。…

查看全部问答∨

430f5438串口

#include "msp430x54x.h" #include <stdlib.h> #include <stdio.h> #include <string.h> #include "PIN_DEF.H" #define  FLL_FACTOR     749           ...…

查看全部问答∨

TI经典电源芯片有哪些

小弟不才,刚入门电源,想知道TI有哪些经典的电源芯片…

查看全部问答∨

TPS5430

哪位大神,有木有TPS5430的中文资料啊,709915352@qq.com,发我一份啊!!!!…

查看全部问答∨

【解密08】基于51单片机的无线遥控坦克DIY 之 图片欣赏

       前面介绍了很多专业内容,估计大家看的有些不耐烦了,今天换换口味,欣赏一下我们拍摄的照片,之前一直有朋友反映视频看的不是很清楚,很多细节没有看到,今天给大家上几张图,我们也正在翻录新的视频,希望能做的更好 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved