8279控制键盘与显示实验.docx
- 文档编号:7881413
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:14
- 大小:685.50KB
8279控制键盘与显示实验.docx
《8279控制键盘与显示实验.docx》由会员分享,可在线阅读,更多相关《8279控制键盘与显示实验.docx(14页珍藏版)》请在冰豆网上搜索。
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”;
评语
总成绩
指导老师
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 8279 控制 键盘 显示 实验