8279键盘显示C程序
- 格式:docx
- 大小:9.51 KB
- 文档页数:4
1.8279功能介绍图3.1 8279 引脚图 8279是可编程的键盘、显示接口芯片。
它既具有按键处理功能,又具有自动显示功能,在单片机系统中应用很广泛。
8279内部有键盘FIFO (先进先出堆栈)/传感器,双重功能的8*8=64BRAM,键盘控制部分可控制8*8=64个按键或8*8阵列方式的传感器。
该芯片能自动消抖并具有双键锁定保护功能。
显示RAM容量为16*8,即显示器最大配置可达16位LED 数码显示。
(1)数据线DB0→DB7是双向三态数据总线,在接口电路中与系统数据总线相连,用以传送CPU 和8279之间的数据和命令。
(2)地址线/CS=0选中8279,当A0=1时,为命令字及状态字地址;当A0=0时,为片内数据地址,故8279芯片占用2个端口地址。
(3)控制线CLK:8279的时钟输入线。
IRQ:中断请求输出线,高电平有效。
/RD、/WR:读、写输入控制线。
SL0---SL3:扫描输出线,用来作为扫描键盘和显示的代码输出或直接输出线。
RL0---RL7:回复输入线,它们是键盘或传感器矩阵的信号输入线。
SHIFT:来自外部键盘或传感器矩阵的输入信号,它是8279键盘数据的次高位即D6位的状态,该位状态控制键盘上/下档功能。
在传感器方式和选通方式中,该引脚无用。
CNTL/S:控制/选通输入线,高电平有效。
键盘方式时,键盘数据最高位(D7)的信号输入到该引脚,以扩充键功能;选通方式时,当该引脚信号上升沿到时,把RL0---RL7的数据存入FIFO RAM 中。
OUTA0---OUTA3:通常作为显示信号的高4位输出线。
OUTB0---OUTB3:通常作为显示信号的低4位输出线。
/BD:显示熄灭输出线,低电平有效。
当/BD=0时将显示全熄灭。
2. 8279的工作方式8279有三种工作方式:键盘方式、显示方式和传感器方式。
(1) 键盘工作方式8279在键盘工作方式时,可设置为双键互锁方式和N 键循回方式。
8279键盘和显示程序#include<at89c52.h>#include<absacc.h>#include<stdio.h>#define COM8279 XBYTE [0xF2FF] //定义8279控制口#define DATA8279 XBYTE [0xF0FF] //定义8279数据口#define uchar unsigned char#define uint unsigned intuint keyval //定义键内码传递参数uint time //定义延时参数void delay(uint time)void key(void)void main(){delay(1300) //开机延时COM8279 = 0xD2 //清除RAM和FIFO delay(1)EA=1EX1=1 //开总中断,开外部中断1;IT1=1 //外部中断1选用下降沿COM8279=0x03 //8279键盘N键巡回,编码扫描,左端入口COM8279=0x2a //时钟分频设置,分频数为10COM8279=0x70 //设置读显示命令COM8279=0x90; //设置写显示命令while(1)}void delay (uint time) //传递参数为time{uchar jwhile (time--) //用time-1来进行循环{for (j=100;j>0;j--) //用j来进行125次循环,大约8us }}}void intsvr1(void) interrupt 2 using 1{keyval=DATA8279key()}//按键确认程序void key(void){switch(keyval){case 0xC3: //0号键赋值{P0=0x3F;DATA8279=P0;break;}case 0xC2: //1号键赋值;{P0=0x06;DATA8279=P0;break;}case 0xC1: //2号键赋值;{P0=0x5B;DATA8279=P0;break;}case 0xc0: //3号键赋值;{P0=0x4F;DATA8279=P0;break;}case 0xCB: //4号键赋值;{P0=0x66;DATA8279=P0;break;}case 0xCC: //5号键赋值;{P0=0x6D;DATA8279=P0;break;}case 0xC9: //6号键赋值;{P0=0x7D;DATA8279=P0;break;}case 0xC8: //7号键赋值;{P0=0x07;DATA8279=P0;break;}case 0xD3: //8号键赋值;{P0=0x7F;DATA8279=P0;break;}case 0xD2: //9号键赋值;{P0=0x6F;DATA8279=P0;break;}case 0xD1: //A号键赋值;{P0=0x77;DATA8279=P0;break;}case 0xD0: //B号键赋值;{P0=0x7C;DATA8279=P0;break;}case 0xE3: //C号键赋值;{P0=0x39;DATA8279=P0;break;}case 0xE1: //D号键赋值;{P0=0x5E;DATA8279=P0;break;}case 0xE2: //E号键赋值;{P0=0x79;DATA8279=P0;break;}case 0xE0: //F号键赋值;{P0=0x71;DATA8279=P0;break;}default:break;}}。
8279A可编程键盘显示接口实验内容一、实验目的学习8279A与微机8088系统的接口方法,了解8279A用在译码扫描和编码扫描方式时的编程方法,以及8088CPU用查询方式和中断方式对8279A进行控制的编程方法。
二、实验原理如图所示,系统中8279A接口芯片及其相关电路完成键盘扫描和显示,本实验以查询方式获取键盘状态信息,读取键值。
键值转换成显示代码供显示。
根据原理图5-20,得到键值和键名的对照表5-5,显示值和显示代码对照表。
三、实验程序清单见随机光盘,文件名为H8279.ASM四、实验步骤运行实验程序在DVCC-8086JHN上显示"8279-1"在系统键盘上输入数字键,在系统显示器上显示相应数字,按EXEC键显示"8279 good",按其它键不予理睬。
源程序:CODE SEGMENTASSUME CS:CODESTART: JMP KEYLEDCONTPORT EQU 00DFHDA TAPORT EQU 00DEHDA TA1 EQU 0500HDA TA2 EQU 0508HDA TA3 EQU 0510HDA TA4 EQU 0518HDA TA5 EQU 0580HKEYLED: CALL FORMATCLDMOV DI,DATA5MOV CX,08HXOR AX,AXREP STOSBMOV SI,DATA2CALL LEDDISP ;DISP 8279-1MOV BYTE PTR DS:[0601H],00HKEY0: MOV DX,CONTPORTIN AL,DXTEST AL,07HJZ KEY0MOV CX,0FFFHDELAY1: LOOP DELAY1MOV DX,CONTPORTMOV AL,40HOUT DX,ALMOV DX,DATAPORTIN AL,DXMOV DI,AX ;AND AL,0F0HJZ KEY1MOV AX,DI ;CMP AL,10HJNZ KEY0MOV SI,DATA3CALL LEDDISPKEYEND: JMP KEYENDKEY1: CALL CONVERSMOV SI,DATA5CALL LEDDISPDJMP KEY0CONVERS:MOV BH,0HMOV AX,DIAND AL,0FHMOV BL,ALMOV AL,CS:[BX+DATA4]MOV Bl,DS:[0601H]MOV BH,0HMOV BYTE PTR DS:[BX+DA TA5],ALINC BXMOV DS:[0601H],BXCMP BX,08HJZ SA VE0RETSA VE0: MOV BYTE PTR DS:[0601H],0H RETLEDDISP:MOV AL,90HMOV DX,CONTPORTOUT DX,ALMOV BYTE PTR DS:[0600H],00LED1: CMP BYTE PTR DS:[0600H],07H JA LED2MOV BL,DS:[0600H]MOV BH,0HMOV AL,CS:[BX+SI]MOV DX,DATAPORTOUT DX,ALADD BYTE PTR DS:[0600H],01HJNZ LED1LED2: RETLEDDISPD:MOV AL,90HMOV DX,CONTPORTOUT DX,ALMOV BYTE PTR DS:[0600H],00LEDD1: CMP BYTE PTR DS:[0600H],07H JA LEDD2MOV BL,DS:[0600H]MOV BH,0HMOV AL,DS:[BX+SI]MOV DX,DATAPORTOUT DX,ALADD BYTE PTR DS:[0600H],01HJNZ LEDD1LEDD2: RETFORMAT: MOV BX,0MOV WORD PTR DS:[BX+0500H],5050HADD BX,2MOV WORD PTR DS:[BX+0500H],0079HADD BX,2MOV WORD PTR DS:[BX+0500H],0000HADD BX,2MOV WORD PTR DS:[BX+0500H],0000HADD BX,2MOV WORD PTR DS:[BX+0500H],4006HADD BX,2MOV WORD PTR DS:[BX+0500H],4040HADD BX,2MOV WORD PTR DS:[BX+0500H],076FHADD BX,2MOV WORD PTR DS:[BX+0500H],7F5BH ADD BX,2MOV WORD PTR DS:[BX+0500H],3F5EHADD BX,2MOV WORD PTR DS:[BX+0500H],3F5CH ADD BX,2MOV WORD PTR DS:[BX+0500H],076FHADD BX,2MOV WORD PTR DS:[BX+0500H],7F5BH ADD BX,2MOV WORD PTR DS:[BX+0500H],063FHADD BX,2MOV WORD PTR DS:[BX+0500H],4F5BH ADD BX,2MOV WORD PTR DS:[BX+0500H],6D66H ADD BX,2MOV WORD PTR DS:[BX+0500H],077DH ADD BX,2MOV WORD PTR DS:[BX+0500H],6F7FHADD BX,2MOV WORD PTR DS:[BX+0500H],7C77HADD BX,2MOV WORD PTR DS:[BX+0500H],5E39HADD BX,2MOV WORD PTR DS:[BX+0500H],7179HRETCODE ENDSEND START。
实验5键盘显示控制器8279应用实验实验五键盘显示控制器 9 8279 应用实验一、实验目的 1、掌握 51 系统中,扩展 8279 键盘显示接口的方法。
2、掌握 8279 工作原理和编程方法。
二、预备知识 8279A 是一种通用的可编程键盘/显示器接口器件,可对 64 个开关矩阵组成的键盘进行自动扫描,接收键盘上的输入信息,存入内部的 FIFO 存放器,并在有键输入时,CPU 请求中断。
8279A 内部还有一个 16×8 的显示缓冲器,能对 8 位或 16 位 LED 自动扫描,使显示缓冲器的内容在 LED 上显示出来。
1 1 、引脚功能 DB0~DB7:双向数据总线,以便和 CPU 之间传递命令、数据和状态。
CLK :时钟输入线,以产生内部时钟。
RESET :复位线,高电平有效。
复位后,8279A 置为 16 位显示左边输入,编码扫描键盘,时钟系数为 31。
/CS :片选,低电平有效。
A0 :地址输入线,用以区分数据线传送的是数据还是命令。
A0=0 传送的是数据;A0=1传送的是命令。
/RD :读线,低有效,内部缓冲器信息送 DB0~DB7。
/WR :写线,低有效。
收数据总线上的信息写入内部缓冲区。
IRQ :中断请求输出线,高有效。
当 FIFO RAM 中有键输入数据时,IRQ 升为高电平,向 CPU 请求中断。
CPU 读出 FIFO RAM 时,IRQ 变为低电平,假设 RAM 中数据还有,IRQ 又返回高电平,直至RAM 中为空,IRQ 才保持低电平。
SL0~SL3 :输出扫描线,用以对键盘/传感器矩阵和显示器进行扫描。
RL0~RL7 :键盘/传感器矩阵的行(列)数据输入线。
其内部有拉高电阻,使之保持高电平。
SHIFT :换档输入线,内部有拉高电阻,使之保持高电平。
TL/STB:控制/选通输入线,内部有拉高电阻,使之保持高电平。
OUTA0~OUTA3:四位输出口。
OUTB0~ OUTB3:四位输出口。
6.4 可编程键盘/显示器接口——Intel 8279Intel 8279是一种可编程键盘/显示器接口芯片,它含有键盘输入和显示器输出两种功能。
键盘输入时,它提供自动扫描,能与按键或传感器组成的矩阵相连,接收输入信息,它能自动消除开关抖动并能对多键同时按下提供保护。
显示输出时,它有一个16×8位显示RAM,其内容通过自动扫描,可由8位或16位LED数码管显示。
1.8279的内部结构和工作原理8279的内部结构框图如图6.28所示。
下面分别介绍电路各部分的工作原理。
1) I/O控制及数据缓冲器数据缓冲器是双向缓冲器,连接内外总线,用于传送CPU和8279之间的命令或数据,对应的引脚为数据总线D0~D7。
I/O控制线是CPU对8279进行控制的引线,对应的引脚为数据选择线A0、片选线、读/写信号线和。
2) 控制与定时寄存器及定时控制控制与定时寄存器用来寄存键盘及显示工作方式控制字,同时还用来寄存其它操作方式控制字。
这些寄存器接收并锁存各种命令,再通过译码电路产生相应的信号,从而完成相应的控制功能。
与其对应的引脚为时钟输入端CLK及复位端RESET。
定时控制电路由N个基本计数器组成,其中,第一个计数器是一个可编程的N级计数器,N为2~31之间的数。
定时控制经软件编程,将外部时钟CLK分频,得到内部所需的100 kHz 时钟,为键盘提供适当的扫描频率和显示扫描时间。
与其相关的引脚是显示熄灭控制端。
3) 扫描计数器扫描计数器由键盘和显示器共用,为它们提供扫描信号。
扫描计数器有两种工作方式:编码方式和译码方式。
按编码方式工作时,计数器作二进制计数,4位计数状态从扫描线SL0~SL3输出,经外部译码器译码后,为键盘和显示器提供扫描信号。
按译码方式工作时,扫描计数器的最低两位被译码后,从SL0~SL3输出,提供了4选1的扫描译码。
与其相关的引脚是扫描线SL0~SL3。
4) 回复缓冲器、键盘去抖及控制在键盘工作方式下,回复线作为行列式键盘的列输入线,相应的列输入信号称为回复信号,由回复缓冲器缓冲并锁存。
实验十二 8279键盘显示实验(电子秒表)一.实验要求利用实验机上提供的8279键盘电路,数码显示电路,设计一个电子钟,用小键盘控制电子钟的启停及初始值的预值。
电子钟做成如下格式:XX XX XX XX 由左向右分别为: 时、分、秒、百分之一秒1.C键:清除,显示00.00.00.002.A键:启动,电子钟计时3.D键:停止,电子钟停止计时4.B键:设置初值:由左向右依次输入预置的时、分、秒、百分之一秒值,同时应具有判断输入错误的能力,若输入有错,则显示:00.00.00.00按B键即可重新输入预置值:5.E键:程序退出。
二.实验目的1.进一步掌握8279键盘显示电路的编程方法。
2.进一步掌握定时器的使用和编程方法。
3.进一步掌握中断处理程序的编程方法。
三.实验电路及连线CS8279接8700H。
模块中的十个短路套都套在8279侧。
四.实验说明8279通用接口芯片,根据应用需要可以在多种模式下工作,详见有关手册。
五.实验程序框图主程序框图SET_T子程序框图 GETWORD子程序框图六.实验程序见:Z8279 EQU 08701H ;8279 状态/命令口地址D8279 EQU 08700H ;8279 数据口地址LEDMOD EQU 00H ;左边输入八位字符显示;外部译码键扫描方式,双键互锁LEDFEQ EQU 2FH ;扫描速率LEDCLS EQU 0C1H ;清除显示 RAMLEDWR0 EQU 80H ;设定的将要写入的显示RAM地址READKB EQU 40H ;读 FIFO RAM 地址 0 的命令字ORG 0000HAJMP STARTORG 001BH ;INT T1 入口地址AJMP INT_T1ORG 0040HSTART:MOV SP,#60HLCALL INIT8279 ;初始化8279MOV R3,#0H ;时MOV R2,#0H ;分MOV R1,#0H ;秒MOV R0,#0H ;10毫秒MOV R6,#0FFH ;标志MOV TMOD,#10HMOV TL1,#00H ;10毫秒的时间常数MOV TH1,#0DCHLCALL DIS_mSSETB ET1SETB EA ;允许中断WAIT:LCALL GETKEY ;读键盘CJNE A,#0FFH,CONT ;判断是否有键输入MOV A,BCJNE A,#3CH,KEY_G ;输入键是'C',转CLEAR_TLCALL CLEAR_TKEY_G: CJNE A,#3AH,KEY_D ;输入键是'G',转START_T LCALL START_TKEY_D: CJNE A,#3DH,KEY_P ;输入键是'D',转STOP_T LCALL STOP_TKEY_P: CJNE A,#3BH,KEY_E ;输入键是'P',转SET_T LCALL SET_TKEY_E: CJNE A,#3EH,CONT ;输入键是'E',转MONITOR AJMP MONITORCONT: CJNE R6,#0FFH,WAIT ;若无秒标志则循环LCALL DISPLAY ;显示时间MOV R6,#0 ;清标志SJMP WAIT ;循环MONITOR:NOPSJMP $ ;等待回到监控CLEAR_T: ;时间清零子程序CLR TR1 ;关计数器MOV R3,#0H ;小时清零MOV R2,#0H ;分钟清零MOV R1,#0H ;秒清零MOV R0,#0H ;10毫秒清零MOV R6,#0FFH ;置秒标志LCALL DIS_mS ;显示毫秒RETSTART_T: ;电子钟计时子程序SETB TR1RETSTOP_T: ;电子钟停止计时子程序CLR TR1RETSET_T: ;设置初值子程序CLR TR1 ;关计数器MOV R4,#7LCALL GETWORD ;读小时数CJNE A,#0FFH,INVALID ;判断输入合法性MOV A,BADD A,#232JC INVALID ;判断输入小时值 < 24 MOV A,BMOV B,#10DIV ABSWAP AADD A,BMOV R3,A ;保存输入的值MOV R4,#5LCALL GETWORD ;读分钟数CJNE A,#0FFH,INVALID ;判断输入合法性MOV A,BADD A,#196JC INVALID ;判断输入分钟数 < 60 MOV A,BMOV B,#10DIV ABSWAP AADD A,BMOV R2,A ;保存输入的值MOV R4,#3LCALL GETWORD ;读分钟数CJNE A,#0FFH,INVALID ;判断输入合法性MOV A,BADD A,#196JC INVALID ;判断输入分钟值 < 60 MOV A,BMOV B,#10DIV ABSWAP AADD A,BMOV R1,A ;保存输入的值MOV R4,#1LCALL GETWORD ;读10毫秒数CJNE A,#0FFH,INVALID ;判断输入合法性MOV A,BMOV B,#10DIV ABSWAP AADD A,BMOV R0,A ;保存输入的值AJMP SET_TOKINVALID:LCALL CLEAR_T ;时间清零SET_TOK:LCALL DIS_mS ;显示10毫秒LCALL DISPLAY ;显示时间RETGETWORD: ;读数子程序WKEY1: LCALL GETKEY ;读键盘CJNE A,#0FFH,WKEY1 ;无键输入,则再读MOV A,BADD A,#0C6HJC ERROR1 ;判断输入是否大于9MOV A,BSUBB A,#30HJC ERROR1 ;判断输入是否小于0MOV R5,ALCALL DISLED ;显示输入的字符MOV B,#10MUL ABPUSH ACC ;保存输入的值WKEY2: LCALL GETKEY ;读键盘CJNE A,#0FFH,WKEY2 ;无键输入则再读MOV A,BADD A,#0C6H ;判断输入是否大于9JC ERROR2MOV A,BSUBB A,#30H ;判断输入是否小于0JC ERROR2DEC R4MOV R5,ALCALL DISLED ;显示输入的字符MOV B,APOP ACCADD A,BMOV B,A ;把得到的值存在BMOV A,#0FFH ;置合法输入标志AJMP KEYOKERROR2: POP ACCERROR1: MOV A,#0 ;置非法输入标志KEYOK: RETINIT8279: ;8279初始化子程序PUSH DPH ;保存现场PUSH DPLPUSH ACCLCALL DELAY ;延时MOV DPTR ,#Z8279MOV A,#LEDMOD ;置8279工作方式MOVX @DPTR,AMOV A,#LEDFEQ ;置键盘扫描速率MOVX @DPTR,AMOV A,#LEDCLS ;清除 LED 显示MOVX @DPTR,APOP ACC ;恢复现场POP DPLPOP DPHRET;读取键盘子程序;输入: 无 ; 输出: B: 读到的键码 A: 按键的标志GETKEY: PUSH DPH ;保存现场PUSH DPLPUSH PSWMOV DPTR,#Z8279MOVX A,@DPTR ;读8279状态ANL A,#07H ;屏蔽D7-D3JNZ GETVAL ;判断是否有键输入MOV A,#0H ;置标志(无键输入)SJMP NKBHITGETVAL: MOV A,#READKB ;读 FIFO RAM 命令MOVX @DPTR,AMOV DPTR,#D8279MOVX A,@DPTR ;读键ANL A,#3FH ;屏蔽 SHIFT 和 CTRL 键MOV DPTR,#KEYCODE ;键码表起始地址MOVC A,@A+DPTR ;查表MOV B,A ;置返回键值MOV A,#0FFH ;置标志(有键输入)NKBHIT: POP PSW ;恢复现场POP DPLPOP DPHRET;显示字符子程序;输入: R4,位置 R5,值DISLED: PUSH DPH ;保存现场PUSH DPLPUSH ACCMOV A,#LEDWR0 ;置显示起始地址ADD A,R4 ;加位置偏移量MOV DPTR,#Z8279MOVX @DPTR,A ;设定显示位置MOV DPTR,#LEDSEG ;置显示常数表起始位置MOV A,R5MOVC A,@A+DPTR ;查表MOV DPTR,#D8279MOVX @DPTR,A ;显示数据POP ACC ;恢复现场POP DPLPOP DPHRETDELAY: ;延时子程序PUSH 0 ;保存现场PUSH 1MOV 0,#0HDELAY1: MOV 1,#0HDJNZ 1,$DJNZ 0,DELAY1POP 1 ;恢复现场POP 0RETDIS_mS:MOV A,R0ANL A,#0FHMOV R5,AMOV R4,#0LCALL DISLED ;显示10毫秒低位MOV A,R0SWAP A ;高低半字节交换ANL A,#0FHMOV R5,AMOV R4,#1LCALL DISLED ;显示10毫秒高位RETINT_T1: ;INT_T1中断服务子程序PUSH DPH ;保护现场PUSH DPLPUSH ACCPUSH PSWCLR TR1MOV TL1,#00H ;10毫秒定时常数MOV TH1,#0DCHSETB TR1MOV A,R0ADD A,#1 ;10毫秒数加 1DA AMOV R0,ALCALL DIS_mS ;显示10毫秒CJNE R0,#0,EXIT ;判断10毫秒=0 MOV R6,#0FFH ;置秒标志CJNE R1,#59H,SECOND ;判断秒=59 MOV R1,#99HCJNE R2,#59H,MINUTE ;判断分=59 MOV R2,#99HCJNE R3,#23H,HOUR ;判断时=23 MOV R3,#99HHOUR:MOV A,R3ADD A,#1 ;时加1DA AMOV R3,AMINUTE:MOV A,R2ADD A,#1 ;分加1DA AMOV R2,ASECOND:MOV A,R1ADD A,#1 ;秒加1DA AMOV R1,AEXIT:POP PSW ;恢复现场POP ACCPOP DPLPOP DPHRETI ;中断返回DISPLAY:MOV A,R3ANL A,#0FHADD A,#10HMOV R5,AMOV R4,#6LCALL DISLED ;显示小时低位MOV A,R3SWAP AANL A,#0FHMOV R5,AMOV R4,#7LCALL DISLED ;显示小时高位MOV A,R2ANL A,#0FHADD A,#10HMOV R5,AMOV R4,#4LCALL DISLED ;显示分钟低位MOV A,R2SWAP AANL A,#0FHMOV R5,AMOV R4,#5LCALL DISLED ;显示分钟高位MOV A,R1ANL A,#0FHADD A,#10HMOV R5,AMOV R4,#2LCALL DISLED ;显示秒低位MOV A,R1SWAP AANL A,#0FHMOV R5,AMOV R4,#3LCALL DISLED ;显示秒高位RET;LED显示常数表LEDSEG: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;'0,1,2,3,4,5,6,7'DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;'8,9,A,B,C,D,E,F'DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,087H ;'0.,1.,2.,3.,4.,5.,6.,7.' DB 0FFH,0EFH,0F7H,0FCH,0B9H,0DEH,0F9H,0F1H ;'8.,9.,A.,B.,C.,D.,E.,F.' DB 6DH,02H,08H,00H,59H,0FH,76H ;'U,-,_, ,I,O,P, ';键盘键码表KEYCODE:DB 30H,31H,32H,33H,34H,35H,36H,37H ;'1,2,Q,W,A,S,+,Z'DB 38H,39H,3AH,3BH,3CH,3DH,3EH,3FH ;'3,4,E,R,D,F,X,C'ENDF。
8279键盘显示实验一、实验目的与要求了解8279的内部结构、工作原理;了解8279与PCI9052的接口逻辑;掌握对8279的编程方法,掌握使用8279扩展键盘、显示器的方法。
认真预习,做好实验前的准备工作,自行编写程序,填写实验报告二、实验设备Star PCI9052、DMA $ 32 BIT RAM板卡一套、Star ES-PCI模块一块、STAR ES598PCI 实验仪一套、PC机一台三、实验内容1、编写程序:利用8279实现对G5区的键盘扫描,将键号显示于8位数码管上2、按图连线,运行程序,观察实验结果,能熟练运用8279扩展显示器和键盘。
六、演示程序.MODEL TINYPCIBAR3 EQU 1CH ;8位I/O空间基地址(它就是实验仪的基地址,;也为DMA & 32 BIT RAM板卡上的8237提供基地址) Vendor_ID EQU 10EBH ;厂商ID号Device_ID EQU 8376 ;设备ID号.STACK 100.DATA?IO_Bit8_BaseAddressDWmsg0 DB 'BIOS不支持访问PCI $'msg1 DB '找不到Star PCI9052板卡 $'msg2 DB '读8位I/O空间基地址时出错$'KEYCOUNT DB ?LED_TAB DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8HDB 080H,90H,88H,83H,0C6H,0A1H,86H,8EHCMD_8279 DW 00B1H ;8279命令字、状态字地址DATA_8279 DW 00B0H ;8279读写数据口的地址.CODESTART: MOV AX,@DATAMOV DS,AXNOPCALL InitPCICALL ModifyAddress ;根据PCI提供的基地址,将偏移地址转化为实地址CALL INIT8279 ;初始化子程序MOV KEYCOUNT,0START1: CALL IfExitJZ START11JMP ExitSTART11: CALL SCAN_KEY ;键扫描JNC START1 ;没有按键XCHG AL,KEYCOUNTINC ALCMP AL,9JNZ START2MOV KEYCOUNT,0CALL INIT8279_1 ;8个数码块全有字符显示后,再按键,清除显示JMP START1START2: XCHG AL,KEYCOUNTCALL KEY_NUM ;键值转换为键号LEA BX,LED_TAB ;字型码表XLATCALL WRITE_DATAJMP START1START_EXIT: JMP $;8279初始化INIT8279 PROC NEARMOV DX,CMD_8279 ;CMD_8279为写命令地址、读状地址MOV A L,34H ;可编程时钟设置,设置分频系数(20分频)OUT DX,ALMOV AL,0 ;8*8字符显示,左边输入,外部译码键扫描方式OUT DX,AL; MOV AL,0A0H; MOV AL,0A0H; OUT DX,ALCALL INIT8279_1RETINIT8279 ENDPINIT8279_1 PROC NEARCALL CLEAR ;清显示MOV AL,90H ;从第一个数码管开始移位显示OUT DX,ALRETINIT8279_1 ENDPCLEAR PROC NEARMOV DX,CMD_8279MOV AL,0DEH ; 清除命令OUT DX,ALWAIT1: IN AL,DXTEST AL,80HJNZ WAIT1 ; 显示RAM清除完毕吗?RETCLEAR ENDPSCAN_KEY PROC NEARMOV DX,CMD_8279IN AL,DX ;读状态READ_FIFO: AND AL,7JZ NO_KEY 是否有键按下READ: MOV AL,40HOUT DX,AL ;读FIFO RAMMOV DX,DATA_8279IN AL,DXSTC ;有键SCAN_KEY1: RETNO_KEY: CLC ;无键按下,清CYJMP SCAN_KEY1SCAN_KEY ENDPKEY_NUM PROC NEARAND AL,3FHRETKEY_NUM ENDPWRITE_DATA PROC NEARMOV DX,DATA_8279OUT DX,ALRETWRITE_DATA ENDPExit: MOV AH,4CHINT 21H;IfExit、InitPCI、ModifyAddress子程序请参阅实验二END START。
如何利用89C51单片机与8279实现键盘接口电路显示悬赏分:30 - 提问时间2008-5-24 16:12问题为何被关闭因为最大长度为10000mm。
因此,显示器的最小位数应为五位,且用2*8的键盘,另还有7407驱动器以及译码器最好用两片等器件连接而成,如谁有这方面的请发到我邮箱内:*******************.提问者:dzxxkxyjsh - 助理二级答复共1 条第六章单片机接口技术应用在设计各种单片机应用系统中,还需扩展很多外部接口器件才能充分发挥单片机的智能控制功能。
如扩展键盘与显示器件接口,可实现人机对话功能;扩展A/D转换接口,可实现对外部各种模拟信号的检测与转换;扩展D/A转换接口可将数字信号转换为模拟信号,从而完成对控制对象的驱动。
本章将主要介绍常见的键盘、显示(LED、LCD)、A/D和D/A 转换接口电路。
第一节键盘接口电路键盘是计算机最常用的输入设备,是实现人机对话的纽带。
按其结构形式可分为非编码键盘和编码键盘。
编码键盘采用硬件方法产生键码。
每按下一个键,键盘能自动生成键盘代码,键数较多,且具有去抖动功能。
这种键盘使用方便,但硬件较复杂,PC机所用键盘即为编码键盘。
非编码键盘仅提供按键开关工作状态,其键码由软件确定,这种键盘键数较少,硬件简单,广泛应用于各种单片机应用系统,本书主要介绍非编码键盘的设计与应用。
一、独立式键盘按照键盘与单片机的连接方式可分为独立式键盘与矩阵式键盘。
独立式键盘相互独立,每个按键占用一根I/O口线,每根I/O口线上的按键工作状态不会影响其他按键的工作状态。
这种按键软件程序简单,但占用I/O口线较多(一根口线只能接一个键),适用于键盘应用数量较少的系统中。
图6-1为4个独立式按键的应用电路。
其键盘程序如下:1.键闭合测试,检查是否有键闭合KCS:MOV P1,#0FFHMOV A,P1CPL AANL A,#0FHRET若有键闭合,则(A≠0), 若无键闭合,则(A=0)。
4.2 通用键盘显示电路设计4.2.1通用可编程键盘和显示器的接口电路芯片8279通用键盘显示电路采用Intel公司生产的通用可编程键盘和显示器的接口电路芯片8279。
8279可以实现对键盘和显示器的自动扫描,识别闭合键的键号,完成显示器动态显示,可以节省CPU处理键盘和显示器的时间,提高CPU的工作效率。
另外,8279与单片机的接口简单,显示稳定,工作可靠。
所以使用8279的通用键盘显示电路可使系统设计简单化。
1. 8279芯片的信号引脚及功能8279 采用40脚双列直插式封装,引脚封装形式如图4.2.1所示。
图4.2.1 8279引脚分布图其中:DB0~DB7:双向数据总线。
在CPU与8279间做数据与命令的传送。
CLK:8279的系统时钟,100KHz为最佳选择。
RESET:复位信号,输入线,当RESET=1时,8279复位,其复位状态为:16个字符显示,编码扫描键盘——双键锁定,程序时钟编码1。
CS:芯片选择信号,低电平有效。
A0:区分信息的特征位。
A0=1时,读取状态标志位或写入命令;A0=0时,读写一般数据。
RD:读取控制线。
RD=0,8279会送数据至外部总线。
WR:写入控制线。
WR=0,8279会从外部总线捕捉数据。
IRQ:中断请求输出线,高电平有效。
在键盘工作方式中,当FIFO传感器RAM中有数据时为“1”,CPU每读一次就变为0,如果RAM中仍有数据则IRQ又变为“1”。
在传感器工作方式中,传感器矩阵无论哪里发生变化都会使IRQ为“1”。
SL0~SL3:扫描按键开关或传感器矩阵及显示器,可以是编码模式或解码模式。
RL0~RL7:回复输入线,它们是键盘或传感器的列(或行)信号输入线;平时保持为“1”,当矩阵结点上有键(开关)闭合时变为“0”。
SHIFT:移位信号输入线,高电平有效。
通常用来扩充键开关的功能,可以用作键盘上、下档功能键。
在传感器方式和选通方式中,SHIFT无效。
CNTL/STB:控制/选通输入线,高电平有效。
8279键盘和显示程序#include<at89c
52.h>
#include<absacc.h>
#include<stdio.h>
#defineCOM8279XBYTE [0xF2FF定义8279 控制口#defineDATA8279XBYTE [OxFOFF定义8279 数据口#define uchar unsigned char
#define uint unsigned int
uint keyval// 定义键内码传递参数
uint time// 定义延时参数
void delay(uint time)
void key(void)
void main(){delay
(13OO)// 开机延时
COM8279 = 0xD2/4青除RAM 和FIFO
delay
(1)
EA=1
EX1 = 1〃开总中断,开外部中断1;
IT仁1〃外部中断1选用下降沿
COM8279=OxOO//8279键盘双键互锁,编码扫描,左端入口
COM8279=Ox12〃时钟分频设置,分频数为18
COM8279=0x70
COM8279=0x90;
while
(1)}void delay (uint time)// 传递参数为time{uchar j// 设置读显示命令
// 设置写显示命令
while (time--)// 用time-1 来进行循环{for (j=100;j>0;j--)//用j 来进行125次循环,大约8us}}}
void intsvr1(void) interrupt 2 using 1{keyval=DATA8279
key()}〃按键确认程序
void key(void){switch(keyval){case 0xC3:{P0=0x3F;
DATA8279=P0;
break;}case 0xC2:{P0=0x06;
DATA8279=P0;
break;}case 0xC1:
{//0 号键赋值
//1 号键赋值;
//2 号键赋值;
P0=0x5B;
DATA8279=P0;
break;}case 0xc0://3 号键赋值;DATA8279=P0; break;}case 0xCB:
{P0=0x66;
DATA8279=P0;
break;}case 0xCC:
{P0=0x6D;
DATA8279=P0;
break;}case 0xC9:{P0=0x7D;
DATA8279=P0;
break;}case 0xC8://4 号键赋值;
//5 号键赋值;
//6 号键赋值;
//7 号键赋值;{P0=0x07;
DATA8279=P0;
break;}case 0xD3://8 号键赋值;
DATA8279=P0;
break;}case 0xD2:{P0=0x6F;
DATA8279=P0;
break;}case 0xD1:{P0=0x77;
DATA8279=P0;
break;}case 0xD0:{P0=0x7C;
DATA8279=P0;
break;
}//9 号键赋值;
//A 号键赋值;
//B 号键赋值;
case 0xE3://C 号键赋值;{P0=0x39;
DATA8279=P0;
break;}case 0xE1:{P0=0x5E;
DATA8279=P0;
break;}case 0xE2:{P0=0x79;
DATA8279=P0;
break;}case 0xE0:{P0=0x71;
DATA8279=P0;
break;}default:
break;}}//D 号键赋值;
//E 号键赋值;
//F 号键赋值;{P0=0x4F; {P0=0x7F;。