微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > 基于ARM S3C44B0X的LED显示屏设计

基于ARM S3C44B0X的LED显示屏设计

时间:10-07 来源: 点击:

时即被打入锁存器从而避免锁存打入操作,OE 信号输入端接直流电源正极使得一旦行显示数据出现在锁存器的同时各输出引脚即呈现出相应的高低电平状态。因此,需要点亮某一行时,需要执行以下几个步骤:

  (1) 将15 位行显示数据通过D、CP 信号依次送入到两片级联的HEF4094 中,最后一次移位在第三步完成。

  (2) 将64 位列显示数据通过SER、SRCL K信号依次送入到8 片级联的74HC595 中。

  (3) 发出列显示的锁存打入信号RCL K,把列显数据打到各595 的输出引脚上,完成列显示的准备工作,同时由于行移位信号CP 与RCL K共用一根信号线,行显示数据完成最后一次移位,完成行显示准备工作。

  (4) 行列数据都准备完毕,显示屏中被选中的那一行被点亮。

  (5) 延时几毫秒保证每一行有充分的点亮时间然后进行下一行的显示。

  按照以上步骤依次点亮16 行,即可让L ED屏显示需要的图文内容。

4 、L ED 显示屏的软件设计

HEF4094 和74HC595 都是串入并出移位寄存器,显然应用串行口驱动,但是S3C44B0X 的串口资源有限,还要用来与上位机进行通信;因此采用将并行的I/ O 口模拟成串行口的方法来解决。

  这样仅需要4 个并行I/ O 口就可以完成显示任务,在程序中使用PORTD0 到PORTD3 这4 个I/ O 口,PORTD 由8 个I/ O 端口组成。

  下面是已经在Hitool For ARM 编译环境中通过的在16 行×64 列点阵L ED 显示屏上显示4个汉字的程序,该程序用C 语言编写,稍做修改就可以用于各种单片机系统。

  首先将要显示的4 个16 ×16 点阵的汉字字模存储在数组zimo[128 ]中。

  主程序代码如下:

  void Send-Char (void)

  {  unsigned short Row-Data = 0 ×8 000 ;int k ;

  for ( k = 0 ; k < 128 ; k + = 8)

  {   ∥调用发送行显示数据子函数

  Send-Row-Data (Row-Data) ;

  int j ;

  ∥依次取0~7 ,8~16 等数组元素

  for ( j = 0 ; j < 8 ; j + + )∥调用发送列显示数据子函数

  Send-Line-Data (zimo [ j + k ]) ;∥对PORTD3 清零置位发送列显示的锁存打入信号

  rPDATD = rPDATD &0 ×fb ;rPDATD = rPDATD | 0 ×04 ;∥延时几毫秒保证该行的点亮时间

  Delay (6) ;∥行选数据移位准备发送下一行数Send-Data m = 1 ;}

  }

  行显示数据发送子程序代码如下:

  void Send-Row-Data (unsigned short y){

  int m = 0 ;∥发送行显示数据

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

  {

  if (y &1)∥如果显示该行则对PORTD0 置1 否则置

  0rPDATD = rPDATD | 0 ×01 ;elserPDATD = rPDATD &0 ×fe ;∥行显示数据移位准备发送下一位

  y >> = 1 ;∥只移位15 次

  if ( m < 15){   ∥对PORTD3 清零置位发送行显示数据移位时钟脉冲

  rPDATD = rPDATD &0 ×f7 ;rPDATD = rPDATD | 0 ×08 ;}

  }

  }

  列显示数据发送子程序代码如下:

  void Send-Line-Data (unsigned char x){

  int i ;∥发送列显示数据

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

  if ( x &1)∥如果该列需点亮则PORTD1置0 否则置

  1rPDATD = rPDATD &0 ×fd ;elserPDATD = rPDATD | 0 ×02 ;∥列显示数据移位准备发送下一位

  x >> = 1 ;∥对PORTD2 清零置位发送列显示数据移位时钟脉冲

  rPDATD = rPDATD &0 ×fb ;rPDATD = rPDATD | 0 ×04 ;}

  }

  延时子程序代码如下,LoopCount 的数值可根据所选用的单片机时钟频率来设定。

  void Delay (int time){

  int LoopCount = 300 ;

  for ( ; time > 0 ; time22)

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

  }

  5、结束语

  这种设计方案大大节省了单片机的端口资源,有效简化了显示屏的电路结构,提高了整个显示系统的可靠性,根据这个设计原理可设计出各种规模的LED显示屏。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top