新闻中心

EEPW首页>测试测量>设计应用> 基于LCD12864显示器的数字示波器设计

基于LCD12864显示器的数字示波器设计

作者: 时间:2011-08-02 来源:网络 收藏

本文引用地址://m.amcfsurvey.com/article/194794.htm

五、图形液晶数字符号显示

  图形点阵显示数字,原理是把数字以点阵的形式取模,再把点阵模写入特定的空间即可,首先来看数字取模,如图7 所示,对数字“0”按8×5点取模。

图7 数字取模示例图

图7 数字取模示例图

  纵向看,8 点一列,从上至下对应bit0 到bit7,我们用1 表示“亮”,0 表示“暗”,从左至右,依次确定为0111 1100,即0x7c ;1000 0010,即0x82 ;10000010, 即0x82 ;1000 0010, 即0x82 ;0111 1100,即0x7c ;如果我们依次将这5 个字节写入LCD 某页连续5个地址空间,LCD 上就会显示“0”。

  下面我们把数字变量在LCD 上动态显示,就是数值变了,显示跟着变。

  字符显示LCD 驱动函数,实现8×n 点阵字符写入函数。

  void lcd_put_xyns(unsigned char x,y,n,unsigned char *s)

  {

  unsigned char i;

  for(i=0;in;i++) {

  if((x+i)>63) {

  lcd_cmd_wr(ORGY+y,1);

  lcd_cmd_wr(ORGX+x+i-64,1);

  lcd_dat_wr(s[i],1);

  }

  else {

  lcd_cmd_wr(ORGY+y,0);

  lcd_cmd_wr(ORGX+x+i,0);

  lcd_dat_wr(s[i],0);

  }

  }

  }

  参数:“x, y”是坐标,这里y 是页坐标,取值从0 到7,“n”是点阵模字节数,“*s”是点阵模起始地址。

  将字模生成字模表:

  unsigned char code number[]={

  0x7C,0x82,0x82,0x7C,0x84,0xFE,0x80,0x00,0xCC,0xA2,0x

  92,0x8C,0x44,0x92,0x92,0x6C,

  0x38,0x24,0xFE,0x20,0x9E,0x92,0x92,0x62,0x7C,0x92,0x9

  2,0x64,0x06,0xF2,0x0E,0x02,

  0x6C,0x92,0x92,0x6C,0x4C,0x92,0x92,0x7C,0x80,

  };

  lcd_put_xyns(0,0,4,number+0*4); // 直接显示字符0

  lcd_put_xyns(4,0,4,number+1*4); // 直接显示字符1

  ……

  tmp=3421; // 以下代码显示变量tmp

  lcd_put_xyns(80,2,4,number+(tmp/1000)*4);

  lcd_put_xyns(84,2,4,number+(tmp/100%10)*4);

  lcd_put_xyns(88,2,4,number+(tmp/10%10)*4);

  lcd_put_xyns(92,2,4,number+(tmp%10)*4);

本文针对LCD特性,完成了波器显示必须的绘图驱动程序设计,这个教程定位给初学者使用,我立足从简单到复杂一步一步介绍设计过程,甚至是调试的过程,还包括一些经验总结,特别是提供了完整的keil 工程附件。希望读者立足示波器项目,学到更多软硬件设计经验技巧。

一、简易波器原理

波器基本原理可以简单理解为:数据采集+ 图形显示,该过程循环进行,如图1 所示。

图1 简易数字示波器流程图

图1 简易数字示波器流程图

  LCD 图形显示需要根据LCD 特性设计,不同LCD驱动程序不同,本篇将结合不带字库的LCD设计显示程序。

二、图形液晶LCD12864绘图驱动设计基础

  关于LCD 的硬件接口电路,在其他教程中有详细介绍,涉及单片机总线知识和CPLD 内部电路,需要认真学习,这里借助现成的驱动函数,重点讲解LCD绘图程序设计。

  LCD12864 的电路接口在头文件中定义:

  #define LCD_LCW XBYTE[0xf4ea]

  // 左屏命令写入

  #define LCD_LDW XBYTE[0xf5ea]

  // 左屏数据写入

  #define LCD_LCR XBYTE[0xf6ea]

  // 左屏命令读出

  #define LCD_LDR XBYTE[0xf7ea]

  // 左屏数据读出

  #define LCD_RCW XBYTE[0xf8ea]

  // 右屏命令写入

  #define LCD_RDW XBYTE[0xf9ea]

  // 右屏数据写入

  #define LCD_RCR XBYTE[0xfaea]

  // 右屏命令读出

  #define LCD_RDR XBYTE[0xfbea]

  // 右屏数据读出

  后面所有对LCD 的编程操作都是基于以上接口定义进行的各种读写操作。

  首先来看LCD12864 的点阵结构图,如图2 所示。

图2 LCD点阵分布结构图

图2 LCD点阵分布结构图



评论


相关推荐

技术专区

关闭