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-17 05:43

arm-linux-qt环境的建立
Arm-Linux嵌入式QT/E环境的建立(qt/e 3.x系列) QT/E 3.x系列比QT/E 2.x系列有非常大的改进,大大提高了开发进度,不再使用tmake,安装也更简单。但目前在网上关于QT/E 3.x系列的介绍还是比较少, 所以本文介绍一下QT/E 3.x系列的安装。 一、建立arm交叉编译工具链 在安装QT/E之前,应确保arm-linux交叉编译工具链已经建立,如果还没有可以参考以下步骤建立。 1、下载交叉编译工具cross-2.95.3.tar.bz2(或其他版本如:cross-3.4.4.tar.bz2),这是已经制作好的arm交叉编译工具链,只需解压及建交环境变量即可使用。 2、把文件cross-2
[单片机]
ARM之汇编与C混合编程
于ARM体系来说,不同语言撰写的函数之间相互调用(mix calls)遵循的是 ATPCS(ARM-Thumb Procedure Call Standard),ATPCS主要是定义了函数呼叫时参数的传递规则以及如何从函数返回,详细内容可以查看ADS1.2 Online Books ——Developer Guide的2.1节。这篇文档要讲的是 汇编代码中对C函数调用时如何进行参数的传递以及如何从C函数正确返回。 不同于x86的参数传递规则,ATPCS建议函数的形参不超过4个,如果形参个数少于或等于4,则形参由R0,R1,R2,R3四个寄存器进行传递;若形参个数大于4,大于4的部分必须通过堆栈进行传递。 ATPCS中个寄
[单片机]
<font color='red'>ARM</font>之汇编与C混合编程
基于ARM与PID算法的开关电源控制系统
  近年来,嵌入式技术发展极为迅速,出现了以单片机、专用嵌入式 ARM 为核心的高集成度处理器,并在通信、自动化、电力电子等领域得到了广泛应用。电源行业也开始采用内部集成资源丰富的嵌入式控制器来构成大型开关电源的控制系统。将SAMSUNC公司的嵌入式 ARM 处理器S3C4480芯片,应用到开关电源的控制系统的设计中,采用C语言和少量汇编语言,就可以实现一种以嵌入式 ARM 处理器为核心、具有智能 PID 控制器以及触摸屏、液晶显示器等功能的开关电源控制系统。  系统硬件架构   随着数字电路和半导体工艺日趋完善成熟,数字信号、数字电路在应用中所占比例越来越大,同时显现出越来越多的优点:便于计算机处理控制、减小信
[电源管理]
基于<font color='red'>ARM</font>与PID算法的开关电源控制系统
Qemu搭建ARM vexpress开发环境(三)----NFS网络根文件系统
经过上一篇《Qemu搭建ARM vexpress开发环境(二)----通过u-boot启动Linux内核》,已经实现了通过u-boot加载Kernel启动开发板,并且挂载根文件系统,本文讲述通过NFS网络挂载根文件系统。 通过NFS网络根文件系统,可以实现开发板在通过u-boot启动内核后,通过NFS网络在别的PC主机上挂载根文件系统。对于开发调试阶段的工作学习提供了很大的便利,可以直接在Linux主机上开发、编译驱动或者APP,并将目标文件拷贝到NFS服务目录中进行使用(此时文件相当于被拷贝到了开发板的根文件系统中)。也可以在主机端直接修改rootfs文件系统中别的文件,等效于在开发板上直接修改。 本文来介绍NFS挂载网
[单片机]
ARM一季度净利1.32亿美元 同比增长7.6%
    凤凰科技讯 北京时间4月20日消息,英国芯片制造商ARM今天公布了2016年一季度业绩,与往年相比利润和营收有所增长,不过ARM警告称在今年余下时间里经济不确定性将会影响产业的增长。截止3月底的一季度ARM营收2.764亿英磅(约3.964亿美元),同比增长21%,上年同期为2.275亿英磅;该季净利9150万英磅(约1.32亿美元),同比增长7.6%。 ARM主要通过对芯片设计进行授权和收取版费而获得收入。目前全球智能手机芯片95%采用ARM架构,公司正在努力提高芯片在网络产业、服务器产业的市场份额,这些市场被英特尔统治。一季度ARM研发投入达到了8630万英磅(约1.20亿美元),同比增长38.3%。ARM CEO西
[手机便携]
泰克为高速串行数据接口测试推出新型时钟恢复仪器
泰克80A07基于SyntheSys Research提供的BERTScope CR技术 促进了串行数据检定和一致性测试的效率 俄勒冈州毕佛顿 –全球领先的测试、测量和监测解决方案供应商泰克公司(NYSE:TEK)1月29日宣布,泰克公司已与SyntheSys Research达成OEM协议,采用SyntheSys Research提供的高级时钟恢复仪器。根据协议,新的仪器将以泰克80A07 BERTScope CR的名称推向市场。该时钟恢复器为受压信号或劣化信号提供异常灵活的时钟恢复功能。该产品的推出旨在对当前高速串行数据设计实现更简便准确的一致性测试,在与泰克DSA8200取样示波器系统一起使用时,80A07将协助工程师简
[新品]
单片机汇编实验五-2:单片机与PC机串行通信实验
实验要求:AT89S52串行通信口工作在方式1,8位UART方式,允许接收,9600bps。在PC机上运行串口调试软件。编程实现:AT89S52内部定时器1,按方式1工作,每1秒钟内部RAM30H单元内容加1,并通过串行通信口送PC机显示。 //This is the fifth_2 program of homework //This is made by WQ Data:2013/3/4/ ORG 0000H AJMP MAIN ORG 0023H //0023H 串口中断程序的入口地址 AJMP Transfer ORG 000BH //000BH 计时器程序T0
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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