实验四 8279键盘显示实验
在单片机实验箱上通过8279在8位数码管上从左至右依次显
1.在单片机实验箱上通过8279在8位数码管上从左至右依次显示12345678。
2.在单片机实验箱上通过8279在8位数码管上从左至右依次显示81650000。
3.在单片机实验箱上,每按一次K01键,最左边的数码管加1,显示8后再按键则清0。
4.在单片机实验箱上,按下k13时,在最左边的两位数码管上显示13,按下k14键时,在最左边的两位LED上显示14。
5.在单片机实验箱上,按下k15时,在最右边的两位数码管上显示15,按下k16键时,在最右边的两位LED上显示16。
6.在单片机实验箱上,分别按下k01-k08八个按键时,在最右边的数码管上对应显示1-8,并分别依次点亮LED0-LED7。
7.在单片机实验箱上,每按一次K04键,最右边的数码管加1,显示8后再按键则清0。
8.在EDA实验箱上,在数码管上从左至右依次显示13572468。
9.在EDA实验箱上,在数码管上从左至右依次显示1357,后面4位不显示。
10.在EDA实验箱上实现10进制计数器,并由从左起第三个数码管显示。
11.在EDA实验箱上实现时钟5分频。
12.在单片机实验箱上用1-2相励磁的原理实现步进电机正反转控制。
13.在单片机实验箱上用2相励磁的原理实现步进电机正反转控制。
14.在单片机实验箱上实现LED0间隔时间为1秒的闪烁。
15.在EDA实验箱上实现8进制计数器,并由从左起第四个数码管显示16.在EDA实验箱上实现时钟3分频。
17.在EDA实验箱上实现8个发光二极管从左到右点亮,从右到左渐熄,间隔时间1s。
18.在EDA实验箱上实现一个6进制减法计数器,计数结果在左边第一位显示。
19.在单片机实验箱上,实现按K01一次,P1.0上波形取反一次。
20.在单片机实验箱上实现开机显示5(最右边),其余不显示,按K01键一次减1,至0后又回到5。
8279键盘和显示程序
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;}}。
键盘8279
8279是一种通用的可编程的键盘/显示器接口器件,可对64个开关组成的键盘矩阵进行自动扫描,接收键盘上的输入信息,并在有键输入时向单片机请求中断,还能对8位或16位LED自动扫描,使显示缓冲器的内容在LED上显示出来。
利用8279对键盘/显示器的自动扫描,可以减轻CPU负担,具有显示稳定、程序简单、不会出现误动作等特点。
本实验系统中8279的状态/命令口地址为8041H,数据口地址为8040H,程序开始部分是完成8279的初始化,设定8279的键盘及显示方式,并显示“8279--”,然后等待键盘输入,一旦有键盘输入,8279会向CPU申请中断,在中断服务程序中读取FIFO/传感器RAM,根据读得的键值判断是哪一个键,再调用键的显示程序将该键显示出来。
8279控制的键盘的键值表8279控制的键盘的键值表键名键值键名键值键名键值K010C0H SHIFT+ K0180H CRTL+ K0140H K020C8H SHIFT+ K0288H CRTL+ K0248H K030D0H SHIFT+ K0390H CRTL+ K0350H K040D8H SHIFT+ K0498H CRTL+ K0458H K050C1H SHIFT+ K0581H CRTL+ K0541H K060C9H SHIFT+ K0689H CRTL+ K0649H K070D1H SHIFT+ K0791H CRTL+ K0751H K080D9H SHIFT+ K0899H CRTL+ K0859H K090C2H SHIFT+ K0982H CRTL+ K0942H K100CAH SHIFT+ K108AH CRTL+ K104AH K110D2H SHIFT+ K1192H CRTL+ K1152H K120DAH SHIFT+ K129AH CRTL+ K125AH K130C3H SHIFT+ K1383H CRTL+ K1343H K140CBH SHIFT+ K148BH CRTL+ K1448H K150D3H SHIFT+ K1593H CRTL+ K1553H K160DBH SHIFT+ K169BH CRTL+ K165BH。
键盘扫描及动态LED 显示实验报告
//P0=num;
for(i=0;i<16;i++){
if(jianpan==bianma[i]){//等于判断一定是双等于号
num=i;
break;
}
}
send_byte(0xa1);
write7279(0xc8,num);
while(key==0);
//***变量及I/O口定义***
unsigned char digit[5];
unsigned char key_number, j, k,mk; //mk为按键次数计数值
unsigned int tmr;
unsigned long wait_cnter;
sbit cs=P1^0;// cs at P1.0
sbit clk=P1^1;// clk连接于P1.1
sbit dat=P1^2;// dat连接于P1.2
sbit key=P1^3;// key连接于P1.3
void write7279(unsigned char cmd, unsigned char dta)
{
send_byte (cmd);
}
dat=0;
}
unsigned char receive_byte(void)
{
unsigned char i, in_byte;
dat=1;// set to input mode
long_delay();
for (i=0;i<8;i++)//分8次读入数据高位在前
{
clk=1;
short_delay();
cs=0;//芯片使能
8279键盘
一、实验目的1、掌握8279的工作原理。
2、熟悉8279与键盘接口的方法。
3、学习、了解键盘扩展方法。
二、实验内容将每次按键产生的键码显示在LED数码管。
三、实验原理介绍实验原理图见8279键盘显示电路。
四、实验步骤1、实验接线:将8279的RL0~RL7分别与键盘的RL10~RL17相连。
2、将8279的KA0~KA2分别与键盘的KA10~KA12相连。
3、用查询法编程4、全速运行程序,按动按键,观察显示键值的变化。
五、实验提示1、8279的I/O地址已连好,为490的偶地址,即:数据口为490H,状态口为492H。
2、8279外部输入时钟已连好,时钟频率为1MHZ。
3、8279所以,D5 D4 D3表示按下键所在的列号,D2 D1 D0表示按下的键所在的行号。
采用8279可以识别最大达8x8的矩阵键盘。
六、实验结果第一行键值从左至右依次为:C0—C5;第二行键值从左至右依次为:C6—CB;第三行键值从左至右依次为:CC—D1;第四行键值从左至右依次为:D2—D7;七、实验程序框图(实验程序名:T8279.asm)八、程序源代码清单con8279 equ 0492hdat8279 equ 0490hassume cs:codecode segment publicorg 100hstart: jmp start1segcod db3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71h start1: mov dx,con8279mov al,10hout dx,al ;编码扫描键盘,双键锁定mov al,2ah ;10分频得到100KHzout dx,alcall blackrkey: mov dx,con8279disla2: in ax,dx ;读入状态字and ax,07hjz disla2 ;没有按键则等待!mov dx,dat8279in ax,dx ;读入键值and ax,0ffhmov bx,axnop ;设断点观察键值call black ;总清显示RAMnopdisp:mov di,offset segcodmov ax,08h ;工作方式,16位,左入mov dx,con8279out dx,axmov ax,90hmov dx,con8279out dx,ax ;写显示RAM命令,地址自增 mov dx,dat8279push bxand bx,0f0hmov cl,4shr bx,cladd di,bxmov al,cs:[di]mov ah,0out dx,ax ;写RAM0nopnopmov di,offset segcodpop bxand bx,0fhadd di,bxmov al,cs:[di]mov ah,0out dx,ax ;写RAM1nopnoppush cxjmp rkeyblack: mov dx,con8279mov ax,0d1hout dx,ax ;显示RAM全部清零mov cx,80h ;循环次数clsb: nopnoploop clsbretcode endsend start。
单片机8279键盘显示
集美大学计算机工程学院实验报告课程名称单片机应用技术实验名称8279键盘显示实验实验类型设计型姓名学号日期地点成绩教师第1页共5页1. 实验目的与要求1)解8279芯片的结构、工作原理;了解8279与单片机的接口逻辑;掌握对8279 的编程方法,掌握了解8279扩展键盘、显示器的方法2)认真预习本节实验内容,尝试自行编写程序,填写实验报告。
2. 实验设备STAR系列实验仪、PC机、星研集成软件环境3. 实验内容1编写程序:使用8279实现对G5区的键盘扫描,将键盘显示与8为数码管上2按图连线,运行程序,观察实验结果,能熟练运用8279扩展显示器和键盘4. 实验硬件电路及接线4.1电路设计如下图4.2实验装置的连线说明G5 区 A0、CS-------------A3区 A0、CS5E5区:CS,A0-------------CS5,A0E5区: CLK---------------B2区2ME5区: B,C---------------G5区LED:B,CProtues连线图:5,程序流程图流程图:NY NY开始初始化8279,设置8279分频系数(20分频)8*8字符显示,左边输入,外部译码键扫描方式清显示,从第一个数码管开始移位显示。
有按键 安满8 次键 清显示 将键值转换为0..F 键号 将键值写入82796,程序源代码BUFFER DATA 30H ;键盘输入缓冲区首地址BUFFER1 DATA 40H ;8字节显示缓冲区在首地址CMD8279 XDATA 0BF01H ;8279命令/状态字地址DATA8279 XDATA 0BF00H ;8279读写数据口地址KEYCOUNT DATA 50HORG0000HLJMP MAINORG0100HMAIN:RUN8279: ACALL INIT ;8279初始化MOV KEYCOUNT,#0 ;按键个数计数STAR1: LCALL SCAN_KEY ;键扫描JNC STAR1 ;无按键则循环XCH A,KEYCOUNTINC ACJNE A,#9,STAR2 ;MOV KEYCOUNT,#0LCALL INIT8279_1SJMP STAR1STAR2: XCH A,KEYCOUNTLCALL KEY_NUMMOV DPTR,#LED_TABMOVC A,@A+DPTRLCALL WRITE_DATASJMP STAR1;8279初始化INIT: MOV A,#34H ;命令字:分频系数20分频MOV DPTR,#CMD8279MOVX @DPTR,AMOV A,#10HMOVX @DPTR,AINIT8279_1: LCALL CLEAR ;清显示MOV A,#90H ;从最后一个数码管开始显示移位MOVX @DPTR,ARET; 清显示CLEAR: MOV A,#0DEH ;清屏命令MOV DPTR,#CMD8279MOVX @DPTR,AWAIT11: MOVX A,@DPTRJB ACC.7,WAIT11 ;显示RAM清除完毕否?RET; 键盘扫描SCAN_KEY: MOV DPTR,#CMD8279 ;读状态字MOVX A, @DPTRREAD_FIFO: ANL A,#7JZ NO_KEY ;判定是否有键按下READ: MOV A,#40HMOVX @DPTR,A ;读FIFO RAM 命令字MOV DPTR,#DATA8279MOVX A,@DPTRSETB C ;有键按下SCAN_KEY1: RETNO_KEY: CLR C ;无键按下SJMP SCAN_KEY1;键盘数据判定KEY_NUM: ANL A,#3FHRET;写数据WRITE_DATA: MOV DPTR,#DATA8279MOVX @DPTR,ARETLED_TAB: DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H DB80H,90H,88H,83H,0C6H,0A1H,86H,8EH END。
在单片机实验箱上通过8279在8位数码管上从左至右依次显
1.在单片机实验箱上通过8279在8位数码管上从左至右依次显示12345678。
2.在单片机实验箱上通过8279在8位数码管上从左至右依次显示81650000。
3.在单片机实验箱上,每按一次K01键,最左边的数码管加1,显示8后再按键则清0。
4.在单片机实验箱上,按下k13时,在最左边的两位数码管上显示13,按下k14键时,在最左边的两位LED上显示14。
5.在单片机实验箱上,按下k15时,在最右边的两位数码管上显示15,按下k16键时,在最右边的两位LED上显示16。
6.在单片机实验箱上,分别按下k01-k08八个按键时,在最右边的数码管上对应显示1-8,并分别依次点亮LED0-LED7。
7.在单片机实验箱上,每按一次K04键,最右边的数码管加1,显示8后再按键则清0。
8.在EDA实验箱上,在数码管上从左至右依次显示13572468。
9.在EDA实验箱上,在数码管上从左至右依次显示1357,后面4位不显示。
10.在EDA实验箱上实现10进制计数器,并由从左起第三个数码管显示。
11.在EDA实验箱上实现时钟5分频。
12.在单片机实验箱上用1-2相励磁的原理实现步进电机正反转控制。
13.在单片机实验箱上用2相励磁的原理实现步进电机正反转控制。
14.在单片机实验箱上实现LED0间隔时间为1秒的闪烁。
15.在EDA实验箱上实现8进制计数器,并由从左起第四个数码管显示16.在EDA实验箱上实现时钟3分频。
17.在EDA实验箱上实现8个发光二极管从左到右点亮,从右到左渐熄,间隔时间1s。
18.在EDA实验箱上实现一个6进制减法计数器,计数结果在左边第一位显示。
19.在单片机实验箱上,实现按K01一次,P1.0上波形取反一次。
20.在单片机实验箱上实现开机显示5(最右边),其余不显示,按K01键一次减1,至0后又回到5。
电子时钟
8279键盘显示实验(电子秒表)一.实验要求利用实验机上提供的8279键盘电路,数码显示电路,设计一个电子钟(日历),用小键盘控制电子钟(日历)的启停及初始值的预值。
电子钟做成如下两种格式(按F键两种格式可以切换):XX -XX-XX 由左向右分别为: 时、分、秒XX -XX-XX 由左向右分别为: 年、月、日1.C键:清除,显示00-00-00.2.A键:启动,电子钟(日历)计时3.D键:停止,电子钟(日历)停止计时4.B键:设置初值:由左向右依次输入预置的时、分、秒(年、月、日)值,同时应具有判断输入错误的能力,若输入有错,则显示: 00-00-00按B键即可重新输入预置值:5.F键:实现电子钟和日历的切换5.E键:程序退出。
二试验程序//---8279键盘显示实验(电子秒表)---//-----头文件引用------#include<reg51.h>#include<absacc.h>#include<intrins.h>//-----宏声明-----#define D8279 XBYTE[0xF238] //8279 数据口地址#define C8279 XBYTE[0xF239] //8279 状态/命令口地址#define uchar unsigned char#define uint unsigned int#define TimeDisp 1#define DateDisp 0//-----变量定义-----uchar idata time[] = {0,0,0,12}; //10毫秒,秒,分,十uchar idata day[3] = {18,6,8};uchar idata diss[8]={0x20,0x20,0,0,0,0,0,0};//显示缓冲区uchar code ledseg[] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5E,0x79,0x71,0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0xF7,0xFC,0xB9,0xDE,0xF9,0xF1,0x00,0x40};// LED显示常数表bit bdata sbz,wbz,kbz; //定义秒标志、键值合法标志、读键标志bit bdata flag = TimeDisp;//-----取键值函数-----uchar getkey(){uchar key;if((C8279&0x07)==0x00){kbz=0;} //无键按下,置标志else{kbz=1;C8279=0x40; //读FIFO RAM命令key=D8279;key=(key&0x3f); //取键盘数据低6位 return(key);}}//-----显示函数-----void disled(d)uchar idata *d;{uchar i;C8279=0x90;for(i=0;i<8;i++){C8279=i+0x80;D8279=ledseg[*d];d++;}}//-----显示缓冲区内容显示-----void disp(void){disled(diss);}//----8279初始化子程序-----void init8279(){C8279=0; //置8279工作方式C8279=0x2f; //置键盘扫描速率C8279=0xc1; //清除LED 显示//while(com&0x80);//等待清除结束}//-----毫秒显示-----void disms(){diss[0]=time[0]%10;diss[1]=time[0]/10;disp();}//-----显示处理-----void display(){if(flag == 1){diss[0]=time[1]%10;diss[1]=time[1]/10;diss[2]=33;diss[3]=time[2]%10;diss[4]=time[2]/10;diss[5]=33;diss[6]=time[3]%10;diss[7]=time[3]/10;}else{diss[0]=day[0]%10;diss[1]=day[0]/10;diss[2]=33;diss[3]=day[1]%10;diss[4]=day[1]/10;diss[5]=33;diss[6]=day[2]%10;diss[7]=day[2]/10;}disp();}//-----初始化-----void first(void){init8279(); //初始化8279 sbz=1; //标志TMOD=0x10;TH1=0xdc; //10毫秒的时间常数 TL1=0x00;disms();ET1=1;EA=1; //允许中断}//-----INT_T1中断服务子程序----- void Int_T1(void) interrupt 3{TR1=0;TH1=0xdc; //10毫秒定时常数TL1=0x00;TR1=1;time[0]=time[0]+1; //10毫秒数加 1 if(time[0]==100) //判断10毫秒=100 {time[0]=0;sbz=1; //置秒标志}//disms();if(time[0]==0){time[1]=time[1]+1; //秒加1if(time[1]==60) //判断秒=60{time[1]=0;time[2]=time[2]+1;//分加1if(time[2]==60) //判断分=60{time[2]=0;time[3]=time[3]+1;//时加1if(time[3]==24)//判断时=23{time[3]=0;day[0] += 1;if(day[0] == 30){day[0] = 0;day[1] += 1;if(day[1] == 12){day[1] = 0;day[2]++;}}}}}}}//-----读数子程序-----void getword(){uchar i;for(i=8;i>0;i--){do{getkey(); //读键盘}while(kbz==0);//无键输入,则再读if((getkey()>9)||(getkey()<0))//判断输入是否大于9,小于0 {wbz=0; //置非法输入标志return;}else{wbz=1; //置合法输入标志if((i == 6)||(i == 3)){i--;diss[i-1]=getkey();disp(); //显示输入的字符}else{diss[i-1]=getkey();disp(); //显示输入的字符}}}}//-----时间清零子程序-----void cleart(){TR1=0; //关计数器time[0]=0; //10毫秒清零time[1]=0; //秒清零time[2]=0; //分钟清零time[3]=0; //小时清零disms(); //显示毫秒sbz=1; //置秒标志}//-----设置初值子程序-----void sett(){getword(); //读数if(wbz==1) //判断输入合法性{if(flag == 1){time[3]=(diss[7]*10+diss[6]);if(time[3]<24)//判断输入小时值< 24 {time[2]=(diss[4]*10+diss[3]);if(time[2]<60)//判断输入分钟数< 60{time[1]=(diss[1]*10+diss[0]);if(time[1]<60)//判断输入秒值< 60{;}else{cleart();} //时间清零}else{cleart();} //时间清零}else{cleart();} //时间清零}else{day[2]=(diss[7]*10+diss[6]);if(day[2]<32)//判断输入小时值< 24{day[1]=(diss[4]*10+diss[3]);if(day[1]<13)//判断输入分钟数< 60{day[0]=(diss[1]*10+diss[0]);if(day[0]<100)//判断输入秒值< 60{;}else{cleart();} //时间清零}else{cleart();} //时间清零}else{cleart();} //时间清零}}else{cleart();} //时间清零display();//显示时间}//-----主程序-----void main(){uint counter = 0;first(); //初始化while(1) //循环{counter++;if(counter == 10000 ){//flag = !flag;counter = 0;}getkey(); //读键盘if(kbz==1) //判断是否有键输入{switch(getkey()){case 0x0c: cleart();//输入键是'C',转CLEART break;case 0x0a: TR1=1; //输入键是'A',电子钟计时break;case 0x0d: TR1=0; //输入键是'D',电子钟停止计时break;case 0x0b: TR1=0; //输入键是'B',转SETTsett();break;case 0x0e: _nop_();//输入键是'E',case 0x0f: flag = !flag;break;while(1)//等待回到监控{}}}else if(sbz==1){display();//显示时间sbz=0;//清标志}}}。
8279A可编程键盘显示接口
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。
接口实验 8279
姓名:学号:班级:
实验六8279键盘显示实验
一、实验目的
掌握8088微机系统中,扩展8279键盘显示接口的方法。
二、实验内容
用8279接口芯片来控制实验系统键盘显示,按下数字键,在数码管上应显示相应的数字,按MON键,显示8279—good,按其它功能键不响应。
三、实验接线图
四、实验程序框图
五、实验步骤
①连CS6→FF80H孔,JSL→JS,JRL→JR,JOUT→JLED,开关JK置外接(实验完后置系统)。
②建议联PC机进行调试,打开源文件8279·ASM(EP2:2A90H),然后编译、装载,点击运行命令,数码管上显示P,按数字键,数码管上显示相应数字,按MON键,数码管显示8279-good,按RST键,退出运行。
六、回答问题
1、实验连线图中,连线CS6→FF80H,JSL→JS,JRL→JR,JOUT→JLED,开关JK置外接的作用是什么?解释硬件电路图的原理。
2、8279端口地址分别为多少?程序中写入的内容为何值?试解释。
3、请详细注释整个实验程序。
并说明程序中定义的ZW、KH、TABK、TABC的意义在哪里。
4、在调试的过程中观察键入的键名是经过怎样的过程显示出来的。
调试过程中注意各个键的内码分别多少?请写出来,并与TABK的内容比较。
5、写出实验体会。
实验进行怎样的改进,或加怎样的步骤,更能提高实验的效果。
单片机8279键盘显示实验
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) 回复缓冲器、键盘去抖及控制在键盘工作方式下,回复线作为行列式键盘的列输入线,相应的列输入信号称为回复信号,由回复缓冲器缓冲并锁存。
键盘显示实验
一、实验目的1、掌握8279键盘显示电路的基本功能及编程方法。
2、掌握一般键盘和显示电路的工作原理。
3、进一步掌握定时器的使用和中断处理程序的编程方法。
二、实验内容1、I/O编程本实验的实验电路如图。
它做在一块扩展电路板上,用一根20芯扁平电缆线将实验板扩展插头与实验台上的扩展插头J7相连,为扩展电路连接电源及外部总线。
扩展电路板上的数码管、键盘阵列既能由8279控制,也可以由外部电路控制,其实现靠的是若干组短路子组成的控制选择开关K1,K2,K3,K4,KB0,KB1,KB2。
当K1,K3,K4连接在8279一端时,数码管由8279控制,连接在LS273一端时由外部总线通过LS273直接控制。
当K2,KB1,KB2,KB3连接在8279一端时,键盘阵列由8279控制,连接在8255一端时由外接芯片8255控制。
因为本实验为8279控制实验,所以除了连接J1和J7外,还需要将选择开关K1,K2,K3,K4,KB0,KB1,KB2连接在8279一端,以使数码管、键盘阵列由8279芯片控制。
3、编程2:中断编程利用实验台上提供的定时器8253和扩展板上提供的8279以及键盘和数码显示电路,设计一个电子钟。
由8253中断定时,小键盘控制电子钟的启停及初始值的预置。
电子钟显示格式如下:XX.XX.XX. 由左向右分别为时、分、秒。
要求具有如下功能:①、C键:清除,显示全零。
②、G键:启动,电子钟计时。
③、D键:停止,电子钟停止计时。
④、P键:设置时、分、秒值。
输入时依次为时、分、秒,同时应有判断输入错误的能力,若输入有错,则显示:E-----。
此时敲P键可重新输入预置值。
⑤、E键:程序退出。
四、编程2 接线方法1.用一根20芯扁平电缆将实验扩展板与实验台上扩展插头J7相连。
2.实验台上8253 CLK0 接1MHZ,GATE0 和GATE1接+5V,OUT0 接CLK1,OUT1 接IRQ,CS接280H~287H。
实验十二 8279键盘显示实验
实验十二 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键盘显示接口电路设计及程序设计第一部分硬件部分一.1)8279键盘显示接口电路要求:1)掌握8279键盘显示接口电路的扩展方法2)熟悉8279的工作原理和编程方法3)编制8279动态显示和键盘扫描程序4)熟悉8086CPU与PC机的连接和应用5)键入数据同时在PC机和显示模块上显示6)画出硬件结构原理图7)操作系统DOS6.228) 调试程序9) VB6.0 版软件2)设计题目、要求硬件条件:计算机、AEDK8688ET实验装置一套。
其主要目的在于培养学生的可视化语言的实际应用能力,掌握面向对象,基于Windows98的32位环境基本可视化编程方法,尤其是运用可视化编程语言对输入/输出端口的输入/输出的操作,为面向输入/输出控制的集成监控软件的设计打下基础。
内容:1.实时监倥系统的设计:(VB、VC、Delphi任选)1.VB、VC或Delphi环境下对输入/输出的操作实践2.通过A/D器件实验数据的采集、校核、滤波。
3.实时数据刷新,曲线描绘及趋势显示。
2.串行通讯系统的设计:(VB、VC、Delphi任选)实现计算机硬件接口之间的串行通讯。
要求:1.学习并初步掌握可视化编程语言VB、VC、Delphi的编程方法;2.并开发一个具有可视化界面,具备外设端口输入/输出功能的程序;3.课程设计完成后,每人必须提交磁盘文件和一份设计说明书。
3)指导老师:黄运生、李志民4 )考核及成绩评定:由全体指导老师及研究生师兄于最后一次上机(2005年1月15日)对每位同学的设计结果逐个观看演示、考核、并将相关文件及源文件一并交于指定文件夹。
汇编语言是一种运行速度最快,能使用所有机器特殊硬件功能的语言。
对速度要求很高的程序,如实时响应处理,图形图象处理等都离不开汇编语言。
目前在计算机系统中,无论是操作系统、编译系统、图形处理系统及大量应用系统中都还不能完全离开汇编语言编制的程序模块。
8279键盘显示实验
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。
8279LED数码管显示控制实验
实验三8279 LED数码管显示控制实验一、实验目的1.熟悉INTEL8279键盘、显示接口的编程方法。
2.掌握8279 LED显示控制的编程二、实验要求1.在前面的实验基础上,编写一个8279显示控制程序,要求把在键盘中断服务程序中读取到的键值编码换成键符的显示段码并把键符显示在LED上。
1)工作方式设定为8个字符显示,左入口,编码扫描键盘,双键锁定;2)对外部时钟(ALE)10分频以获得8279内部所要求的100KHz的基本频率;3)写显示RAM地址从0开始,地址自动加1;4)将显示RAM全部置1并置空FIFO存储器。
在实验板上,从8279 B3-B0、A3-A0输出的段选码经过反相驱动器74LS240与LED相连,因此,虽然LED为共阴极接法,但是写入显示RAM的段选码必须为共阳极段选码,才能显示对应的字符。
因为RL0无法回扫键值,首行键改接RL4。
键符为:RL4:7,8,9,B,F;(首行键接RL4)RL1:4,5,6,C,P;RL2:1,2,3,D,U;RL3:0,、,(小数点)A,E,L;键盘键值编码为:RL4:04H 0CH 14H 1CH 24H;(首行键接RL4)RL1:01H 09H11H 19H 21H;RL2:02H 0AH 12H 1AH 22H;RL3:03H 0BH 13H 1BH 23H;2.在程序1的基础上,把显示方式改为右入口的8位显示,重新编译和执行程序。
3.在程序1的基础上,修改写显示RAM命令,使得清零后,从第5个LED开始显示字符。
三、芯片应用特性见8279键盘扫描输入实验四、实验步骤1.线路连接及注意事项1)线路连接同8279键盘扫描输入实验2)注意事项从8279 B3-B0、A3-A0输出的短选码经过反相驱动器与LED相连。
2.程序设计设计程序关时关键要解决的问题是:如何把键盘编码转换成键符的显示段码。
在这里给出一种技巧性很强的方法。
键符的显示段码可以通过两次查表获取,先构造一个键符表:KEYTAB:DB XXH,04H,01H,00H,07H,XXH,XXH,XXHDB XXH,05H,02H,13H,08H,XXH,XXH,XXHDB XXH,06H,03H,0AH,09H,XXH,XXH,XXHDB XXH,0CH,0DH,0EH,0BH,XXH,XXH,XXHDB XXH,10H,11H,12H,0FH,XXH,XXH,XXHKEYTAB中XXH可为任意数,不影响程序正确执行。
哈工大 计算机组成技术实验指导
FIFO RAM中 的字符数
8279键输入数据格式表
D7
CNTL
D6
SHIFT
D5~D3 扫描 指出输入键所在的行号 (扫描计数值)
D2~D0 回送
D7、D6分别为控制键CNTL和SHIFT的 状态。CNTL与其它键连用作特殊命令 键,SHIFT可作为上下挡控制键。当 SHIFT接按键(对地),可以与8*8键 盘配合,使各键具有上下键功能,这 样键盘可扩充到128个键。CNTL键可 与任意键组合作为控制键,于是, 8*8键盘最多可扩充至256个键。
8 2 7 9 命 令
字
8279状态格式与状态字
8279的FIFO状态字,主要用于键盘和选通工作方式,以指示数据缓冲器
FIFO/传感器RAM中的字符数和有错误发生。状态字节的读出地址和命令输入
地址相同(A0=1)。状态字节格式如下:
Du S/E O U F N N N
1:FIFO RAM已满 0:FIFO RAM未满 1:出现不足错误 0:无不足 1:出现溢出错误 0:无溢出 1:显示无效 0:显示有效
SL0~SL3扫描信号线也是数码管显示的位选信号线,还有 OA0~OA3, OB0~OB3 :数据输出线
数据显示器的段码从这两组线输出,它们与位选线SL0~SL3同步,实现分时
数据显示。芯片内部有一个16字节长的显示存储器,存储欲显示的段码,最大可支 持16位数码显示。
BD:消隐信号线
此输出信号用来在显示数据切换时进行消隐,以免显示跳动,此信号也可 由消隐命令产生。
指出输入键所在的列号 (由RL7~RL0状态确定)
LED显示器
共阳极
共阳极的LED显示器的发光二级管的阳极连接在一起,通常 此公共阳极接正电压,当某个发光二极管的阴极接低电平时 发光二极管被点亮相应的段被显示
实验四 8279键盘显示
实验四8279键盘/显示一.实验原理8279为可编程器件,可通过送入不同的命令,使8279执行不同的不同的功能。
其中8279状态口地址为0FF82H,8279数据口地址0FF80H,可以通过给8279状态口送入命令字使其执行不同的指令,在通过数据口送入要显示的数据,使8279控制的8个数码管显示送入的数据。
二.硬件连接电路图*由于实验箱内的电路图已经连接好了,所以在实验箱表面上不需要连接电路,只需确保跳冒接通了8279而不是8255即可。
在实习期间使用的LCA51ET软件内部的实验帮助中找到了8279的内部连接图,在分析完下图后,认为完全可以将其用做本次实验的硬件电路图。
三.软件流程图四.软件清单Z8279 EQU 0FF82HD8279 EQU 0FF80HORG 0000HAJMP MAIN MAIN: MOV SP,#40HLCALL INTI8279MOV R0,#70HMOV R6,#00HMOV R7,#08H LOOP1: MOV A,R6MOV @R0,AINC R0INC R6DJNZ R7,LOOP1LCALL INTI8279LCALL DISLEDLCALL NKBHITSJMP $INTI8279: MOV DPTR,#Z8279 ;8279的初始化指令MOV A,#0D1HMOVX @DPTR,AWAIT: MOVX A,@DPTRJB ACC.7,WAITMOV A,#00H ;方式为8个字符左端送入MOVX @DPTR,ASETB EARETNKBHIT: MOV DPTR,#Z8279 ;键盘扫描子程序,判断是否有MOVX A,@DPTR ; 键按下ANL A,#07HJNZ GETVALMOV A,#00HSJMP NKBHITGETVAL: MOV A,#40H ;有键被按下时,跳转至此MOVX @DPTR,A ;并将键值转化为码表序号MOV DPTR,#D8279MOVX A,@DPTRANL A,#3FHMOV DPTR,#LEDSEGMOVC A,@A+DPTRMOV DPTR,#D8279MOVX @DPTR,ASJMP NKBHITDISLED: PUSH DPL ;查表显示部分,将得到的码表PUSH DPH ;序号对应转化为七段码,并由PUSH ACC ;8279控制进行显示MOV DPTR,#Z8279MOV A,#90HMOVX @DPTR,AMOV R0,#70HMOV R7,#08HMOV DPTR,#D8279DL0: MOV A,@R0ADD A,#12MOVC A,@A+PCMOVX @DPTR,AINC R0DJNZ R7,DL0POP ACCPOP DPHPOP DPLRETLEDSEG: DB 3FH,06H,5BH,4FH,66H,6DHDB 7DH,07H,7FH,6FH,77H,7CHDB 39H,5EH,79H,71HEND一.功能说明在8个LED上依次显示1-8,然后显示按下的键的键值。
自动化论文 键盘显示控制器8279应用实验
本科学年实训论文题目键盘显示控制器8279应用实验院系专业名称自动化年级 2008 级学生姓名指导教师2011年07月18日键盘显示控制器8279应用实验摘要在对8279键盘/显示接口分析的基础上,设计实现8位LED七段数码管显示驱动和16键盘输入电路。
利用可编程8279可实现对键盘/显示的自动扫描,以减轻CUP负担,其工作稳定,不会出现误操作,且程序实现简单。
本系统采用8031 单片机与8279 芯片的显示接口组成对LED 数码管应用系统的显示驱动电路。
具有可靠性高、价格低、使用方便等特点,适合数据显示的计算机应用系统使用。
关键词:8279,键盘,LED显示,扫描,接口8279 KEYBOARD DISPLAY CONTROLLER BASED ON THE APPLICATIONABSTRASTIn 8279 keyboard / display interface based on the analysis, design and implementation 8-digit LED seven segment display driver, and keyboard input circuit 16. 8279 can be realized using programmable keyboard / display automatically scans, to reduce the burden of CUP, their job stability, not to misuse, and the procedure simple. The system uses the 8031 and 8279 chip components on the LED display interface applications, digital display drive circuit. High reliability, low price, easy to use features, the computer application for data display system.KEYWORDS: 8279 , keyboard , LED display , scan , interface目录摘要 (II)ABSTRAST ................................................................................................................ I II 第一章引言.. (1)1.1 实验目的 (1)1.2 实验内容 (1)1.2 实验步骤和要求 (1)第二章8279的介绍 (2)2.1 8279功能介绍 (2)2.1.1 数据线 (2)2.1.2 地址线 (2)2.1.3 控制线 (2)2.2 8279的工作方式 (3)2.2.1 键盘工作方式 (3)2.2.2 显示方式 (3)2.2.3 传感器方式 (3)2.3 8279的命令字及其格式 (4)2.3.1 键盘/显示命令 (4)2.3.2 时钟编程命令 (5)2.3.3 读FIFO/传感器RAM命令 (6)2.3.4 读显示RAM命令 (6)2.3.5 写显示RAM命令 (6)2.3.6 显示器禁止写入/熄灭命令 (6)2.3.7 清除(显示RAM和FIFO中的内容)命令 (7)2.3.8 结束中断/出错方式设置命令 (7)2.4 8279的状态字及其格式 (8)2.5 8279数据输入/输出格式 (8)2.5.1 键盘扫描方式数据输入格式 (8)2.5.2 传感器方式及选通方式数据输入格式 (9)2.6 8279译码和编码方式 (9)第三章硬件电路及描述 (11)3.1 74LS138译码器 (11)3.1.1 74LS138集成译码器逻辑图及工作原理 (11)3.1.2 74LS138译码器引脚图和逻辑符号 (12)3.1.3 74LS138译码器的真值表 (13)3.2 74LS244 (14)3.2.1 74LS244引脚图 (14)3.2.2 74LS244的工作极限值 (14)3.2.3 功能表 (14)3.3 4*4矩阵键盘 (14)3.3.1 矩阵键盘的电路 (14)3.3.2 矩阵键盘的工作原理 (15)3.4 数码管动态扫描显示电路 (16)第四章软件设计流程及描述 (17)4.1软件设计流程 (17)4.2 keil软件的介绍和应用 (19)4.2.1 系统概述 (19)4.2.2 Keil C51单片机软件开发系统的整体结构 (19)4.2.3 Keil的优点 (20)第五章总结 (21)参考文献 (22)附录一源程序代码 (23)附录二实验中的软件和硬件记录 (26)内蒙古大学鄂尔多斯学院08自动化课程实训报告第一章引言1.1 实验目的1、掌握8031系统中,扩展8279键盘显示接口的方法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(0F000H)CS1 A0
(B2)2M
VCC
OE1
1
A1
2
A2
4
A3
6
A4
8
Y4
12
Y3
14
Y2
16
Y1
18
Y8
3
Y7
5
GND
10
Y6
7
Y5
9
A5
11
VCC
20
OE2
19
A6
13
A8
17
A7
15
SN74LS240P
U40
OUTA0
27
OUTB0
31
OUTA1
26
OUTB1
30
OUTA2
25
OUTB2
29
OUTA3
24
OUTB3
28
DB0
12
BD
23
DB1
13
DB2
14
SL0
32
DB3
15
SL1
33
DB4
16
SL2
34
DB5
17
SL3
35
DB6
18
DB7
19
RL0
38
RL1
39
IRQ
4
RL2
1
RL3
2
CS
22
RL4
5
RD
10
RL5
6
WR
11
RL6
7
A0
21
RL7
8
CLK
3
SHIFT
36
RESET
9
CNTL/S
37
8279
U37
D0
D1
D2
D3
D4
D5
D6
D7
RST
WR
RD
8279
1
2
3
4
5
6
7
8
JP62
A
1
B
2
C
3
OE2A
4
OE2B
5
OE1
6
Y7
7
GND
8
Y6
9
Y5
10
Y4
11
Y3
12
Y2
13
Y1
14
Y0
15
VCC
16
SN74LS138N
U39
VCC
VCC
12345678
JP93
a
b
c
d
f
g
dp
e
CLK
A0
INT
OE1
1
A1
2
A2
4
A3
6
A4
8
Y4
12
Y3
14
Y2
16
Y1
18
Y8
3
Y7
5
GND
10
Y6
7
Y5
9
A5
11
VCC
20
OE2
19
A6
13
A8
17
A7
15
SN74LS240P
U40
1
2
3
4
5
6
7
8
JP78
a
b
c
d
f
g
dp
e
VCC
1
2
3
4
5
6
7
8
9
10K
R123
VCC
CS
1
2
3
4
5
6
7
8
JP77
C
D
B
A
LJMP STAR
ORG 0100H
STAR: MOV SP,#60H
ACALL INIT8279 ;初始化子程序
MOV KeyCount,#0
STAR1: CALL SCAN_KEY ;键扫描
JNC STAR1 ;没有按键
XCH A,KeyCount
INC A
CJNE A,#9,STAR2
MOV KeyCount,#0
ACALL INIT8279_1 ;8个数码块全有字符显示后,再按键,清除显示
SJMP STAR1
STAR2: XCH A,KeyCount
CALL KEY_NUM ;键值转换为键号
MOV DPTR,#LED_TAB ;字型码表
MOVC A,@A+DPTR
CALL WRITE_DATA
SJMP STAR1
;8279初始化
INIT8279: MOV A,#34H ;可编程时钟设置,设置分频系数(20分频) MOVX @DPTR,A
CLR A ;8*8字符显示,左边输入, 外部译码键扫描方式
MOV DPTR,#CMD_8279
MOVX @DPTR,A
INIT8279_1: CALL CLEAR ;清显示
MOV A,#90H ;从最后一个数码管开始移位显示
MOVX @DPTR,A
RET
CLEAR: MOV A,#0DEH ;清除命令
MOV DPTR,#CMD_8279
MOVX @DPTR,A
WAIT1: MOVX A,@DPTR
JB ACC.7,WAIT1 ;显示RAM清除完毕吗?
RET
SCAN_KEY: MOV DPTR,#CMD_8279
MOVX A,@DPTR ;读状态
READ_FIFO: ANL A,#7
JZ NO_KEY ;是否有键按下
READ: MOV A,#40H
MOVX @DPTR,A ;读FIFO RAM
MOV DPTR,#DATA_8279
MOVX A,@DPTR
SETB C ;有键
SCAN_KEY1: RET
NO_KEY: CLR C ;无键按下,清CY
SJMP SCAN_KEY1
KEY_NUM: ANL A,#3FH
RET
WRITE_DATA: MOV DPTR,#DATA_8279
MOVX @DPTR,A
RET
LED_TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
DB 080H,90H,88H,83H,0C6H,0A1H,86H,8EH
END
七、实验扩展及思考
重新编写实验三双字节BCD码加法,自己编写键扫描、显示程序。