#1楼主:交差作业 之二——多文件系统数码管显示4(display.c)
文章发表于:2008-05-27 11:19
//--------------------------------------------------------
// 项目:
// 模块:显示处理
// 说明:
// 设计:程序匠人(版权所有,引用者请保留原作者姓名)
//--------------------------------------------------------
/*
版本说明:
display.c 2008-5-23 21:16
*/
//--------------------------------------------------------
//--------------------------------------------------------
//插入文件包
//--------------------------------------------------------
#include "common.h"
//--------------------------------------------------------
//--------------------------------------------------------
//说明:由于开液晶的人是个笨蛋,所以本项目的LCD中有3种不同的段码表分别是:
//A类代码:累计窗区域
//B类代码:小计窗区域
//C类代码:档位显示区域
//--------------------------------------------------------
//****************************
//字符笔画代码表:(A类代码)
// A
// -----
// F| G |B
// -----
// E| D |C
// -----
// ·H
//****************************
//段定义
#define sA_a ( 1 << 0 )
#define sA_b ( 1 << 1 )
#define sA_c ( 1 << 2 )
#define sA_d ( 1 << 3 )
#define sA_e ( 1 << 4 )
#define sA_f ( 1 << 5 )
#define sA_g ( 1 << 6 )
#define sA_h ( 1 << 7 )
//字符定义
#define SEGA_0 ~( sA_a + sA_b + sA_c + sA_d + sA_e + sA_f ) //'0'
#define SEGA_1 ~( sA_b + sA_c ) //'1'
#define SEGA_2 ~( sA_a + sA_b + sA_d + sA_e + sA_g ) //'2'
#define SEGA_3 ~( sA_a + sA_b + sA_c + sA_d + sA_g ) //'3'
#define SEGA_4 ~( sA_b + sA_c + sA_f + sA_g ) //'4'
#define SEGA_5 ~( sA_a + sA_c + sA_d + sA_f + sA_g ) //'5'
#define SEGA_6 ~( sA_a + sA_c + sA_d + sA_e + sA_f + sA_g ) //'6'
#define SEGA_7 ~( sA_a + sA_b + sA_c ) //'7'
#define SEGA_8 ~( sA_a + sA_b + sA_c + sA_d + sA_e + sA_f + sA_g ) //'8'
#define SEGA_9 ~( sA_a + sA_b + sA_c + sA_d + sA_f + sA_g ) //'9'
#define SEGA_A ~( sA_a + sA_b + sA_c + sA_e + sA_f + sA_g ) //'A'大写
#define SEGA_B ~( sA_a + sA_b + sA_c + sA_d + sA_e + sA_f + sA_g ) //'B'大写
#define SEGA_B_ ~( sA_a + sA_d + sA_e + sA_f + sA_g ) //'b'小写
#define SEGA_C ~( sA_a + sA_d + sA_e + sA_f ) //'C'大写
#define SEGA_C_ ~( sA_d + sA_e + sA_g ) //'c'小写
#define SEGA_D_ ~( sA_b + sA_c + sA_d + sA_e + sA_g ) //'d'小写
#define SEGA_E ~( sA_a + sA_d + sA_e + sA_f + sA_g ) //'E'大写
#define SEGA_F ~( sA_a + sA_e + sA_f + sA_g ) //'F'大写
#define SEGA_G ~( sA_a + sA_c + sA_d + sA_e + sA_f + sA_g ) //'G'大写
#define SEGA_G_ ~( sA_a + sA_b + sA_c + sA_d + sA_f + sA_g ) //'g'小写
#define SEGA_H ~( sA_b + sA_c + sA_e + sA_f + sA_g ) //'H'大写
#define SEGA_H_ ~( sA_c + sA_e + sA_f + sA_g ) //'h'小写
#define SEGA_I ~( sA_b + sA_c ) //'I'大写
#define SEGA_I_ ~( sA_c ) //'i'小写
#define SEGA_J ~( sA_b + sA_c + sA_d ) //'J'大写
#define SEGA_J_ ~( sA_c + sA_d ) //'j'小写
#define SEGA_K ~( sA_b + sA_d + sA_e + sA_f + sA_g ) //'K'大写
#define SEGA_L ~( sA_d + sA_e + sA_f ) //'L'大写
#define SEGA_M ~( sA_a + sA_c + sA_e + sA_g ) //'M'大写
#define SEGA_N ~( sA_a + sA_b + sA_c + sA_e + sA_f ) //'N'大写
#define SEGA_N_ ~( sA_c + sA_e + sA_g ) //'n'小写
#define SEGA_O ~( sA_a + sA_b + sA_c + sA_d + sA_e + sA_f ) //'O'大写
#define SEGA_O_ ~( sA_c + sA_d + sA_e + sA_g ) //'o'小写
#define SEGA_P ~( sA_a + sA_b + sA_e + sA_f + sA_g ) //'P'大写
#define SEGA_Q_ ~( sA_a + sA_b + sA_c + sA_f + sA_g ) //'q'小写
#define SEGA_R_ ~( sA_e + sA_g ) //'r'小写
#define SEGA_S ~( sA_a + sA_c + sA_d + sA_f + sA_g ) //'S'大写
#define SEGA_T_ ~( sA_d + sA_e + sA_f + sA_g ) //'t'小写
#define SEGA_U ~( sA_b + sA_c + sA_d + sA_e + sA_f ) //'U'大写
#define SEGA_U_ ~( sA_c + sA_d + sA_e ) //'u'小写
#define SEGA_V ~( sA_b + sA_c + sA_d + sA_e + sA_f ) //'V'大写
#define SEGA_V_ ~( sA_c + sA_d + sA_e ) //'v'小写
#define SEGA_W ~( sA_b + sA_d + sA_f + sA_g ) //'W'大写
#define SEGA_X ~( sA_b + sA_c + sA_e + sA_f + sA_g ) //'X'大写
#define SEGA_Y_ ~( sA_b + sA_c + sA_d + sA_f + sA_g ) //'y'小写
#define SEGA_Z ~( sA_a + sA_b + sA_d + sA_e + sA_g ) //'Z'大写
#define SEGA_O__ ~( sA_a + sA_b + sA_f + sA_g ) //'o'上半圈
#define SEGA_ ~( 0 ) //' '空格
#define SEGA__ ~( sA_d ) //'_'下划线
#define SEGA___ ~( sA_g ) //'-'中划线
#define SEGA____ ~( sA_a ) //'-'上划线
//****************************
//显示段码表(A类代码)
//****************************
tU08 LCD_TAB_A[]=
{ //代码 //地址
SEGA_0 , //0
SEGA_1 , //1
SEGA_2 , //2
SEGA_3 , //3
SEGA_4 , //4
SEGA_5 , //5
SEGA_6 , //6
SEGA_7 , //7
SEGA_8 , //8
SEGA_9 , //9
SEGA_A , //10
SEGA_B_ , //11
SEGA_C_ , //12
SEGA_D_ , //13
SEGA_E , //14
SEGA_F , //15
SEGA_G_ , //16
SEGA_H_ , //17
SEGA_I_ , //18
SEGA_J_ , //19
SEGA_K , //20
SEGA_L , //21
SEGA_M , //22
SEGA_N , //23
SEGA_O , //24
SEGA_P , //25
SEGA_Q_ , //26
SEGA_R_ , //27
SEGA_S , //28
SEGA_T_ , //29
SEGA_U , //30
SEGA_V , //31
SEGA_W , //32
SEGA_X , //33
SEGA_Y_ , //34
SEGA_Z , //35
SEGA_O__, //36
SEGA_ , //37
SEGA__ , //38
SEGA___ , //39
SEGA____ //40
};
//--------------------------------------------------------
//显示初始化
//出口: DISP_QUEUE[] =待显示字符队列(低位存放个位数据,依次类推)
//--------------------------------------------------------
void display_init(void)
{
DISP_QUEUE[0] = 1 ;
DISP_QUEUE[1] = 2 ;
DISP_QUEUE[2] = 3 ;
DISP_QUEUE[3] = 4 ;
}
//--------------------------------------------------------
//刷新显示缓冲区
//出口: DISP_QUEUE[] =待显示字符队列(低位存放个位数据,依次类推)
//--------------------------------------------------------
void new_display(void)
{
DISP_QUEUE[3] = 2 ; //2
DISP_QUEUE[2] = 1 ; //1
DISP_QUEUE[1] = 18 ; //I
DISP_QUEUE[0] = 12 ; //C
}
//--------------------------------------------------------
//显示扫描处理
//说明: 建议每1MS调用本模块一次,每次调用,刷新一位数码管显示
//入口: DISP_QUEUE[] =待显示字符队列(低位存放个位数据,依次类推)
// DISP_QUEUE_IP =待显示字符队列指针(位选指针,0=个位,1=十位,2=百位,3=千位)
//--------------------------------------------------------
void display(void)
{
//关位选信号(清除上次显示内容)
LED_COM_0 = LED_OFF ;
LED_COM_1 = LED_OFF ;
LED_COM_2 = LED_OFF ;
LED_COM_3 = LED_OFF ;
//送段选信号
LED_SEG = LCD_TAB_A[DISP_QUEUE[DISP_QUEUE_IP]] ;
//送位选信号
switch( DISP_QUEUE_IP )
{
case 0: //显示个位
LED_COM_0 = LED_ON ; //送位选信号;
break;
case 1: //显示十位
LED_COM_1 = LED_ON ; //送位选信号;
break;
case 2: //显示百位
LED_COM_2 = LED_ON ; //送位选信号;
break;
case 3: //显示千位
LED_COM_3 = LED_ON ; //送位选信号;
break;
default:
break;
}
//延时
delay(20) ; //说明: 如果是定时调用本程序,则可以不必软件延时
//位选指针+1
if ( ++DISP_QUEUE_IP > 3 ) DISP_QUEUE_IP=0 ; //位选指针+1,>3时,=0
}
//--------------------------------------------------------
//
// THE END
//
// 版权所有:程序匠人(引用者请保留原作者姓名)
//
//--------------------------------------------------------