8279控制键盘与显示实验.docx

上传人:b****5 文档编号:7881413 上传时间:2023-01-26 格式:DOCX 页数:14 大小:685.50KB
下载 相关 举报
8279控制键盘与显示实验.docx_第1页
第1页 / 共14页
8279控制键盘与显示实验.docx_第2页
第2页 / 共14页
8279控制键盘与显示实验.docx_第3页
第3页 / 共14页
8279控制键盘与显示实验.docx_第4页
第4页 / 共14页
8279控制键盘与显示实验.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

8279控制键盘与显示实验.docx

《8279控制键盘与显示实验.docx》由会员分享,可在线阅读,更多相关《8279控制键盘与显示实验.docx(14页珍藏版)》请在冰豆网上搜索。

8279控制键盘与显示实验.docx

8279控制键盘与显示实验

中国地质大学长城学院

电气工程及其自动化课程设计

 

题目单片机原理与应用课程设计

(8279控制键盘与显示实验)

 

系别信息工程系

学生姓名

专业电气工程及其自动化

学号*****

指导教师

职称讲师

 

2012年6月19日

摘要

8279芯片是Intel公司生产的通用可编程键盘和显示器I/O接口芯片。

利用8279.可实现对键盘/显示器的自动扫描,并识别键盘上闭合键的键号,这样可以大大节省CPU对键盘/显示器的操作时间,从而减轻CPU的负担,而且显示稳定,程序简单,不会出现错误操作。

8279芯片还可以直接和单片机连接,使用它可简化系统的软件设计,提高CPU的工作效率,在工程设计中日益被设计者采用。

本设计中需要掌握在51系统中扩展8279键盘显示接口方法,并且掌握8279的工作原理和编程方法。

关键词:

8279芯片键盘控制八位逻辑数码管显示

1.8279键盘显示

1.1实验准备

电子设计竞赛实训平台:

(1)单片机核心板

(2)键盘和数码管显示模块

(3)通用转接板

(4)串口线(两端均为DB9母孔);

1.2实验内容

本实验的主要内容是实现用单片机控制6段数码管、4×4矩阵键盘。

程序功能如下:

(1)实现单片机驱动键盘和数码管显示模块上的芯片8279,按下按键S1时,数码管循环显示“000000”到“999999”,每按一下加“111111”;

(2)按下按键S2时,数码管循环显示“999999”到“00000000”,每按一下减“11111111”;按下按键S3时,数码管显示“012345”

(3)按下按键S4时,数码管显示“543210”;

2.8279的内部功能模块

2.1公用模块

数据缓冲器是双向缓冲器,连接内、外总线,用于传送CPU和8279之间的命令或数据;

I/O控制线是CPU对8279进行控制的引线。

CS是8279的片选信号,CS=0时,8279才被允许读出或写入信息。

WR、RD为来自CPU的控制信号。

A0用于区别信息特性:

A0=1时,表示数据缓冲器输入为指令、输出为状态字;A=0时,输入、输出皆为数据。

2.2键盘功能模块

回复缓冲器、键盘去抖及控制来自RL0~RL3的8根回复线的回复信号,由回复缓冲器缓冲并锁存。

在键盘工作方式中,回复线作为行列式键盘的行列输入线。

在逐行列输入时,在逐行列扫描时,回复线用来搜索每一行列中闭合的键。

当某一键闭合时,去抖电路被置位,延时等待10ms后,再检验该键是否继续闭和,并将该键的地址和附加的移位、控制状态一起形成键盘数据被送入8279内部FIFO(先进先出)存储器。

键盘数据格式如下:

D7D6D5D4D3D2D1D0

控制

移位

扫描

回复

控制和移位(D6、D7)的状态由两个独立的附加开关决定,而扫描(D5、D4、D3)和回复(D2、D1、D0)则是被按键置位的数据。

D5、D4、D3来自动扫描计数器,是按下键的行列编码,而(D7D7D7)则来自行/列计数器,它们是根据回复信号而确定的行/列编码。

在传感器开关状态矩阵方式中,回复线的内容直接被送往和相应的传感器RAM(即FIFO存储器)。

在选通输入方式中,回复线的内容在CNTL/STB线的脉冲上升沿被送入FIFO存储器。

2.3显示功能模块

显示RAM用来存储显示数据。

容量为16×8位。

在显示过程中,存储的显示数据轮流从显示寄存器输出。

显示寄存器分别为A、B两组,OUTA0~3和OUTB0~3可以单独送数,也可以组成一个8位的字。

显示寄存器的输出与显示扫描配合,不断从显示RAM中读出显示数据,同时轮流驱动被选中的显示器件,以达到多路复用的目的,使显示器件呈现稳定的显示状态。

显示地址寄存器用来寄存由CPU进行读/写显示RAM的地址,它可以由命令设定,也可以设置成每次读写或写入之后自动递减。

3.8297芯片管脚引线功能及原理图

3.1引线管脚功能

介绍如下:

D0~D7(数据总线):

双向、三态总线,和系统数据总线相连;用于CPU和8279间的数据/命令传递。

CLK(系统时钟):

输入线,为8279提供内部时钟的输入端。

RESET(复位):

输入线,当RESET=1时,8279复位,其复位状态为:

A0(数据选择):

输入线。

当A0=1时CPU写入数据为命令字,读出数据为状态字;A0=0时CPU读、写的字节均为数据。

RD、WR(读、写信号):

输入线。

低电平有效,来自CPU的控制信号,控制8279的读、写操作。

IRQ(中断请求):

输出线。

高电平有效。

在键盘工作方式中,当FIFO/传感器RAM存有数据时,IRQ为高电平。

CPU每次从RAM中读出数据时,IRQ变为低电平。

若RAM中仍有数据,则IRQ再次恢复高电平。

在传感器工作方式中,每当检测到传感器状态变化时,IRQ就出现高电平。

SL0~SL3(扫描线):

输出线。

用来扫描键盘和显示器。

它们可以编程设定为编码(4中取1)或译码输出(16取1)。

RL0~RL7(回复线):

输入线。

它们是键盘矩阵或传感矩阵的列(或行)信号输入线。

SHIFT(移位信号):

输入线、高电平有效。

该输入信号是键盘数据的最高位(D7),通常用来扩充键开关的功能,作为控制功能键用。

在选通输入方式时,该信号的上升沿可将来自RL0~RL7的数据存入FIFORAM中。

在传感器输入下,该信号无效。

OUTA0~OUTA3(A组显示信号):

输出线。

OUTB0~OUTB3(B组显示信号):

输出线。

这两组引线都是显示数据输出线,与多位数字显示的扫描线SL0~SL3同步,两组可以独立使用,也可以合并使用。

BD(显示消隐):

输出线。

低电平有效。

该信号在数字切换显示或使用消隐命令时,将显示消隐。

3.2电路图

4.流程图及源程序

4.1流程图

 

4.2源程序

#include

#include

#include

//--------------8279端口定义--------------

#definecomXBYTE[0X0001]//命令字地址

#definedatXBYTE[0X0000]//数据口地址

unsignedlongdatatemp_r;//频率值预存

sfrAUXR=0x8e;

bitint_flag=0;/*中断标志位*/

sbitclflag=ACC^7;//ma步进值下标

unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管段码

unsignedchari,temp;//temp用于存放临时命令状态字

unsignedcharkey_value;//按键值

//-----------------------主要函数--------------------------

unsignedcharkeyin(void);//按键函数

voidsetup_8279(void);//8279初始化

voiddisplay_led(void);//数码管显示

voiddelay(unsignedlongi);//延时

voidserial_init(void);//串口初始化函数,用于调试

voidmode(void);

unsignedchara,b,k,num;

voidf1(void);//f1~f8写您所需要的功能函数,通过按键触发

voidf2(void);

voidf3(void);

voidf4(void);

voidf5(void);

voidf6(void);

voidf7(void);

voidf8(void);

//-------------------------主函数--------------------------------

voidmain(void)

{

AUXR=0x02;/*STC单片机关内部RAM和开ALE*/

IE=0;

EA=0;

EX0=1;//开外部中断

IT0=0;

//-----------延时(必须加)-------------

for(a=0;a<5;a++)

{

for(b=0;b<50;b++)

{

for(k=0;k<50;k++);}

//------------------------------------

serial_init();//96008-N-1

setup_8279();

EA=1;//初始化

delay(1000);

while

(1)

{

mode();

//delay(1000);

}

//------数码管显示----------------

voiddisplay_led(void)

{

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

{com=0x80+i;//写显示RAM,p301

dat=dispcode[num];//显示段码

delay(120);

}

}

//-----8279初始化-----------------

voidsetup_8279(void)

{

com=0x00;//键盘,显示方式,8个位字符显示,左端输入;编码扫描键盘,-key锁存

com=0x21;//2分频

com=0xd1;//11010001b清除所有显示

temp=com;//读状态字,p304

do{ACC=com;}

while(clflag==1);//清除起来比较慢,所以一条指令执行的时间不足以完成所有清除,故需等待

}

//-------------------步进按键or模式选择---------------

voidmode(void)

{

if(int_flag==1)//如果按键触发中断,int_flag=1

{

EX0=0;//在执行中断程序时,关中断暂停其他中断

int_flag=0;//清除中断标志位

key_value=keyin();

//delay(2000);

switch(key_value)//判断键值

{

case0x40:

f1();break;

case0x41:

f2();break;

case0x42:

f3();break;

case0x43:

f4();break;

case0x48:

f5();break;

case0x49:

f6();break;

case0x4a:

f7();break;

case0x4b:

f8();break;

default:

break;

}

EX0=1;

}

}

//-----------按键读取------------------------------------------

unsignedcharkeyin(void)

{

unsignedcharvalue;

com=0x40;//发送读取指令

value=dat;

value=value&0x7f;//取键盘数据低位

return(value);

}

voidint_int0()interrupt0using0//外部中断函数

{

int_flag=1;//置中断标志位

//EX0=0;

//key_value=keyin();

//SBUF=TCON;

//while(TI==0);

//TI=0;

}voiddelay(unsignedlongi)

{

while(--i);

}

voidserial_init(void)//串口初始化函数bund:

8-N-1

{

TMOD=0x20;

TL1=0xfd;

TH1=0xfd;

TR1=1;

}

voidf1(void)

{

num=num+1;

if(num>9)

num=0;

display_led();

SBUF=key_value;

}

voidf2(void)

{

num=num-1;

if(num==255)

num=9;

display_led();

SBUF=key_value;

}

voidf3(void)

{

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

{com=0x80+i;//写显示RAM,p301

dat=dispcode[i];//显示段码

delay(120);

}

SBUF=key_value;

}voidf4(void)for(i=0;i<8;i++)

{com=0x80+i;//写显示RAM,p301

dat=dispcode[(7-i)];//显示段码

delay(120);

}

SBUF=key_value;

5.工作过程及实验步骤

5.1工作过程

8279芯片的最大特点是能自身提供扫描信号,代替CPU管理和显示器。

8279芯片的工作在相应的命令字的控制下进行,在程序中向芯片传送命令字称为对8279芯片的初始化。

8279芯片初始化后,键盘的行值经TL0-RL3进入8279芯片并缓冲锁存。

芯片的内部逻辑部件对它进行扫描坚持,以查找此时选中的列内被按下的键。

如果检测到某键的键阵中的位置号、换挡键和控制键的状态送入8279芯片的FIFORAM之中。

每按一次键遍送入一次,FIFORAM最多可存放8个字符。

在检测到某键被按下时,8279芯片的中断请求线变为高电平,同时FIFO状态字改变以反映存放在FIFO中的字符数。

当CPU读入一个数据后,IRQ变为低电平,若FIFORAM中仍有数据,则IRQ再次变高,如此反复,直至FIFORAM变空为止。

OUTAO-OUTA3和OUTBO-OUTB3为显示器的段选代码输出,经驱动器送至共阴LED的各段。

对呀LED而言,OUTA3为最高位,OUTB0为最低位。

SL0-SL2为位选输出,经译码器驱动后送至各位LED。

当需要显示某数字时,只需向8279芯片写入显示命令后再向数据口输出显示代码便可。

5.2实验步骤

1.启动KeiluVision3软件

2.创建工程

在KeiluVision3主界面下,主菜单下选择Project->NewProject启动工程建立向导。

指定工程存储路径后,进入目标器件选择界面如图1-3所示。

选择目标器件后,点击“确认”,弹出对话框提示是否拷贝STARTUP.A51文件,点击“是”。

一个工程至少包含一个源文件,可在此时建立新的源文件,也可以导入已有的源文件。

在SourceGroup1上单击鼠标右键,单击“AddFileTo‘SourceGroup1’”,在弹出的对话框中寻找源文件“8279-display.C”,单击ADD按钮加入文件到工程中,加入完成后单击Close按钮关闭对话框。

点击工具栏的optionsoftarget,在弹出的对话框中,选择output选项卡,勾选createHEXFile,使得工程能够输出烧写进单片机的文件。

点击确认保存选项。

依次点击编译、连接、重新编译连接按钮,编译、连接程序。

如果有错误会在下面的输出区域显示。

调整程序直到没有错误和警告发生。

3.打开下载软件STC_ISP_V486.exe,选择单片机类型STC89C58RD+,打开要下载的程序文件,选择下载用的串口编号,将串口线一段连接在电脑上,另一端接到单片机核心

板的串口上,点击下载,根据最下面指示框的说明进行操作。

6.个人总结

本次设计是四人一组,实验设计中,能够感受到若是光靠自己的能力,是不能够完成这次设计的。

自己分析原因:

其一,没有对单片机了解不够详细,知识面欠缺。

其二,自己做的许多过程有差误,不说自己到头来能否发现,即使发现,时间耽误太多了,自己过于粗心马虎。

正是因为我们是团体合作,有异议提出来,将错误及时解决,避免了很多设计的复杂性。

当然,这次设计,其他的同学也提供了不少援助,当然,老师为我们课程设计的成功提供了很重要的帮助。

有一些我们没有了解透彻的知识,求得老师支援。

设计的成功很让我庆幸的是,我们这个四人的团队还是第一次合作,竟然能过如此的和谐,人人都能为实验设计提供必要的技术支持,相互配合也是相当的默契。

再次感谢我的老师,感谢我的合作伙伴,当然,这次的实验设计也看到自己的不足,以后自己会更加努力的学习,相信自己以后会越来越棒。

 

中国地质大学长城学院课程设计成绩评定表

学生姓名

学号

043

班级

09级

指导教师

职称

高级工程师

单位

课程设计题目:

8279控制键盘与显示实验

课程设计内容提要

本实验的主要内容是实现用单片机控制7段数码管、4×4矩阵键盘。

程序功能如下:

(1)实现单片机驱动键盘和数码管显示模块上的芯片8279,按下按键S1时,数码管循环显示“00000000”到“99999999”,每按一下加“11111111”;

(2)按下按键S2时,数码管循环显示“99999999”到“00000000”,每按一下减“11111111”;按下按键S3时,数码管显示“01234567”;

(3)按下按键S4时,数码管显示“76543210”;

评语

总成绩

指导老师

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1