历史上的今天
返回首页

历史上的今天

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

正在发生

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

2019-11-19 来源:51hei

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

工    程: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++) 

         ; 

   }   

}

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


推荐阅读

史海拾趣

协顺电子(Finecables)公司的发展小趣事

在品质和创新的支撑下,协顺电子开始积极拓展市场。公司通过参加各类展会、举办技术交流会等方式加强与客户的沟通和交流,同时也不断完善自己的销售网络和售后服务体系。此外,协顺电子还注重品牌建设,通过广告宣传、公关活动等方式提升品牌知名度和美誉度。这些努力使得公司的市场份额不断扩大,品牌影响力也逐渐增强。

旌芯半导体(GN)公司的发展小趣事

经过多年的发展,协顺电子已经成为中国电子连接器行业的领军企业之一。展望未来,公司将继续坚持“以顾客为中心”的经营理念,不断提升产品质量和技术水平;同时,公司也将积极探索新的业务领域和市场机会,推动公司的持续发展。此外,协顺电子还将加强与国际知名企业的合作与交流,共同推动电子行业的发展和进步。

请注意,以上故事框架仅供参考,具体的故事内容需要根据协顺电子(Finecables)公司的实际情况和发展历程进行创作和补充。

GSG公司的发展小趣事
通过无线通信技术,可以实现对压力测量点的远程监控和数据传输。
ELPIDA公司的发展小趣事

ELPIDA公司成立于1999年,是日本在DRAM(动态随机存取存储器)领域的重要企业。它的成立是对当时日本半导体产业的一次重要整合,由NEC、日立、三菱电机等公司的DRAM业务合并而成。这一举措旨在振兴日本在DRAM领域的竞争力,并保护国内DRAM产业。

磁联达(CND-tek)公司的发展小趣事

随着5G技术的快速发展,磁联达(CND-tek)公司意识到无线充电技术将成为未来的重要趋势。公司投入大量资源进行无线充电发射线圈的研发,经过多次试验和改进,终于成功推出了一款性能稳定、效率高的无线充电产品。这一创新不仅为公司带来了丰厚的利润,也进一步巩固了公司在行业内的领先地位。

ConnectBlue公司的发展小趣事

在产品创新的基础上,ConnectBlue公司开始积极拓展市场。公司不仅在国内市场取得了良好的销售业绩,还积极开拓国际市场,与多家海外企业建立了合作关系。同时,公司还注重与产业链上下游企业的合作,与多家供应商和集成商建立了长期稳定的合作关系,共同推动无线通信技术的发展和应用。

问答坊 | AI 解惑

保护汽车电子系统中的数据线与电源线(二)

还有一种方法可以检查这个轨对轨保护元器件对USB协议正常工作模式的影响,就是通过图4的眼图响应来分析信号数据位的完整性。 从图4中不难看出,USB2.0信号的完整性没有受到太大影响,因此它的传输是安全的。 图4 眼图响应与USB 2.0模板 轨 ...…

查看全部问答>

请各位帮我修改下串口程序的错误

#include #define uchar unsigned char #define uint unsigned int unsigned char flag,a,i; uchar b[4]; uchar code table[]=\"I get \"; void init() {         TMOD=0x20;     //确定T1的工作方式 &n ...…

查看全部问答>

YC2440 用DNW软件 按下U没有反应

我最近用YC2440—F V3.5 在用里面的DNW(串口调试软件) 按下U没有反应 WinCE NAND Boot v1.00 May 24 2007 10:29:49 WinCE NAND Boot v1.00 Oct 31 2007 18:42:36 \'U\' for USBMON ********** ERR_INVALID_TOC: 0xea000091 Boot ERROR:0x ...…

查看全部问答>

用C# MSComm控件编程控制串口4,7脚电平,急等.

我用C# MSComm控件编程作下位机通讯,需要控制串口4,7电平,请问该如何编程,谢谢了.(我知道用电路,在8051里很容易,可是不会在C#里控制啊)请各位大侠帮忙.…

查看全部问答>

学习蓝牙nrf51822 4.0技术交流

青云蓝牙4.0群。学习nrf51822的朋友进来交流,建立个交流群,群号:346518370 ,欢迎加入讨论…

查看全部问答>

每天至少10页,希望两月拿下!

本帖最后由 dontium 于 2015-1-23 11:19 编辑 …

查看全部问答>

硬件求助

各位大神,我想问一下大家  下图中红笔圈出来的那两个接口接的是什么线?这种线一般用来做什么?信号输入吗  跟另外一个圈圈里面的那个借口是连着的吗?小妹对这些一窍不通 只有几张模糊的图片 实在看不清楚  求大家 ...…

查看全部问答>

【R7F0C809】@fxyc87,第一讲,入门环境

开箱图,见图, 板子是比较大,大家都这样说 下载器还是小巧 主板像是手工焊接的,不是机器焊的,上边还有松香 按钮手感不错 主芯片框架图 下载器安装驱动后效果,一个虚拟串口 安装驱动时手动选择光盘里的驱动目录 ...…

查看全部问答>

求助:ATMEL SAMD10D14单片机 TCC0.CTRLBSET寄存器的ONESHOT位,赋值1,KEIL崩溃退出

ATMEL SAMD10D14单片机,在外设TCC0初始化时,只要CTRLBSET寄存器的ONESHOT位,赋值1,KEIL就会崩溃退出; 只要CTRLBSET寄存器的ONESHOT位,赋值0,其它BIT位任意赋值,均不会有问题。 在KEIL的外设TCC0窗口,对ONESHOT位,置1操作,也会导致KEIL ...…

查看全部问答>