位置:51电子网 » 技术资料 » 显示光电

串行接口键盘显示面板的设计

发布时间:2007/8/24 0:00:00 访问次数:434

     面板是微机仪器的重要组成部分。面板主要包括显示器和键盘,通过面板对系统进行操作。一般的单片机控制仪表的面板均含有数码管、发光管和按键,本文的仪器面板就是针对这个领域而开发的。

    在仪器面板的设计中,键盘显示电路的设计一般采用三种方式,第一种为并行口动态扫描方式,该方式硬件简单、软件编程方便,与主板的信号连线多;第二种为串行口静态扫描方式,此方式使用串行芯片多,与主板的信号连线少;第三种为串行口动态扫描方式,此方式具有硬件简单、与主板信号连线少的优点,一般采用专用的串行口键盘显示芯片设计。考虑到专用芯片成本较高,我们用普通芯片设计了串行口动态扫描方式的仪器面板。
                      

     键盘显示电路如附图。两片74LS164扩展了2个并行口。第一片用作段码输出,接共阳数码管的段选位,同时也接发光管的阴极;第二片用作位选输出,通过三极管的驱动接数码管的共阳极,同时也驱动发光管的公共阳极,这样就实现了数码管和发光管显示的动态扫描。位选口也参与键盘的列扫描,作为按键检测的行引出。

    该面板的信号线共有3根。其中CLK为时钟脉冲信号,DAT为串行数据信号,KEY为键盘检测信号。另外还需提供5V电源线和地线。

    该面板的驱动程序主要实现将显示缓冲区disbuf[4]中的段码扫描输出到数码管,同时检测键盘,将按下按键的键码存在key单元中的功能。函数w164()用于将数据由模拟串口发送到74LS164的并口,而display()则通过调用w164()实现动态扫描显示,同时检测KEY得到按键的键码。该程序还提供数码管显示0~F的段码转换表,供用户使用。该程序已设计成头文件,在应用程序中可以直接调用,在用户程序中要对三个信号线进行定义,为它们分配I/O资源。

//skeydis.H文件
char lptr.Disbuf[4];
char key;
char code distab[16]= //段选码表
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,0x77,0x7c,0x39,0x5e,0x79,0x71};
void w164(char x) //串并转换

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

x=x<<1;DAT=CY;
CLK=0;CLK=1;


void display() //键盘显示扫描程序

char i;
char code disptr[4]= //位选码表
{0xfe,0xfd,0xfb,0xf7};
lptr=(lptr+1)%4; //移动扫描指针
w164(0xff);w164(0xff);//熄灭显示器
w164(disptr[LPTR]); //送位选码
w164(disbuf[LPTR]); //送段选码
if(!KEY)key=LPTR+1; //检测按键
//键码为12,3,4
}

     面板是微机仪器的重要组成部分。面板主要包括显示器和键盘,通过面板对系统进行操作。一般的单片机控制仪表的面板均含有数码管、发光管和按键,本文的仪器面板就是针对这个领域而开发的。

    在仪器面板的设计中,键盘显示电路的设计一般采用三种方式,第一种为并行口动态扫描方式,该方式硬件简单、软件编程方便,与主板的信号连线多;第二种为串行口静态扫描方式,此方式使用串行芯片多,与主板的信号连线少;第三种为串行口动态扫描方式,此方式具有硬件简单、与主板信号连线少的优点,一般采用专用的串行口键盘显示芯片设计。考虑到专用芯片成本较高,我们用普通芯片设计了串行口动态扫描方式的仪器面板。
                      

     键盘显示电路如附图。两片74LS164扩展了2个并行口。第一片用作段码输出,接共阳数码管的段选位,同时也接发光管的阴极;第二片用作位选输出,通过三极管的驱动接数码管的共阳极,同时也驱动发光管的公共阳极,这样就实现了数码管和发光管显示的动态扫描。位选口也参与键盘的列扫描,作为按键检测的行引出。

    该面板的信号线共有3根。其中CLK为时钟脉冲信号,DAT为串行数据信号,KEY为键盘检测信号。另外还需提供5V电源线和地线。

    该面板的驱动程序主要实现将显示缓冲区disbuf[4]中的段码扫描输出到数码管,同时检测键盘,将按下按键的键码存在key单元中的功能。函数w164()用于将数据由模拟串口发送到74LS164的并口,而display()则通过调用w164()实现动态扫描显示,同时检测KEY得到按键的键码。该程序还提供数码管显示0~F的段码转换表,供用户使用。该程序已设计成头文件,在应用程序中可以直接调用,在用户程序中要对三个信号线进行定义,为它们分配I/O资源。

//skeydis.H文件
char lptr.Disbuf[4];
char key;
char code distab[16]= //段选码表
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,0x77,0x7c,0x39,0x5e,0x79,0x71};
void w164(char x) //串并转换

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

x=x<<1;DAT=CY;
CLK=0;CLK=1;


void display() //键盘显示扫描程序

char i;
char code disptr[4]= //位选码表
{0xfe,0xfd,0xfb,0xf7};
lptr=(lptr+1)%4; //移动扫描指针
w164(0xff);w164(0xff);//熄灭显示器
w164(disptr[LPTR]); //送位选码
w164(disbuf[LPTR]); //送段选码
if(!KEY)key=LPTR+1; //检测按键
//键码为12,3,4
}

相关IC型号

热门点击

 

推荐技术资料

按钮与灯的互动实例
    现在赶快去看看这个目录卞有什么。FGA15N120AN... [详细]
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!