历史上的今天
返回首页

历史上的今天

今天是:2025年08月13日(星期三)

正在发生

2019年08月13日 | 壹拾捌:LCD12864的显示

2019-08-13 来源:eefocus

这里写图片描述

#指令系统



这里写图片描述

#代码


*   【课程19】 ****LCD12864的实验***********

*

*   【说  明】 ****仿真环境中没有做好的字库所以需要自己做汉字字库

*

*   【描  述】 ****显示"源享科技"

*

******************************************************************     


基本操作:

读状态: RS=0,RW=1,EN=1

输出:D0~D7=状态字;

写指令: RS=0,RW=0,EN=下降沿脉冲

D0~D7=指令码;

读数据: RS=1,RW=1,EN=1

输出: D0~D7=数据;

写数据: RS=1,RW=1,EN=下降沿脉冲

D0~D7=数据;

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

#include //51头文件,


//---------常用的两个宏定义-------------- 

#define uint8 unsigned char

#define uint16  unsigned int

//--------12864的控制引脚定义-------------

sbit RS = P3^5;

sbit RW = P3^6;

sbit EN = P3^4;


sbit CS2 = P3^0;

sbit CS1 = P3^1;


uint8 code  yuan[]=

{

/*------------------------------------------------------------------------------

;  源文件 / 文字: 源


;  宽×高(像素) : 16×16

------------------------------------------------------------------------------*/

 0x10,0x21,0x06,0xE0,0x00,0xFE,0x02,0xF2,

 0x5A,0x56,0x52,0x52,0x52,0xF2,0x02,0x00,

 0x04,0xFC,0x03,0x40,0x30,0x0F,0x20,0x11,

 0x4D,0x81,0x7F,0x01,0x05,0x09,0x30,0x00

};


uint8 code xiang[]=

{


 0x00,0x04,0x04,0x74,0x54,0x54,0x55,0x56,

 0x54,0x54,0x54,0x74,0x04,0x04,0x00,0x00,

 0x08,0x08,0x09,0x09,0x09,0x29,0x49,0x89,

 0x7D,0x0B,0x0B,0x09,0x08,0x08,0x08,0x00

};

uint8 code ke[]=

{

/*--  文字:  科  --*/

/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/

 0x10,0x12,0x92,0x72,0xFE,0x51,0x91,0x00,

 0x22,0xCC,0x00,0x00,0xFF,0x00,0x00,0x00,

 0x04,0x02,0x01,0x00,0xFF,0x00,0x04,0x04,

 0x04,0x02,0x02,0x02,0xFF,0x01,0x01,0x00

};

uint8 code ji[]=

{

/*--  文字:  技  --*/

/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/

 0x08,0x08,0x88,0xFF,0x48,0x28,0x00,0xC8,

 0x48,0x48,0x7F,0x48,0xC8,0x48,0x08,0x00,

 0x01,0x41,0x80,0x7F,0x00,0x40,0x40,0x20,

 0x13,0x0C,0x0C,0x12,0x21,0x60,0x20,0x00

};

//-----------函数的声明------------------

void DelayMS(uint16 dly);



//----------液晶模块的声明---------------

bit BUSY(void); //测忙

void Write_cmd(uint8 cmd); //写命令

void Write_dat(uint8 dat); //写数据

//void LCD_Init(void);


void Set_page(uint8 page); //设置页

void Set_Line(uint8 line); //设置起始行

void Set_Col(uint8 col); //设置列

void Set_ONOFF(uint8 swich); //1开0关

void Clear(void); //清屏

void LCD_Init(void); //液晶屏初始化

void Display(uint8 screen,uint8 page,uint8 col,uint8 *p);//显示汉字

void Select_Screen(uint8 swich);//选择液晶屏(左右)


//---------Main Task---------------------

void main(void)

{

LCD_Init();

Display(1,0,0,yuan); //源

Display(1,2,0,xiang); //享

Display(1,4,0,ke); //科

Display(1,6,0,ji); //技


Display(2,0,0,yuan);

Display(2,2,0,xiang);

Display(2,4,0,ke);

Display(2,6,0,ji);

while(1)

{

}

}


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

** 名称 :void DelayMS(uint16 dly)

** 功能 :毫秒级延时(12M的晶振)

** 入口参数 :dly

用户的延时参数   

** 出口参数 :无   

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

void DelayMS(uint16 dly)

{

uint16 x,y;

for(x=dly;x>0;x--)

for(y=124;y>0;y--);

}


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

** 名称 :bit BUSY(void)

** 功能 :检测LCD1602是否处于忙状态;

** 入口参数 :无   

** 出口参数 :bit Bit

返回1,则BUSY

返回0,则OK   

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

bit BUSY(void)

{

bit Bit;

P0 = 0x00;

RS = 0;

RW = 1;

EN = 1;

DelayMS(1);

Bit = (bit)(P0 & 0x80); //最高位为忙信号位

EN = 0;

return Bit;

}


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

** 名称 :void Write_cmd(uint8 cmd)

** 功能 :写命令

** 入口参数 :cmd

控制命令   

** 出口参数 :无   

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

void Write_cmd(uint8 cmd)

{

while(BUSY()); //测忙

RS = 0;

RW = 0;

EN = 0;

P0 = cmd;

EN = 1;

DelayMS(1);

EN = 0;

}


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

** 名称 :void Write_dat(uint8 dat)

** 功能 :写数据

** 入口参数 :dat

要显示的数据  

** 出口参数 :无   

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

void Write_dat(uint8 dat)

{

while(BUSY()); //测忙

RS = 1;

RW = 0;

EN = 0;

P0 = dat;

EN = 1;

DelayMS(1);

EN = 0;

}


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

** 名称 :void LCD_Init(void)

** 功能 :液晶的初始化

** 入口参数 :无 

** 出口参数 :无   

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

/*void LCD_Init(void)

{


Write_cmd(0x34);      //扩充指令操作

    DelayMS(5);

    Write_cmd(0x30);      //基本指令操作

    DelayMS(5);

    Write_cmd(0x0C);      //显示开,关光标

    DelayMS(5);

    Write_cmd(0x01);      //清除LCD的显示内容

    DelayMS(5);

}*/


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

** 名称 :void Set_page(uint8 page)

** 功能 :设置页

** 入口参数 :uint8 

page 0~7共8页 

** 出口参数 :无   

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

void Set_page(uint8 page)

{

page = 0xb8|page; //页的首地址为0XB8

Write_cmd(page);

}


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

** 名称 :void Set_Line(uint8 line)

** 功能 :设置起始行

** 入口参数 :uint8 

line

** 出口参数 :无   

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

void Set_Line(uint8 line)

{

line = 0xc0|line;

Write_cmd(line);

}


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

** 名称 :void Set_Col(uint8 col)

** 功能 :设置列的起始位置

** 入口参数 :uint8 

col

** 出口参数 :无   

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

void Set_Col(uint8 col)

{

col = col&0x3f;

col = 0x40|col;

Write_cmd(col);

}


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

** 名称 :void Select_Screen(uint8 swich)

** 功能 :选择屏幕---左右屏幕

** 入口参数 :uint8 

swich

** 出口参数 :无   

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

void Select_Screen(uint8 swich)

{

switch(swich)

{

case 0: CS1 = CS2 =0; //全屏

break;

case 1: CS1 = 0;CS2 = 1; //左屏

break;

case 2: CS1 =1; CS2 = 0; //右屏

break;

default:

break;

}

}


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

** 名称 :void Set_ONOFF(uint8 swich) //0或1

** 功能 :设置显示开关

** 入口参数 :uint8 

swich 0---关

1---开

** 出口参数 :无   

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

void Set_ONOFF(uint8 swich) //0或1

{

swich = 0x3e|swich;

Write_cmd(swich);

}


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

** 名称 :void Clear(void)

** 功能 :清屏

** 入口参数 :无

** 出口参数 :无   

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

void Clear(void)

{

uint8 i,j;


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

{

Set_page(i);

Set_Col(0);

for(j=0;j<64;j++)

{

Write_dat(0x00);

}

}

}


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

** 名称 :void LCD_Init(void)

** 功能 :初始化

** 入口参数 :无

** 出口参数 :无   

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

void LCD_Init(void)

{

while(BUSY()); //测忙

Set_ONOFF(1);

Clear();

Set_Line(0);

}


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

** 名称 :void Display(uint8 screen,uint8 page,uint8 col,uint8 *p)

** 功能 :汉字的显示

** 入口参数 :uint8 

screen 选屏

page 页

col 列

*p 显示的汉字指针

** 出口参数 :无   

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

void Display(uint8 screen,uint8 page,uint8 col,uint8 *p)

{

uint8 i;

Select_Screen(screen);

Set_page(page);

Set_Col(col);

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

{

Write_dat(p[i]);

}

Set_page(page+1);

Set_Col(col);

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

{

Write_dat(p[i+16]);

}

}


推荐阅读

史海拾趣

乔光电子(FTR)公司的发展小趣事

Futaba Electric Co., Ltd. 的五个发展故事

故事一:从真空管到VFD的转型

Futaba Electric Co., Ltd.(原名双叶电子)成立于1948年,最初以生产收音机收讯真空管起家。然而,随着技术的飞速发展和市场需求的变迁,公司在1970年做出了关键的战略调整,决定放弃真空管业务,转而专注于萤光表示管(VFD)的研发与生产。这一决定极具前瞻性,因为VFD以其高清晰度、广视角和出色亮度等独特优势,迅速赢得了市场的青睐。Futaba凭借在VFD领域的持续创新和卓越品质,逐渐确立了其在全球市场的领先地位,市场份额超过60%,成为行业内的佼佼者。

故事二:无线电控制技术的突破

进入1960年代,Futaba在电子领域不断拓宽其技术边界。1962年,公司推出了无线电控制设备和冲压金属模用部件,旨在提升工业生产的品质和效率。这一创新不仅解决了工业控制领域中长期存在的供应商品质和交货期问题,还引领了模具制造行业的标准提升。Futaba的无线电控制技术逐渐在模具制造、工业自动化等领域得到广泛应用,为公司后续在无线遥控领域的深入发展奠定了坚实基础。

故事三:无线遥控技术的领导者

随着技术的不断积累和市场的日益扩大,Futaba在无线遥控领域取得了显著成就。特别是在1990年,公司成功研发出高频无线展频通讯技术,该技术以其高可靠性和抗干扰性,在卫星通讯、工业用机器人和工业控制设备等领域展现出巨大潜力。Futaba的无线遥控产品如遥控飞机、车、船等,在休闲娱乐市场也广受欢迎,进一步巩固了公司在无线遥控技术领域的领先地位。

故事四:VFD在汽车行业的广泛应用

Futaba的VFD产品凭借其卓越的性能和稳定的品质,赢得了众多汽车制造商的信赖。自1983年Futaba的VFD产品被福特汽车公司采用以来,其在美国三大汽车厂的市场占有率迅速攀升至100%。这一成就不仅证明了Futaba产品在汽车行业的广泛应用和市场认可度,也为其在高端消费性电子设备市场的进一步拓展提供了有力支持。

故事五:中国市场的深入布局

为了更好地服务于中国市场,Futaba成立了双叶电子科技开发(北京)有限公司,专营日本双叶(Futaba)的全线产品。这家公司在北京设立,不仅负责Futaba真空荧光显示管及模组、RC遥控器等产品的生产和销售,还积极开拓中国市场,参与行业交流和合作。双叶电子科技开发(北京)有限公司的成立,标志着Futaba在全球化战略中对中国市场的高度重视和深入布局。通过不断提升产品质量和服务水平,Futaba在中国市场也取得了显著成绩,为公司的持续发展注入了新的动力。

Epitex Inc公司的发展小趣事

Epitex非常重视企业文化的建设和团队精神的培育。他们倡导“创新、协作、务实、共赢”的价值观,鼓励员工积极创新、勇于挑战。同时,Epitex还注重员工关怀和福利待遇的提升,为员工提供良好的工作环境和发展空间。

在团队建设方面,Epitex注重培养员工的团队协作能力和沟通能力。他们定期组织团队活动和培训项目,增强团队的凝聚力和向心力。这种积极向上的企业文化和高效的团队协作为Epitex的持续发展提供了有力保障。

Greenliant公司的发展小趣事

GPS公司成立于2010年,初期专注于可再生能源存储解决方案的研发。随着全球对清洁能源需求的增长,GPS开发了一款高效能的锂离子电池储能系统,该系统能够在电力需求高峰时自动释放电能,平衡电网负载。这一技术突破迅速吸引了投资者的关注,并在几年内成为市场上的领先产品。GPS通过不断优化电池管理系统和智能控制算法,进一步提升了储能系统的效率和安全性,逐步在全球范围内建立了稳定的客户群体。

Collins Electronics Corp公司的发展小趣事

随着全球环保意识的提高,Collins Electronics Corp开始关注其生产活动对环境的影响。他们引入了环保材料和生产工艺,减少了废弃物和有害物质的排放。同时,公司还开展了一系列环保宣传活动,提高员工和客户的环保意识。这些举措不仅提升了公司的社会责任形象,也为其赢得了更多消费者的青睐。公司还研发了节能型电子产品,为推动行业的绿色发展做出了贡献。

福斯特半导体(Foster)公司的发展小趣事

随着公司规模的扩大,Collins Electronics Corp开始将目光投向国际市场。他们积极参加国际电子展会,与世界各地的潜在客户和合作伙伴交流。通过与不同国家的企业合作,公司成功打入了国际市场,产品销量大幅提升。这一过程中,他们不仅学习了国际先进的电子技术,还积累了丰富的跨国运营经验。

绿宝石(BERYL)公司的发展小趣事

随着国内市场的饱和,绿宝石公司开始积极拓展国际市场。公司加强了与国际知名企业的合作,共同开发新产品、新技术。同时,绿宝石公司还在海外设立了研发中心和生产基地,以便更好地服务全球客户。通过一系列的市场拓展和国际化战略,绿宝石公司的国际影响力不断提升。

问答坊 | AI 解惑

TMIGS隧道多元信息预警与安全管理系统

TMIGS系统是由北京交通大学、北京市市政工程研究院、北京索通紫蜂通讯工程技术有限公司联合研制。该系统具有卓越的性能,配套专业化软件,适用于各种地下工程的施工监测与管理。它集多元信息(钢弦式频率类、电流电压类、开关量、数字信号类、声音 ...…

查看全部问答>

基于AT89S52单片机的LED点阵显示屏控制系统的设计

基于AT89S52单片机的LED点阵显示屏控制系统的设计…

查看全部问答>

430的下载器,用的时候供电么?

430的下载器,用的时候供电么?我怎么下不进程序,可是能仿真。为啥??…

查看全部问答>

大家写的芯片驱动代码如何测试?

我专门做fpga的芯片驱动代码,但是我代码写好了,但是芯片fpga还没有写完。 是否有什么方法可以验证我写的代码 写reg是否正确? 大家一般是如何测试的?…

查看全部问答>

请教这几个电阻的作用

1、请问第二级运放的两个15K电阻在此图中起的是什么作用,是否是为第二级运放提供偏置? 2、第二级运放是否为反向比列运算? 2.图中标号3都接地,若要使量输入端电阻对称,第二级运放的同相输入端应加多大的电阻后接地,这个电阻是否是R1||R2||R3 ...…

查看全部问答>

wince 5.0 不能播放FLASH网页?该怎么做?

WINCE5.0,三星2440 CPU,已安装了Macromedia Flash Player 7 for Pocket PC,安装成功,但不能在IE播放FLASH动画网页,浏览动画网页FLASH处空白,请高手帮助,万分感谢!…

查看全部问答>

STM32F103C876(48脚)在智能卡中的应用,遇到问题

我将USART2的模式配置成智能卡模式来与智能卡通信,用示波器检测到USART2_CK脚(PA4)无任何输出,请问在智能卡模式中,它是不是应该输出智能卡的时钟信号呀?怎么配置才正确呢?以下为配置代码,请用过的大侠帮忙:/************************** ...…

查看全部问答>

感觉ST写固件库人有问题

我开始用1.0版本固件库,后来升级2.0.3费了好大劲。主要里面移植有操作系统。 现在想用带两个CAN的片子,本想直接把这CAN文件覆盖掉就可以了。谁知里面连个数据结构 比如以前用u8 u16  U32 可新库用 uint32_t 等 这些东西都要 ...…

查看全部问答>

C51内能嵌入汇编?

  请教各位高手:                   在KEIL 3环境下,C51程序内到底能不能嵌入汇编语言代码,如何才能实现呀?先行谢谢了…

查看全部问答>

赵修科的开关电源中的磁性元器件

和大家分享一下   很多知识都是从高中的承接过来的 也有一些适用的东西 比如78页的三明治绕法计算绕线线径的 和大家分享…

查看全部问答>