arm力天电子 lpc2148 无字库的12864显示一个汉字(串行)

发布者:温柔心情最新更新时间:2019-05-20 来源: eefocus关键字:arm  lpc2148  串行 手机看文章 扫描二维码
随时随地手机看文章

力天电子lpc2148开发板中配的12864小屏是不带字库的,并且没有所谓的左右屏,上下屏之分,是一个整屏.(是北京集粹电子设备有限公司生产的,资料详见


http://download.csdn.net/detail/yueniaoshi/4507741 此资料介绍的芯片的相关东西


http://download.csdn.net/detail/yueniaoshi/4507754 此资料介绍的是驱动函数


http://download.csdn.net/detail/yueniaoshi/4507775 此资料介绍的是小小日历钟,这个里面的函数更全一点)


(再说点题外话,当初买板子的时候老板服务很周到,也很热心,问什么说什么!可是一旦板子买回来了,有些地方不懂的时候,想问问老板,就变得爱理不理了啊,美哦办法啊!谁让咱是菜鸟呢?没人说,咱就自己想办法解决吧!)


#include

//管脚宏定义

#define  SCLK 0x01<<24  //595时钟端

#define  MISO 0x01<<5   //数据输入端

#define  MOSI 0x01<<6   //数据输出端

#define  RCK  0x01<<7   //SO12864时钟输入端


//LCD Define 

#define LCD_A 1<<30  //命令数据选择端,高电平:数据  低电平:命令

#define LCD_CLK 1<<4 //时钟端

#define LCD_DATA MOSI //数据端

#define B_LED   1<<13 //背光


#define Sclk_L() IO0CLR |=LCD_CLK //时钟高电平

#define Sclk_H() IO0SET |=LCD_CLK //时钟低电平

#define Res_L()  HC595_DATA &=~(1<<2);Write595() //复位低电平

#define Res_H()  HC595_DATA |=(1<<2); Write595() //复位高电平

#define Data_L() IO0CLR |=LCD_DATA //数据低电平

#define Data_H() IO0SET |=LCD_DATA //数据高电平

#define CS_L() HC595_DATA &=~1; Write595() //片选低电平

#define CS_H() HC595_DATA |=1;  Write595() //片选高电平

#define Write_C() IO0CLR |=LCD_A //选择写命令

#define Write_D() IO0SET |=LCD_A //选择写数据

#define Writecommand

//#define pgm_read_byte

//#define LcdCls



//函数声明

void Delayn(unsigned long n);

void Write595();

void HC595_Init(void);

void Lcd_Init(void);

void display_HZ(unsigned char x,unsigned char y,unsigned char *p);

void LcdCls(unsigned char data);

void Setxy(unsigned char x,unsigned char y);

//全局变量

unsigned int HC595_DATA=0xFFFFFFFF;

unsigned char ZHONG[]={

  //取的字模

0x90,0x8C,0x84,0x84,0x84,0x84,0x85,0xF6,0x84,0x84,0x84,0x84,0x84,0xD4,0x8C,0x00,

0x00,0x20,0x10,0x08,0x04,0x02,0x01,0xFF,0x01,0x02,0x04,0x04,0x08,0x18,0x08,0x00,     //"宋"

};

//主函数

int main(void)

{

  HC595_Init(); //初始化74HC595

  IO0DIR |=LCD_A|B_LED|LCD_CLK; //初始化IO口

  Lcd_Init(); //初始化液晶屏

  LcdCls(0x00);//清屏

  Delayn(10000000); //此处是自己加的,清屏的时候可能会出现正在清上一次的图案时,字就显示出来了

  display_HZ(6,2,ZHONG); //在第2页,第6列开始显示一个"宋"

  while(1); //stop

}

//初始化595接口

void HC595_Init(void)

{

  IO0DIR |= MOSI|RCK;

  IO1DIR |= SCLK;

  IO1CLR |= SCLK;

  IO0DIR |= RCK;

  

  HC595_DATA =0xFFFFFFFF;Write595();

}

//写字节

void WriteByte(unsigned char data)

{

  unsigned char i;

  //IO0CLR;

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

  {

    if(data&0x01) IO0SET=MOSI;

    else IO0CLR =MOSI;

    IO1SET=SCLK;

    data>>=1;

    IO1CLR=SCLK;

  }

    //IO0SET=RCK;

}

 //刷新595的数据

void Write595()

{

  IO0CLR=RCK;

  WriteByte(HC595_DATA&0xff);

  WriteByte((HC595_DATA&0xff00)>>8);

  WriteByte((HC595_DATA&0xff0000)>>16);

  WriteByte((HC595_DATA&0xff000000)>>24);

  IO0SET=RCK;

}

//延时周期数

void Delayn(unsigned long n)

{

while(n--);

}

//向SPI总线上写一个字节的数据

void LCDWriteByte(unsigned char data)

{

  unsigned char i,s;

  s=data;

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

  { //Delayn(1000000); //自己加的

    if(s&0x80) Data_H();

    else  Data_L();

    Sclk_H();

    s<<=1;

    Sclk_L(); 

  }

}

//向液晶屏写数据

void WriteData(unsigned char Data)

{

  Write_D();

  CS_L();

  LCDWriteByte(Data);

  CS_H();

}

//向液晶屏写命令

void WriteCommand(unsigned char Command)

{

  Write_C();

  CS_L();

  LCDWriteByte(Command);

  CS_H();

}

//打开液晶背光  0:关闭 1:打开

void Lcd_BackLed(unsigned char on)

{

  if(on==1)

  {

    IO0CLR=B_LED; //打开背光

  }

  else if(on==0)

  {

    IO0SET=B_LED; //关闭背光

  }

}

//液晶复位

void Lcd_Reset(void)

{

  Res_L();

  Delayn(10000000);

  Res_H();

}

//列顺序翻转,左右翻转 0:正常 1:翻转

void Lcd_ColRev(unsigned char i)

{

  WriteCommand(0xa0|(i&0x01));

}

//清屏

void LcdCls(unsigned char data)

{

  unsigned char i,j;

  for(i=0;i<9;i++)          //依次刷8页

  {

    Setxy(0,i);                //每次从0列开始

    for(j=0;j<128;j++)  //每页写128列


    {

      WriteData(data); //128次每次列地址自动递增

   

    } 

  }

}

//液晶初始化

void Lcd_Init(void)

{

  Lcd_Reset();    //液晶复位

  //Lcd_BackLed(0);

  Lcd_BackLed(1); //打开液晶背光

  WriteCommand(0xaf); //打开显示

  WriteCommand(0x40); //指定显示RAM的行地址,起始行为:0然后63,62,....2,1依次减小

  WriteCommand(0xa1); //ADC正常???

  WriteCommand(0xa6); //没有反白,正常显示

  WriteCommand(0xa4); //全屏显示

  WriteCommand(0xa2); //设置LCD的偏压比

  WriteCommand(0xc0); //正常:意思是下端为0,往上依次为63,62....

  WriteCommand(0x2f); //电源设置

  WriteCommand(0x24); //粗调对比度

  WriteCommand(0x81); //

  WriteCommand(0x24); //跟上一行在一起相当于细调对比度

  Lcd_ColRev(1);     //左右翻转

}

//选择列x,页y

void Setxy(unsigned char x,unsigned char y)

  unsigned char tmp=0;

  y=y&0x0F;    //把页号变换为0XB0……0XB7的页定位码

  y=y|0xb0;

  tmp=x;

  tmp>>=4;     //变换出列号的定位码高低4位

  tmp|=0x10;

  x&=0x0F;

  WriteCommand(y);  //写页定位码

  WriteCommand(tmp);//写列定位码(高)

  WriteCommand(x);  //写列定位码(低)

}

//显示汉字 x是列,y是页,p指向字模数组

void display_HZ(unsigned char x,unsigned char y,unsigned char *p)  //p是汉字的首地址

{

    unsigned char i;

    WriteCommand(0xa4);

    Setxy(x,y);      //起始列,页

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

    {

      WriteData(*p++);//显示上半个汉字   

    }                           

    y+=1;

    Setxy(x,y);     //到下页起点

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

    {

      WriteData(*p++); //显示下半个汉字

      

    }    

}

图片如下:


关键字:arm  lpc2148  串行 引用地址:arm力天电子 lpc2148 无字库的12864显示一个汉字(串行)

上一篇:arm 力天电子lpc2148无字库12864显示一行多个汉字(串行)
下一篇:arm力天电子 lpc2148 基于DS18b20的温度采集实验程序详解

推荐阅读最新更新时间:2024-11-12 16:43

ARM Cortex-M3 学习笔记(4-5)
最近在学ARMCortex-M3, 找了本号称很经典的书 An Definitive Guide to The ARM Cortex-M3 在看。这个系列学习笔记其实就是在学习这本书的过程中做的读书笔记。 Barrier 指令 DMB, DSB, ISB 这三个指令的区别如下表所示。 指令名 功能描述 DMB 数据存储器隔离。DMB指令保证: 仅当所有在它前面的存储器访问操作都执行完毕后,才提交(commit)在它后面的存储器访问操作。 DSB 数据同步隔离。比DMB严格: 仅当所有在它前面的存储器访问操作都执行完毕后,才执行在它后
[单片机]
ARM中关于CPSR_cxsf
msr cpsr_cxsf,r1 ;这里的cxsf表示从低到高分别占用的4个8bit的数据域 指令中有时还有出现cpsr_cf, cpsr_all, cpsr_c等,这里: c 指 CPSR中的control field ( PSR ) f 指 flag field (PSR ) x 指 extend field (PSR ) s 指 status field ( PSR ) 其中cpsr的位表示为: 31 30 29 28 --- 7 6 - 4 3 2 1 0 N Z C V
[单片机]
arm学习笔记020之mov pc,lr的解释
mov pc,lr的解释: 1、参考 http://blog.163.com/cmdbat@126/blog/static/17029212320114238281688/ 异常的发生会导致程序正常运行的被打断, 并将控制流转移到相应的异常处理(异常响应),有些异常(fiq、irq)事件处理后,系统还希望能回 到当初异常发生时被打断的源程序断点处继续完成源程序的执行(异常返回),这就需要一种解决方案, 用于记录源程序的断点位置,以便正确的异常返回。 类似的还有子程序的调用和 返回。在主程序中(通过子程序调用指令)调用子程序时,也需要记录下主程序中的调用点位置,以便将来的子程序的返回。 在ARM处理器中使用 R14
[单片机]
基于32位ARM器件实现地震波检波器测试系统的设计
本系统采用高精度的信号发生器作为激励信号,为后续的测量提供了良好的信号环境,为精密测量打下了良好的基础,获得满意的测试性能。该系统可以准确产生均匀、连续、稳定的低频信号,完成水声信号采集、电压灵敏度和电压灵敏级的处理、直流电阻测量、数据存储等功能。该系统操作简单、携带方便。本系统还可以扩展为对水声换能器阻抗特性等多种参数的测量,尤其适合不宜使用基于PC构架的水声测试装置的场合。该装置结构紧凑,材料选择合理,成本低于以往的水声测试装置,易于推广。 1 、引言 石油是工业的生命.作为高质量能源和化工原料,石油在现代工业中愈来愈受到重视。随着我国经济持续发展和人民生活水平的提高,对油气的需求量更是日益增加。石油、天然气一般埋藏于地表
[单片机]
基于32位<font color='red'>ARM</font>器件实现地震波检波器测试系统的设计
专用于ARM的NI LabVIEW嵌入式模块进行嵌入式系统教学
  通过一系列面向机器人开发的实验室实践课程与团队项目,吸引电子工程和计算机科学学院的同学们积极投入嵌入式系统设计。   The Solution:   采用专用于ARM单片机的NI LabVIEW嵌入式模块,对连接到iRobot Create移动机器人平台的Cortex-M3单片机编程,使得同学们可开发一个嵌入式系统,与具有实时约束的真实世界进行交流。 加州大学伯克利分校工程师采用专用于ARM单片机的NI LabVIEW嵌入式模块,对连接到iRobot Create移动机器人平台的Cortex-M3单片机编程,使得同学们可开发一个嵌入式系统。    通过使用LabVIEW,同学们可以更快地开发复杂的功能,使整个过程
[测试测量]
专用于<font color='red'>ARM</font>的NI LabVIEW嵌入式模块进行嵌入式系统教学
NVIDIA:GPU我是祖师爷,ARM、Imagination靠边站
今年NVIDIA推出了更高效的Maxwell架构,其强大的功耗比已经让不少笔记本厂商为此垂涎已久,而近期NVIDIA决定开放Maxwell架构授权了,NVIDIA表示他们已经跟多家感兴趣的SoC开发者有过接洽,但没有公布具体是哪些厂商。 事实上NVIDIA去年6月份宣布对外提供Kepler架构GPU授权,其他SoC厂商在ARM、Imagination、Vivante之外又多了一个选择。今年NVIDIA又推出了更高效的Maxwell架构,现在也可以提供Maxwell架构授权了,NVIDIA表示他们已经跟多家感兴趣的SoC开发者有过接洽,但没有公布到底是哪些厂商有意采用NVIDIA的GPU授权。而黄仁勋本人的说法是“已经有一些进展
[单片机]
Xilinx、Arm、Cadence和台积公司构建全球首款7纳米CCIX测试芯片
集微网消息,赛灵思、Arm、Cadence和台积公司今日宣布一项合作,将共同构建首款基于台积7纳米FinFET工艺的支持芯片间缓存一致性(CCIX)的加速器测试芯片,并计划在2018年交付。这一测试芯片旨在从硅芯片层面证明CCIX能够支持多核高性能Arm CPU和FPGA加速器实现一致性互联。 出于功耗及空间方面的考虑,在数据中心内对应用进行加速的需求日益增长,诸如大数据分析、搜索、机器学习、4G/5G无线、内存内数据处理、视频分析及网络处理等应用,都已受益于可在多个系统部件中无缝移动数据的加速器引擎。CCIX将支持部件在无需复杂编程环境的情况下,获取并处理位于任何地方的数据。 CCIX将利用现有的服务器互连基础架构,实现对共享内
[手机便携]
Arm 推出 GitHub 平台 AI 工具,简化开发者 AI 应用开发部署流程
专为 GitHub Copilot 设计的 Arm 扩展程序,可加速从云到边缘侧基于 Arm 平台的开发 Arm 原生运行器为部署云原生、Windows on Arm 以及云到边缘侧的 AI 软件提供了无缝的开发体验 GitHub Actions、原生 GitHub 运行器和基于 Arm 平台的 AI 框架相结合,帮助全球 2000 万开发者简化 AI 应用开发部署流程 通过将 Arm® 计算平台与全球最大的开发者社区 GitHub 及其 GitHub Copilot 的强大优势相结合,Arm 正在引领软件开发领域的变革。 借助 Copilot 的 AI 代码建议,开发者可以在 Arm 平台上更高效地编写、测试和优化
[嵌入式]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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