新闻中心

EEPW首页 > 光电显示 > 设计应用 > 基于单片机的LED显示屏硬件设计方案

基于单片机的LED显示屏硬件设计方案

作者: 时间:2012-03-06 来源:网络 收藏

3 总体

3.1 屏体接口模块

屏体接口包括屏体接口头文件、屏幕缓冲区的定义、屏体接口初始化、刷新定时器中断服务程序和SPI中断服务程序几个部分。

屏体接口的头文件screen.h 应该使屏幕缓冲区对其他应用可见, 并提供屏体初始化函数。具体定义如下:

  #ifndef _SCREEN_H_

  #define _SCREEN_H_

  #include incboard.h

  extern u8 xdata SCR_BUF[16][16];

  void screen_init(void);

  #endif

这样就把屏幕缓冲区的结构暴露给应用, 但应用不必关心具体的屏幕刷新操作。

具体屏体接口的实现集中在一个文件screen.c 中定义。具体如下:

首先是屏幕缓冲区定义:

u8 xdata SCR_BUF[16][16]_at_0x0000;//~0x00ff 256Bytes其次是当前显示行和输出列变量定义, 属于静态变量, 应用程序不可见。

static u8 data row,col;

然后是屏幕初始化, 包括刷新定时器0 的初始化、SPI 的初始化、锁存bLatch 信号的初始化、屏幕缓冲区的初始清零以及定时器和SPI 中断的优先权和使能位的初始化代码略。

SPI 和定时器0 的中断服务程序是屏体接口的关键。

定时器0 的中断服务程序首先进行扫描行增量取模运算,并将扫描行输出。然后依据扫描行取出屏幕缓冲区对应行的第一个字节发送到SPI 端口。同时列增量。

  void display_ONe_screen(void)interrupt 1 using 3{

  row = (++row)0x0f;

  P0 = (P0 0xf0)|((~row) 0xf);

  col = 0;SPDAT = ~SCR_BUF[row][col++];

  }

这样编写的屏体驱动, 应用只要在初始化屏体后,向屏幕缓冲区中写入要显示的数据即可, 而不必关心屏幕显示的细节。

3.2 UART 接口

UART 接口负责与上位机的数据收发, 尽管发送可以同步进行, 但接收必须异步进行。因而UART 接口的核心仍然应该是一个中断服务程序。

UART 接口的头文件uart.h 隐藏了接收缓冲区的信息, 用户可调用的函数只有初始化、发送和接收。

  #ifndef _UART_H_

  #define _UART_H_

  void uart_init(void);

  void uart_put_c(u8 ch);

  u8 uart_get_c(u8 *);

  #endif

UART 的接口实现首先定义一个接收缓冲FIFO, 以及对FIFO 的读下标uart_rd 和写下标uart_wr, 他们都是文件内可见的静态变量:

  static u8 xdata uart_buf[64];

  static u8 uart_rd,uart_wr;

  bit fSend

UART 的初始化包括进行FIFO 的初始化和UART格式、波特率、中断的初始化。代码略。

UART 的ISR 主要是服务于接收, 无条件地将数据装入FIFO, 并调整写入指针。

  static void uart_isr(void)interrupt 4 using 1{

  if(RI){RI = 0;

  uart_buf[uart_wr++] = SBUF;

  uart_wr = 0x0f;

  }

  }

提供给用户的发送程序首先检测发送结束标记, 如果为0, 表示上次发送尚未结束, 直接返回错误信息1。



评论


相关推荐

技术专区

关闭