实现特定功能的键盘及LED显示 接口课程设计要点

合集下载

独立按键控制led课程设计

独立按键控制led课程设计

独立按键控制led课程设计一、课程目标知识目标:1. 学生能理解独立按键的工作原理,掌握其电路连接方式。

2. 学生能掌握LED的基本特性,了解其在电路中的应用。

3. 学生能理解独立按键控制LED的原理,掌握相关编程方法。

技能目标:1. 学生能独立完成独立按键与LED的电路连接,并进行功能测试。

2. 学生能编写简单的程序,实现独立按键控制LED的亮灭、闪烁等功能。

3. 学生能运用所学知识解决实际问题,具备一定的创新意识和动手能力。

情感态度价值观目标:1. 学生通过课程学习,培养对电子技术的兴趣,提高学习积极性。

2. 学生在团队合作中,学会沟通、协作,培养团队精神。

3. 学生在实践过程中,树立正确的价值观,认识到科技对生活的影响。

课程性质:本课程为实践性课程,结合理论教学,注重培养学生的动手能力、创新意识和实际应用能力。

学生特点:学生处于初中阶段,具有一定的物理知识和动手能力,对电子技术有一定的好奇心和兴趣。

教学要求:教师应注重理论与实践相结合,引导学生主动参与实践,鼓励学生创新思维,提高解决问题的能力。

同时,关注学生的情感态度价值观培养,使学生在掌握知识技能的同时,形成良好的综合素质。

通过分解课程目标为具体的学习成果,为后续教学设计和评估提供依据。

二、教学内容1. 理论知识:- 介绍独立按键的原理、功能及其在电路中的应用。

- 讲解LED的基本结构、特性以及在电路中的作用。

- 分析独立按键控制LED的电路原理及编程方法。

2. 实践操作:- 指导学生进行独立按键与LED的电路连接,确保正确无误。

- 帮助学生编写程序,实现独立按键控制LED的亮灭、闪烁等功能。

- 引导学生进行功能测试,分析并解决可能出现的故障。

3. 教学大纲:- 第一课时:介绍独立按键和LED的基本概念、原理及应用。

- 第二课时:讲解独立按键控制LED的电路原理及编程方法。

- 第三课时:指导学生进行电路连接和程序编写,实现功能。

- 第四课时:进行功能测试,总结问题,提高实践能力。

键盘及LED显示实验

键盘及LED显示实验

实验三键盘及LED显示实验一、实验内容利用8255可编程并行接口控制键盘及显示器,当有按键按下时向单片机发送外部中断请求(INT0,INT1),单片机扫描键盘,并把按键输入的键码一位LED 显示器显示出来。

二、实验目的及要求(一)实验目的通过该综合性实验,使学生掌握8255扩展键盘和显示器的接口方法及C51语言的编程方法,进一步掌握键盘扫描和LED显示器的工作原理;培养学生一定的动手能力。

(二)实验要求1.学生在实验课前必须认真预习教科书与指导书中的相关内容,绘制流程图,编写C51语言源程序,为实验做好充分准备。

2.该实验要求学生综合利用前期课程及本门课程中所学的相关知识点,充分发挥自己的个性及创造力,独立操作完成实验内容,并写出实验报告。

三、实验条件及要求计算机,C51语言编辑、调试仿真软件及实验箱50台套。

四、实验相关知识点1.C51编程、调试。

2.扩展8255芯片的原理及应用。

3.键盘扫描原理及应用。

4.LED显示器原理及应用。

5.外部中断的应用。

五、实验说明本实验仪提供了8位8段LED显示器,学生可选用任一位LED显示器,只要按地址输出相应的数据,就可以显示所需数码。

六、实验原理图P1口桥接。

八、实验参考流程图1.主程序流程图2.外中断服务程序流程图外部中断0 外部中断1定时器0中断程序,用于消抖动:3.LED显示程序流程图九、C51语言参考源程序#include "reg52.h"unsigned char KeyResult; //存放键值unsigned char buffer[8]; //显示缓冲区bit bKey; //是否有键按下xdata unsigned char P_8255 _at_ 0xf003; //8255的控制口xdata unsigned char PA_8255 _at_ 0xf000; //8255的PA口xdata unsigned char PB_8255 _at_ 0xf001; //8255的PB口xdata unsigned char PC_8255 _at_ 0xf002; //8255的PC口code unsigned char SEG_TAB[] = { //段码0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e,0x0};sbit bLine0 = P3^2;sbit bLine1 = P3^3;//延时1msvoid Delay1ms(){unsigned char i;i = 0;while (--i);}//显示void Display(){unsigned char i = 0x7f;unsigned char j;for (j = 0; j < 8; j++){PA_8255 = i; //扫描PB_8255 = SEG_TAB[buffer[j]]; //段数据i = i / 2 + 0x80;Delay1ms();}}//更新显示缓冲区数据void RefurbishData(){char i;for (i = 7; i >0; i--)buffer[i] = buffer[i-1];buffer[0] = KeyResult;}void Int0Int() interrupt 0{unsigned char i = 0x80;unsigned char KeyResult0 = 0x0;EX0 = 0; //关外部中断0P_8255 = 0x89; //PC口输入bLine0 = 0; //P3.2作行输出while (i){if ((PC_8255 & i) == 0)break;KeyResult0++;i >>= 1;}P_8255 = 0x80; //8255的PA、PB、PC口全作输出口PC_8255 = 0;bLine0 = 1;if (i){TH0 = 60; //定时中断计数器初值TL0 = 176; //定时50msTR0 = 1;KeyResult = KeyResult0;}IE0 = 0; //清除中断EX0 = 1; //开外部中断0}void Int1Int() interrupt 2{unsigned char i = 0x80;unsigned char KeyResult0 = 8;EX1 = 0; //关外部中断0P_8255 = 0x89; //PC口输入bLine1 = 0; //P3.2作行输出while (i){if ((PC_8255 & i) == 0)break;KeyResult0++;i >>= 1;}P_8255 = 0x80; //8255的PA、PB、PC口全作输出口PC_8255 = 0;bLine1 = 1;if (i){TH0 = 60; //定时中断计数器初值TL0 = 176; //定时50msTR0 = 1;KeyResult = KeyResult0;}IE1 = 0; //清除中断EX1 = 1; //开外部中断0}//50ms中断服务程序void INT_Timer0(void) interrupt 1{if (((KeyResult < 8) && !bLine0) ||((KeyResult >= 8) && !bLine1)){bKey = 1; //有键按下,键值在KeyResult中}TR0 = 0;}void main(){char i;bKey = 0; //没有键按下TMOD = 1; //定时器0:方式一P_8255 = 0x80; //8255的PA、PB、PC口全作输出口PC_8255 = 0x0;ET0 = 1; //开定时器0中断EX0 = 1; //开外部中断0EX1 = 1; //开外部中断1IT0 = 1; //边沿触发IT1 = 1; //边沿触发EA = 1; //允许中断for (i = 0; i < 8; i++)buffer[i] = 0x10;// TR0 = 1; //开定时器T0// bRefurbish = 1;while (1){if (bKey){bKey = 0;RefurbishData();}Display(); //调用显示}}十、实验实施步骤1.仔细阅读实验内容及要求,编写C51源程序。

第五章 独立式键盘与LED数码管显示器(本科)

第五章 独立式键盘与LED数码管显示器(本科)

按下。
80C51
VCC
KEYA ห้องสมุดไป่ตู้1.0
KEYB P1.1
KEYC P1.2
KEYD P1.3
(2)独立式键盘的程序设计 一般把键盘扫描程序设计成子程序,以便其它各程序调用。
程序设计通常采用查询法。假设键盘扫描子程序的名称为KEY, 则键盘扫描子程序KEY应具有以下功能:
(a)判定有无按键动作; (b)去抖动; (c)确认是否真正有闭合键; (d)计算并保存闭合键键码(键号); (e)判定闭合键是否释放; (f)恢复闭合键键码(键号)。
械触点式开关按键。 (b)机械触点式开关按键的功能及特点; 1)机械触点式开关按键的功能: 把开关按键机械上的通断关系转换成为电气上的逻辑关系。
也就是说,它能提供标准的TTL逻辑电平,以便与通用数字系统 的逻辑电平相兼容。
2)机械触点式开关按键的特点: 机械触点式开关按键的理想波形:见图 机械触点式开关按键的实际波形:见图 机械开关特点:闭合时,不会马上稳定地接通。
矩阵式键盘主要用于按键较多的场合,也称行列式键盘。 (3)MCS-51单片机键盘接口方法及接口芯片:
(a)利用单片机芯片本身的并行口; (b)利用单片机芯片本身的串行口; (c)利用通用接口芯片(8255、8155等); (d)利用专用接口芯片8279。 (4)单片机键盘接口电路应完成的操作功能: (a)判定是否有闭合键; (b)确定闭合键的位置; (c)形成闭合键的键码; (d)排除多键、串键及去抖动。
但如果在触点抖动期间检测按键的通与断状态,可能导致判 断出错,即按键一次按下或释放被错误地认为是多次操作,这种 情况是不允许出现的。为了克服按键触点机械抖动所致的检测误 判,确保CPU对一次按键动作只确认一次按键,必须采取去抖动 措施。 (7)消除按键抖动的措施:

dspled键盘按键显示课程设计

dspled键盘按键显示课程设计

dspled键盘按键显示课程设计一、课程目标知识目标:1. 学生能理解dspled键盘按键显示的基本原理,掌握其与计算机硬件和软件的关联性。

2. 学生能掌握dspled键盘按键显示的相关术语和概念,如背光、扫描码、映射等。

3. 学生能了解dspled键盘按键显示在不同应用场景中的作用和重要性。

技能目标:1. 学生能够独立进行dspled键盘按键显示的组装和调试。

2. 学生能够运用dspled键盘按键显示进行基本的编程操作,实现简单的功能。

3. 学生能够运用dspled键盘按键显示解决实际问题,提高实际操作能力。

情感态度价值观目标:1. 培养学生对计算机硬件和软件的兴趣,激发学习热情。

2. 培养学生的团队合作意识,学会在小组合作中分享、交流和协作。

3. 培养学生勇于尝试、不断探索的精神,提高面对问题的解决能力。

课程性质:本课程属于实践性较强的学科,注重理论知识与实际操作的相结合。

学生特点:学生处于好奇心强、求知欲旺盛的年级,具备一定的计算机基础,但对硬件和软件的结合尚需深入了解。

教学要求:教师应注重启发式教学,引导学生主动探究,关注学生的个体差异,提供个性化的指导。

同时,注重理论与实践相结合,提高学生的实际操作能力。

通过本课程的学习,使学生达到课程目标,为后续相关课程打下坚实基础。

二、教学内容1. dspled键盘按键显示原理:介绍dspled的工作原理,包括背光技术、扫描码的生成与传输、映射过程等,对应教材第3章“键盘与显示技术”。

2. dspled键盘按键显示组件:讲解键盘按键显示的各个组件,如LED、电路板、驱动程序等,以及它们的组装方法,对应教材第4章“计算机硬件组成”。

3. dspled编程操作:介绍如何通过编程实现键盘按键显示的功能,包括编程语言的选择、编程技巧等,对应教材第6章“计算机编程基础”。

4. dspled应用案例:分析dspled在实际应用场景中的使用,如游戏开发、嵌入式系统等,对应教材第8章“计算机硬件应用实例”。

(整理)接口课程设计实现特定功能的键盘及LED显示

(整理)接口课程设计实现特定功能的键盘及LED显示

实现特定功能的键盘及LED显示了解键盘及LED显示接口原理,设计实验电路图完成以下功能:1. 按1键显示年;2. 按2键显示月日;3. 按3键显示GOOD ;4. 按4键数码管由左到右字符“0”循环显示。

5.自行设计特效显示功能。

CODE SEGMENTASSUME CS:CODE,DS:CODESTART: MOV AX,CSMOV DS,AXINPUT: CALL KEYBOARDLEA SI,KEYBUFFER;取按键的值MOV AL,[SI]CMP AL,1JNZ L0JMP SHOW_YEAR ;显示年L0:CMP AL,2JNZ L1JMP SHOW_MD ;显示月日L1:CMP AL,3JNZ L2JMP SHOW_GOOD ;显示GOODL2:CMP AL,4JNZ L3JMP SHOW_0 ;由左到右字符“0”循环显示L3:CMP AL,7JNZ L4JMP SHOW_SUN ;显示SUNL4:JMP SHOW_HERO;显示HERO;----------------------------------结束---------------------------------------------;--------------------------------显示年开始----------------------------------------SHOW_YEAR:MOV CH,01111111B ;初始化位选码01111111BMOV BH,11110111B ;显示位选结束位LEA SI,YEARBUFFERCALL DISPLAYDEC COUNT ;重复显示COUNT次JNZ SHOW_YEARMOV COUNT,250JMP INPUT;--------------------------------------结束-------------------------------------------;-----------------------------------显示月开始---------------------------------------SHOW_MD:MOV CH,01111111B ;初始化位选码01111111BMOV BH,11110111B ;显示位选结束位LEA SI,MDBUFFERCALL DISPLAYDEC COUNT ;重复显示COUNT次JNZ SHOW_MDMOV COUNT,250JMP INPUT;---------------------------------结束--------------------------------------------------;---------------------------------显示GOOD-----------------------------------------------SHOW_GOOD:MOV CH,01111111B ;初始化位选码01111111BMOV BH,11110111B ;显示位选结束位LEA SI,GOODBUFFERCALL DISPLAYDEC COUNT ;重复显示COUNT次JNZ SHOW_GOODMOV COUNT,250JMP INPUT;----------------------------------结束--------------------------------------------------;---------------------------------显示HERO-----------------------------------------------SHOW_HERO:DE: MOV CH,01111111B ;初始化位选码01111111B LEA SI, HEROBUFFERMOV BH,11110111B ;显示位选结束位CALL DISPLAYDEC COUNT ;重复显示COUNT次JNZ SHOW_HEROMOV COUNT,10DEC XUNMOV COUNT,10CALL SHOWDELAY_HCMP XUN,00H ;闪光显示JNZ DEMOV XUN ,15MOV COUNT ,250JMP INPUT;----------------------------------结束-------------------------------------------------;---------------------------显示由左到右字符“0”循环------------------------------------SHOW_0: MOV BX,3LSHOW0:MOV CH,01111111B ;初始化位选码01111111LEA DI,LINBUFFERMOV AL,80HMOV DX,203HOUT DX,AL ;再次初始化8255DISPLAY_0:MOV AL,CHMOV DX,202HOUT DX,AL;位选码送PC口MOV AL,[DI]MOV DX,200H;MOV AL,5BHOUT DX,AL ;显示段码CALL SHOWDELAY0ROR CH,1 ;指向下一个数码管CMP CH,11110111BJNZ DISPLAY_0DEC BX ;重复显示3次JNZ LSHOW0JMP INPUT;----------------------------------结束-------------------------------------------------;-----------------------------显示SUN-------------------------------------------SHOW_SUN:MOV CH,01111111B ;初始化位选码01111111BMOV BH,11101111B ;显示位选结束位LEA SI,SUNBUFFERCALL DISPLAYDEC COUNT ;重复显示COUNT次JNZ SHOW_SUNMOV COUNT,250JMP INPUT;-----------------------------------结束------------------------------------------------;----------------------------------显示延时----------------------------------------------- SHOWDELAY PROC NEARPUSH BXPUSH CXMOV BX,10SHOWDEL1:MOV CX,100SHOWDEL2:LOOP SHOWDEL2DEC BXJNZ SHOWDEL1POP CXPOP BXRETSHOWDELAY ENDP;-----------------------------------结束-----------------------------------------------;----------------------------------显示延时0--------------------------------------------SHOWDELAY0 PROC NEARPUSH BXPUSH CXMOV BX,100SHOW0DEL1:MOV CX,2000SHOW0DEL2:LOOP SHOW0DEL2DEC BXJNZ SHOW0DEL1POP CXPOP BXRETSHOWDELAY0 ENDP;-----------------------------------结束---------------------------------------------SHOWDELAY_H PROC NEARPUSH BXPUSH CXMOV BX,10SHOW_HDEL1:MOV CX,2000SHOW_HDEL2:LOOP SHOW_HDEL2DEC BXJNZ SHOW_HDEL1POP CXPOP BXRETSHOWDELAY_H ENDP;---------------------------------显示程序------------------------------------------DISPLAY PROC NEARMOV AL,80HMOV DX,203HOUT DX,AL ;再次初始化8255DISPLAY1:MOV AL,CHMOV DX,202HOUT DX,AL ;位选码送PC口MOV AL,[SI]MOV DX,200HOUT DX,AL ;显示段码CALL SHOWDELAY ;延时INC SIROR CH,1 ;指向下一个数码管CMP CH,BHJNZ DISPLAY1RETDISPLAY ENDP;-----------------------------------结束---------------------------------------------;---------------------------------读取按键盘------------------------------------------KEYBOARD PROC NEARLEA SI,KEYBUFFERMOV AL,10000001B ;初始化8255控制字MOV DX,203HOUT DX,ALKS1:CALL KS ;读取按键CMP AL,0FH ;判断有无按键JZ KS1CALL DELAYCALL KSCMP AL,0FHJZ KS1MOV BL,0EFH ;初始化列码MOV BH,0 ;初始化列计数器AGAIN:MOV DX,202HMOV AL,BLOUT DX,AL ;输出列码IN AL,DX ;读取行码AND AL,0FHCMP AL,0FHJZ NEXT ;该列无键闭合,准备下一列扫描CMP AL,0DH ;判断列是否是第一个键闭合?JNZ TWOMOV AL,1JMP FREETWO: ;判断列是否是第二个键闭合?CMP AL,0BHJNZ THREEMOV AL,4JMP FREETHREE: ;判断列是否是第三个键闭合?CMP AL,07HJNZ NEXTMOV AL,7FREE:PUSH AXWAIT1:CALL KSCMP AL,0FHJNZ WAIT1POP AXADD AL,BHMOV [SI],AL ;保存键值,并返回JMP RETURNNEXT:INC BHROL BL,1CMP BL,0FEHJNZ AGAINJMP KS1KS PROC NEARMOV DX,202HMOV AL,0FHOUT DX,ALIN AL,DXAND AL,0FHRETKS ENDPDELAY PROC NEARPUSH BXPUSH CXMOV BX,2000 DEL1:MOV CX,10DEL2:LOOP DEL2DEC BXJNZ DEL1POP CXPOP BXRETDELAY ENDP RETURN:RET KEYBOARD ENDPEXIT:MOV AH,4CHINT 21HXUN DB 15YEARBUFFER DB 5BH,3FH,3FH,6FH ;存放年2009MDBUFFER DB 3FH,6FH,3FH,66H ;存放月日0904GOODBUFFER DB 6FH,5CH,5CH,5EH ;GOODKEYBUFFER DB 1LINBUFFER DB 3FHHEROBUFFER DB 76H,79H,77H,3FH ;HEROSUNBUFFER DB 6DH,3EH,37H ;SUNCOUNT DB 250 ;显示次数----------------------------------结束-----------------------------------------CODE ENDSEND START。

接口课程设计实现特定功能的键盘及LED显示

接口课程设计实现特定功能的键盘及LED显示

接口课程设计实现特定功能的键盘及LED显示实现特定功能的键盘及LED显示了解键盘及LED显示接口原理,设计实验电路图完成以下功能:1. 按1键显示年;2. 按2键显示月日;3. 按3键显示GOOD ;4. 按4键数码管由左到右字符“0”循环显示。

5.自行设计特效显示功能。

CODE SEGMENTASSUME CS:CODE,DS:CODESTART: MOV AX,CSMOV DS,AXINPUT: CALL KEYBOARDLEA SI,KEYBUFFER;取按键的值MOV AL,[SI]CMP AL,1JNZ L0JMP SHOW_YEAR ;显示年L0:CMP AL,2JNZ L1JMP SHOW_MD ;显示月日L1:CMP AL,3JNZ L2JMP SHOW_GOOD ;显示GOODL2:CMP AL,4JNZ L3JMP SHOW_0 ;由左到右字符“0”循环显示L3:CMP AL,7JNZ L4JMP SHOW_SUN ;显示SUNL4:JMP SHOW_HERO;显示HERO;----------------------------------结束--------------------------------------------- ;--------------------------------显示年开始---------------------------------------- SHOW_YEAR:MOV CH,01111111B ;初始化位选码01111111BMOV BH,11110111B ;显示位选结束位LEA SI,YEARBUFFERCALL DISPLAYDEC COUNT ;重复显示COUNT次JNZ SHOW_YEARMOV COUNT,250JMP INPUT;--------------------------------------结束-------------------------------------------;-----------------------------------显示月开始---------------------------------------SHOW_MD:MOV CH,01111111B ;初始化位选码01111111BMOV BH,11110111B ;显示位选结束位LEA SI,MDBUFFERCALL DISPLAYDEC COUNT ;重复显示COUNT次JNZ SHOW_MDMOV COUNT,250JMP INPUT;---------------------------------结束--------------------------------------------------;---------------------------------显示GOOD-----------------------------------------------SHOW_GOOD:MOV CH,01111111B ;初始化位选码01111111BMOV BH,11110111B ;显示位选结束位LEA SI,GOODBUFFERCALL DISPLAYDEC COUNT ;重复显示COUNT次JNZ SHOW_GOODMOV COUNT,250JMP INPUT;----------------------------------结束--------------------------------------------------;---------------------------------显示HERO-----------------------------------------------SHOW_HERO:DE: MOV CH,01111111B ;初始化位选码01111111B LEA SI, HEROBUFFERMOV BH,11110111B ;显示位选结束位CALL DISPLAYDEC COUNT ;重复显示COUNT次JNZ SHOW_HEROMOV COUNT,10DEC XUNMOV COUNT,10CALL SHOWDELAY_HCMP XUN,00H ;闪光显示JNZ DEMOV XUN ,15MOV COUNT ,250JMP INPUT;----------------------------------结束-------------------------------------------------;---------------------------显示由左到右字符“0”循环------------------------------------SHOW_0: MOV BX,3LSHOW0:MOV CH,01111111B ;初始化位选码01111111LEA DI,LINBUFFERMOV AL,80HMOV DX,203HOUT DX,AL ;再次初始化8255DISPLAY_0:MOV AL,CHMOV DX,202HOUT DX,AL;位选码送PC口MOV AL,[DI]MOV DX,200H;MOV AL,5BHOUT DX,AL ;显示段码CALL SHOWDELAY0ROR CH,1 ;指向下一个数码管CMP CH,11110111BJNZ DISPLAY_0DEC BX ;重复显示3次JNZ LSHOW0JMP INPUT;----------------------------------结束------------------------------------------------;-----------------------------显示SUN------------------------------------------- SHOW_SUN:MOV CH,01111111B ;初始化位选码01111111BMOV BH,11101111B ;显示位选结束位LEA SI,SUNBUFFERCALL DISPLAYDEC COUNT ;重复显示COUNT次JNZ SHOW_SUNMOV COUNT,250JMP INPUT;-----------------------------------结束------------------------------------------------;----------------------------------显示延时----------------------------------------------- SHOWDELAY PROC NEARPUSH BXPUSH CXMOV BX,10SHOWDEL1:MOV CX,100SHOWDEL2:LOOP SHOWDEL2DEC BXJNZ SHOWDEL1POP CXPOP BXRETSHOWDELAY ENDP;-----------------------------------结束-----------------------------------------------;----------------------------------显示延时0-------------------------------------------- SHOWDELAY0 PROC NEARPUSH BXPUSH CXMOV BX,100SHOW0DEL1:MOV CX,2000SHOW0DEL2:LOOP SHOW0DEL2DEC BXJNZ SHOW0DEL1POP CXPOP BXRETSHOWDELAY0 ENDP;-----------------------------------结束--------------------------------------------- SHOWDELAY_H PROC NEARPUSH BXPUSH CXMOV BX,10SHOW_HDEL1:MOV CX,2000SHOW_HDEL2:LOOP SHOW_HDEL2DEC BXJNZ SHOW_HDEL1POP CXPOP BXRETSHOWDELAY_H ENDP;---------------------------------显示程序------------------------------------------ DISPLAY PROC NEARMOV AL,80HMOV DX,203HOUT DX,AL ;再次初始化8255DISPLAY1:MOV AL,CHMOV DX,202HOUT DX,AL ;位选码送PC口MOV AL,[SI]MOV DX,200HOUT DX,AL ;显示段码CALL SHOWDELAY ;延时INC SIROR CH,1 ;指向下一个数码管CMP CH,BHJNZ DISPLAY1RETDISPLAY ENDP;-----------------------------------结束---------------------------------------------;---------------------------------读取按键盘------------------------------------------ KEYBOARD PROC NEARLEA SI,KEYBUFFERMOV AL,10000001B ;初始化8255控制字MOV DX,203HOUT DX,ALKS1:CALL KS ;读取按键CMP AL,0FH ;判断有无按键JZ KS1CALL DELAYCALL KSCMP AL,0FHJZ KS1MOV BL,0EFH ;初始化列码MOV BH,0 ;初始化列计数器AGAIN:MOV DX,202HMOV AL,BLOUT DX,AL ;输出列码IN AL,DX ;读取行码AND AL,0FHCMP AL,0FHJZ NEXT ;该列无键闭合,准备下一列扫描 CMP AL,0DH ;判断列是否是第一个键闭合? JNZ TWOMOV AL,1JMP FREETWO: ;判断列是否是第二个键闭合?CMP AL,0BHJNZ THREEMOV AL,4JMP FREETHREE: ;判断列是否是第三个键闭合?CMP AL,07HJNZ NEXTMOV AL,7FREE:PUSH AXWAIT1:CALL KSCMP AL,0FHJNZ WAIT1POP AXADD AL,BHMOV [SI],AL ;保存键值,并返回 JMP RETURNNEXT:INC BHROL BL,1CMP BL,0FEHJNZ AGAINJMP KS1KS PROC NEARMOV DX,202HMOV AL,0FHOUT DX,ALIN AL,DXAND AL,0FHRETKS ENDPDELAY PROC NEARPUSH BXPUSH CXMOV BX,2000 DEL1:MOV CX,10 DEL2:LOOP DEL2 DEC BXJNZ DEL1POP CXPOP BXRETDELAY ENDP RETURN:RET KEYBOARD ENDPEXIT:MOV AH,4CHINT 21HXUN DB 15YEARBUFFER DB 5BH,3FH,3FH,6FH ;存放年2009MDBUFFER DB 3FH,6FH,3FH,66H ;存放月日0904GOODBUFFER DB 6FH,5CH,5CH,5EH ;GOODKEYBUFFER DB 1LINBUFFER DB 3FHHEROBUFFER DB 76H,79H,77H,3FH ;HEROSUNBUFFER DB 6DH,3EH,37H ;SUNCOUNT DB 250 ;显示次数----------------------------------结束----------------------------------------- CODE ENDSEND START。

实现特定功能的键盘及LED显示_课程设计

实现特定功能的键盘及LED显示_课程设计

实现特定功能的键盘及LED显示_课程设计微机原理与接口技术课程设计题目:实现特定功能的键盘及LED显示目录一、实验目的……………………………………二、实验内容……………………………………三、总体设计……………………………………四、实验电路……………………………………五、实验框图……………………………………六、实验程序……………………………………七、实验心得……………………………………1、课程设计目的课程设计是培养和锻炼学生在学习完本门课后综合应用所学理论知识,解决实际工程设计和应用问题的能力的重要教学环节。

它具有动手、动脑和理论联系实际的特点,是培养在校工科大学生理论联系实际、敢于动手、善于动手和独立自主解决设计实践中遇到的各种问题能力的一个重要教学环节。

2、实验设计内容:本次实验的主要内容是在了解键盘及LED显示接口原理的基础上,设计出相应的实验电路,以实现特定功能的键盘及LED显示。

需要完成以下功能:1. 按1键显示年;2. 按2键显示月日;3. 按3键显示GOOD ;4. 按4键数码管由左到右字符“0”循环显示。

5.自行设计特效显示功能。

实验主要涉及可编程的键盘、显示接口芯片8279和可编程中断控制器8259A。

功能1至4是在可编程的键盘、显示接口芯片8279的基础上通过程序实现的。

在功能5中,加入了中断,通过边沿触发产生中断,执行中断服务子程序,以此来时现功能5的特效(在数码管上从左、从右依次显示0—9的数字)。

3、试验设计原理及方案:(含电路原理图、硬件连接示意图、系统功能框图、程序流程图等)3.1 电路原理图3.2 系统功能框图3.3 程序流程图3.4 各功能实现方案3.4.1 功能一按1键显示年当可编程的键盘、显示接口芯片8279扫描寄存器AL=02H时,说明按键为1号键。

关于显示年份,首先定义一个显示缓冲区,用于存储表示年份的数字。

然后依次读取其值,经过换码,再通过8279以左端入口方式显示与数码管上。

单片机键盘显示课程设计报告要点

单片机键盘显示课程设计报告要点

<<单片机原理及应用课程设计报告>> 题目:键盘按键识别及LED数码显示学院:工程学院专业:自动化班级: 1101班姓名:指导教师:2013年12月19日目录1课程设计的任务与要求 (1)2课程设计总体分析介绍 (1)3各部分工作电路的详细介绍 (3)参考书目 (11)附录 (12)第1节课程设计的任务与要求1.1 课程设计题目与要求1.课程设计题目:键盘按键识别及LED数码显示2.课程设计要求:(1)画出组成部分电路图(2)画出程序流程图,设计程序并通过检查(3)用语言表达工作原理,连接方式及用途等1.2 课程设计目的及内容1.目的:按键是单片机常用的输入设备,操作人员可以通过按键输入指令和数据。

在使用按键是单片机要正确识别按键是否被按下和按下的次数等状态,才能正确执行相关操作。

本实验要实现对按键状态的正确检测并显示相关内容。

2.内容:(1)根据独立式键盘的特点,进行键盘控制系统的整体研究与设计。

(2)LED实时显示按键信息(显示按键号)。

(3)通过编写程序实现按键信息的提取和显示。

第2节课程设计系统总体分析介绍2.1 显示部分本设计显示部分是利用动态显示实现的,LED数码管采用共阳极接法。

LED数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极三极管增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,单片机对位选通COM端电路的控制,所以数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。

通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。

在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。

实验2 LED显示实验和键盘编程

实验2 LED显示实验和键盘编程

实验二LED显示实验和键盘编程
实验目的
1.学习LED静态显示和动态显示方法;
2.学习键盘独立按键。

实验内容
1.LED 静态显示。

将J5中的1个PIN连接到GND,P1口J30连接至J31,J32
连接至J1,J19用短路冒短接;从P1口循环输出1-9的显示的段码,并观察显示亮度。

2.LED动态显示。

将J5连接到P2口J16,P1口J30连接至J31,J32连接至
J1,J19用短路冒短接;从P1口循环输出1-9的显示的段码,从P2口输出显示的位码,在6个LED上分别显示1-6 六个数字,且数字稳定显示。

3.安装2中连接电路方法,通过串口控制LED显示。

当串口发出命令后,LED
在指定的位置显示指定的数字,例如:发送“3,2”,则在第3个位置显示数字2。

4.独立按键扫描。

将J5中的PIN8连接到GND,将P1口J30连接至J8,编程
实现扫描按键程序,扫描S1、S5、S9和S13,并将扫描的按键显示到数码管上。

实验方法
做实验时请注意:PIN4和PIN8相当于空脚,因为只有6个数码管,所以做实验时控制这2个脚不起作用。

此外做实验前建议仔细检查电路连接!
图1 实验原理图。

微机原理与接口技术-键盘LED显示【课程设计报告】

微机原理与接口技术-键盘LED显示【课程设计报告】

微机原理与接口技术-键盘LED 显示【课程设计报告】重庆大学课程设计报告课程名称:微机原理与接口技术设计题目:键盘LED显示院系:电气信息学院班级:2007级设计时间:2009年12月第一章概述 (2)1.1学习目的 (2)1.2 计算机的应用 (3)1.3学习计算机的意义 (3)1.4课程设计目的 (4)第二章总体方案设计 (4)2.1 设计注意问题 (4)2.2 总体思路 (5)第三章硬件设计 (5)3.1 8255工作原理 (5)3.2 键盘工作原理 (7)3.3 键特征值的形成 (8)3.4段值的形成 (9)3.5 8255接线图 (11)第四章软件设计 (12)4.1 8255初始化 (12)4.2 键盘扫描的处理方法 (12)4.2.1. 判断是否有键被按下的方法 (12)4.2.2. 判断是否有键被按下的源程序 (13)4.2.3 防抖动 (13)4.2.4.防抖动的延时子程序 (14)4.3 程序核心部分 (14)4.3.1 逐行扫描 (14)4.3.2逐行扫描的源程序 (15)第五章源程序代码 (15)5.1 根据整体思路以及软件设计得到的代码. 155.2 以上代码存在问题分析 (19)第六章难点分析 (20)第七章体会感慨建议 (25)第八章参考文献 (26)第一章概述1.1学习目的“微机原理与接口技术”是电气工程及其自动化专业的一门重要的专业基础课程。

我们通过该门课的学习,知道了微机的工作原理,微型计算机的基本结构,接口技术及汇编语言程序设计,为后续的课程的学习和今后的工作打下坚实的基础。

通过实验可以培养学生利用计算机技术和编程手段分析,解决专业领域的各种问题的能力和意识,并进一步感受微机发展的微机发展的新技术和新方法。

1.2 计算机的应用目前计算机的应用已经遍布各个行业,如科学计算、数据处理、过程控制、人工智能、网络应用等。

科学和工程计算:科学和工程计算的特点是计算量大,而逻辑关系相对简单,它是计算机重要应用领域之一。

接口课程设计_实现特定功能的键盘及LED显示2

接口课程设计_实现特定功能的键盘及LED显示2

题目三实现特定功能的键盘及LED显示1.了解键盘及LED显示接口设计,绘制出原理图。

2.根据实验箱上提供的硬件资源完成:a、按1键显示年b、按2键显示月日c、按3键显示GOODd、按4键数码管由左到右8字循环显示。

3.设计电路并在实验台上连接线路。

OUTBIT EQU 08002H ; 位控制口OUTSEG EQU 08004H ; 段控制口IN_KEY EQU 08001H ; 键盘读入口DATA SEGMENTLEDBUF DB 6 DUP(?) ; 显示缓冲NUM DB 1 DUP(?) ; 显示的数据DELAYT DB 1 DUP(?)LEDMAP: ; 八段管显示码DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H ;0,1,2,3,4,5,6,7DB 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H,71H ;8,9,A,b,C,d,E,FKEYTABLE: ; 键码定义DB 16H, 15H, 14H, 0FFHDB 13H, 12H, 11H, 10HDB 0DH, 0CH, 0BH, 0AHDB 0EH, 03H, 06H, 09HDB 0FH, 02H, 05H, 08HDB 00H, 01H, 04H, 07HDATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATADELAY PROC NEAR ; 延时子程序PUSH AXPUSH CXMOV AL, 0MOV CX,AXLOOP $POP CXPOP AXRETDELAY ENDPDISPLAYLED PROC NEARMOV BX, OFFSET LEDBUFMOV CL, 6 ; 共6个八段管MOV AH, 00100000B ;从左边开始显示DLOOP:MOV DX, OUTBITMOV AL, 0OUT DX,AL ; 关所有八段管MOV AL, [BX]MOV DX, OUTSEGOUT DX,ALMOV DX, OUTBITMOV AL, AHOUT DX, AL ; 显示一位八段管PUSH AXMOV AH, 1CALL DELAYPOP AXSHR AH, 1INC BXDEC CLJNZ DLOOPMOV DX, OUTBITMOV AL, 0OUT DX,AL ; 关所有八段管RETDISPLAYLED ENDPDISPLAYLED1 PROC NEARMOV CL, 6 ; 共6个八段管;MOV AH, 00000001B ; 从左边开始显示MOV AH,00100000BDLOOP1:MOV DX, OUTBITMOV AL, 0OUT DX,AL ; 关所有八段管MOV AL,7FHMOV DX, OUTSEGOUT DX,ALMOV DX, OUTBITMOV AL, AHOUT DX, AL ; 显示一位八段管PUSH AXMOV AH, 120CALL DELAYPOP AXSHR AH, 1DEC CLJNZ DLOOP1MOV DX, OUTBITMOV AL, 0OUT DX,AL ; 关所有八段管R ETDISPLAYLED1 ENDPTESTKEY PROC NEARMOV DX, OUTBITMOV AL, 0OUT DX, AL ; 输出线置为0 关所有八段管MOV DX, IN_KEYIN AL, DX ; 读入键状态NOT ALAND AL, 0FH ; 高四位不用RETTESTKEY ENDPGETKEY PROC NEARMOV CH, 00100000BMOV CL, 6KLOOP:MOV DX, OUTBITMOV AL, CH ; 找出键所在列SHR CH, 1MOV DX, IN_KEYIN AL, DXNOT ALAND AL, 0FHJNE GOON_ ; 该列有键入DEC CLJNZ KLOOPMOV CL, 0FFH ; 没有键按下, 返回0FFHJMP EXIT1GOON_:DEC CLSHL CL, 2 ; 键值= 列X 4 + 行MOV CH, 4LOOPC:TEST AL, 1JNZ EXIT1SHR AL, 1INC CLDEC CHJNZ LOOPCEXIT1:MOV DX, OUTBITMOV AL, 0OUT DX, ALMOV CH, 0MOV BX, OFFSET KEYTABLEADD BX, CXMOV AL, [BX] ; 取出键码MOV BL, ALWAITRELEASE:MOV DX, OUTBITMOV AL, 0OUT DX, AL ; 等键释放MOV AH, 10JNE WAITRELEASEMOV AL, BLRETGETKEY ENDPSTART PROC NEARMOV AX, DATAMOV DS, AXB:MOV LEDBUF, 0 ;不显示MOV LEDBUF+1, 0MOV LEDBUF+2, 0MOV LEDBUF+3, 0MOV LEDBUF+4, 0MOV LEDBUF+5, 0MLOOP:CALL DISPLAYLED ; 显示CALL TESTKEY ; 有键入?JE MLOOP ; 无键入, 继续显示T1:CALL GETKEY ; 读入键码AND AL, 0FH ; 显示键码MOV AH, 0CMP AL,01HJZ P1CMP AL,02HJZ P2CMP AL,03HJZ P3CMP AL,04HJZ P4JMP BP1:MOV BX, OFFSET LEDMAPADD BX, AXMOV AL, [BX]MOV LEDBUF,5BHMOV LEDBUF+1,3FHMOV LEDBUF+2,06HMOV LEDBUF+3,5BHMOV LEDBUF+4,0MOV LEDBUF+5,0JMP MLOOPP2:MOV BX,OFFSET LEDMAPADD BX,AXMOV AL,[BX]MOV LEDBUF,3FHMOV LEDBUF+1,7DHMOV LEDBUF+2,3FHMOV LEDBUF+3,66HMOV LEDBUF+4,0MOV LEDBUF+5,0JMP MLOOPP3:MOV BX,OFFSET LEDMAPADD BX,AXMOV AL,[BX]MOV LEDBUF,6FHMOV LEDBUF+1,5CHMOV LEDBUF+2,5CHMOV LEDBUF+3,5EHMOV LEDBUF+4,0MOV LEDBUF+5,0JMP MLOOPP4:CALL DISPLAYLED1CALL TESTKEY ; 有键入?JE P4 ; 无键入, 继续显示JMP T1START ENDPCODE ENDSEND START。

键盘及LED显示实验

键盘及LED显示实验

实验三键盘及LED显示实验一、实验内容利用8255可编程并行接口控制键盘及显示器,当有按键按下时向单片机发送外部中断请求(INTO, INT1),单片机扫描键盘,并把按键输入的键码一位LED 显示器显示出来。

二、实验目的及要求(一)实验目的通过该综合性实验,使学生掌握8255扩展键盘和显示器的接口方法及C51 语言的编程方法,进一步掌握键盘扫描和LED显示器的工作原理;培养学生一定的动手能力。

(二)实验要求1.学生在实验课前必须认真预习教科书与指导书中的相关内容,绘制流程图,编写C51语言源程序,为实验做好充分准备。

2.该实验要求学生综合利用前期课程及本门课程中所学的相关知识点,充分发挥自己的个性及创造力,独立操作完成实验内容,并写出实验报告。

三、实验条件及要求计算机,C51语言编辑、调试仿真软件及实验箱50台套。

四、实验相关知识点1. C51编程、调试。

2 .扩展8255芯片的原理及应用。

3.键盘扫描原理及应用。

4.LED显示器原理及应用。

5.外部中断的应用。

五、实验说明本实验仪提供了8位8段LED显示器,学生可选用任一位LED显示器,只要六、实验原理图8255七、连线说明F4 区: CS 、A0、A1A3 区: CS1、A0、A1 B6 区:JP56 (PA 口)F4 区:JP41(C)B6 区:JP53 (PB 口)F4 区:JP42(B) B6 区:JP52 (PC 口)F4 区:JP47(A)A3 区:JP51F4 区:JP92(D) A3 区:P1.6、P1.7A3 区:INT0、INT1注:F4的D 无法与INT0(P3.2)、INT1(P3.3)直接连接,所以使用P1 口桥接。

八、实验参考流程图 1 .主程序流程图DS30LG4041AH123 B 45 6 78SEGB (8255 PB6) / SEGC (8255 PB5)4 SEGD (8255 PB4) —2 SEGE (8255 PB3)—1 SEGA (8255 PB7) 11 SEGH (8255 PB0) JP42 ab ac 口:口gdpdPGND42af「g ]b 口dpGND3am p GND28 adpGND16DS29LG4041AHSEGH 3SEGA 11 SE( SEGC 4 SEGD 2 SEGE 1a b c d e f g dpadd c paGND3aGND2adpGND1GND46 JP41(PA7)(8255 PA6)(8255 PA5) (8255 PA4) (8255 PA3) (8255 PA2) (8255PA1)(8255 PA0)123 ;c6VCC R162 5.1KVCC |R1635.1KU36 DO 34D1 33 D2 32D3 31D4 30D5 29D6 28D7 27 RD 5WR 36 D0 PA0 D1 PA1 D2 PA2 D3 PA3 D4 PA4 D5 PA5 D6 PA6 D7 PA7 RD PB0 WR PB1 A0 PB2 A1 PB3 RESET PB4 CSPB5 PB6 PB7 PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC74 PA0 3PA1 2PA21PA3 40 ~PA4~ 39 PA5 38 PA6 37 PA7 18 PB019 PB1 20 PB2 21PB3PB4 23 PB5 24 PB6 25 PB714 严 PC015 PC1 16 PC2 '17 PC3 13 PC4 ' 12 PC5 ' 11 PC6 10PC71 2 3 4 5 6 7 8 1 2 3 4 5 6 7 81 2 34 5 6 7 8 JP56JP53JP526 —— 7A ■B ■C ■D —E ■(8255 PC7) (8255 PC6) (8255 PC5) (8255_PC4)_ (8255 PC3) (8255 PC2) (8255 PC1) (8255 PC0)-JP92 1 2 3 5D6 7 8-JP47 1 2 35A6 7 8开始■-0- >按键标志8255初始化(PA, PB, PC 口作输出)0- >8255PC 口定时器0:方式一允许定时器0中断允许外部中断0 (行线0)允许外部中断1 (行线1)外部中断0、1边沿触发允许中断按键标志=11Y /2 •外中断服务程序流程图夕卜部中断0外部中断1■:开始.:■v8255PC 口改为输入关外部中断10->P3.3 (键的行线1)读8255PC 口转化为8..F的键值-> 变量01 !8255的PC 口改为输出1->P3.30->8255PC 口------- N—〈有键按下〉设置定时器0初值(50ms定时)开定时器0键值变量=变量01清外部中断1允许外部中断13. LED 显示程序流程图九、C51语言参考源程序#in elude "reg52.h" un sig ned char KeyResult; un sig ned char buffer[8]; bit bKey;xdata un sig ned char P_8255 _at_ 0xf003; xdata un sig ned char PA_8255 _at_ OxfOOO; xdata un sig ned char PB_8255 _at_ OxfOOl; xdata un sig ned char PC_8255 _at_ 0xf002; code un sig ned char SEG_TAB[] = {0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e,0x0};sbit bLi ne0 = P3A 2; sbit bLi ne1 =卩3人3; II 延时1ms void Delay1ms() {un sig ned char i;■'返回II8255 的控制口II8255 的 PA 口II8255 的 PB 口 II8255 的 PC 口 II 段码II 存放键值//显示缓冲区 II 是否有键按下i = 0;while (--i);}// 显示void Display(){unsigned char i = 0x7f; unsignedchar j;for (j = 0; j < 8; j++){PA_8255 = i;PB_8255 = SEG_TAB[buffer[j]];i = i / 2 + 0x80;Delay1ms();}}// 扫描// 段数据// 更新显示缓冲区数据void RefurbishData(){char i;for (i = 7; i >0; i--)buffer[i] = buffer[i-1];buffer[0] = KeyResult;}void Int0Int() interrupt 0{unsigned char i = 0x80;unsigned char KeyResult0 = 0x0;EX0 = 0;P_8255 = 0x89; bLine0 = 0; // 关外部中断0 //PC 口输入//P3.2 作行输出while (i){if ((PC_8255 & i) == 0)break;KeyResult0++;i >>= 1;}P_8255 = 0x80;PC_8255 = 0;//8255 的PA、PC 口全作输出口IE1 = 0; EX1 = 1; }bLine0 = 1; if (i){TH0 = 60; TL0 = 176; TR0 = 1;KeyResult = KeyResult0;}// 定时中断计数器初值 // 定时 50msIE0 = 0; EX0 =1; } // 清除中断 // 开外部中断 0void Int1Int() interrupt 2 { unsigned char i = 0x80; unsigned char KeyResult0 = 8; EX1 = 0; P_8255 = 0x89; bLine1 = 0; // 关外部中断 0 //PC 口输入 //P3.2 作行输出while (i) { if ((PC_8255 & i) == 0) break;KeyResult0++; i >>= 1;}P_8255 = 0x80;PC_8255 = 0; bLine1 = 1;〃8255 的PA PB PC 口全作输出口if (i){TH0 60;TL0 = 176;TR0 1;}KeyResult = KeyResult0;// 定时中断计数器初值 // 定时 50ms// 清除中断 // 开外部中断 0//50ms 中断服务程序void INT_Timer0(void) interrupt 1{if (((KeyResult < 8) && !bLine0) || ((KeyResult >= 8) && !bLine1)){bKey = 1;}TR0 = 0;}void main(){char i;for (i = 0; i < 8; i++) buffer[i] = 0x10; // TR0 = 1; // bRefurbish = 1;while (1){if (bKey){bKey = 0;RefurbishData(); } Display();}}十、实验实施步骤1 .仔细阅读实验内容及要求,编写 C51 源程序。

接口课程设计实现特定功能的键盘及LED显示-14页word资料

接口课程设计实现特定功能的键盘及LED显示-14页word资料

实现特定功能的键盘及LED显示了解键盘及LED显示接口原理,设计实验电路图完成以下功能:1. 按1键显示年;2. 按2键显示月日;3. 按3键显示GOOD ;4. 按4键数码管由左到右字符“0”循环显示。

5.自行设计特效显示功能。

CODE SEGMENTASSUME CS:CODE,DS:CODESTART: MOV AX,CSMOV DS,AXINPUT: CALL KEYBOARDLEA SI,KEYBUFFER;取按键的值MOV AL,[SI]CMP AL,1JNZ L0JMP SHOW_YEAR ;显示年L0:CMP AL,2JNZ L1JMP SHOW_MD ;显示月日L1:CMP AL,3JNZ L2JMP SHOW_GOOD ;显示GOODL2:CMP AL,4JNZ L3JMP SHOW_0 ;由左到右字符“0”循环显示L3:CMP AL,7JNZ L4JMP SHOW_SUN ;显示SUNL4:JMP SHOW_HERO;显示HERO;----------------------------------结束---------------------------------------------;--------------------------------显示年开始----------------------------------------SHOW_YEAR:MOV CH,01111111B ;初始化位选码01111111BMOV BH,11110111B ;显示位选结束位LEA SI,YEARBUFFERCALL DISPLAYDEC COUNT ;重复显示COUNT次JNZ SHOW_YEARMOV COUNT,250JMP INPUT;--------------------------------------结束-------------------------------------------;-----------------------------------显示月开始---------------------------------------SHOW_MD:MOV CH,01111111B ;初始化位选码01111111BMOV BH,11110111B ;显示位选结束位LEA SI,MDBUFFERCALL DISPLAYDEC COUNT ;重复显示COUNT次JNZ SHOW_MDMOV COUNT,250JMP INPUT;---------------------------------结束--------------------------------------------------;---------------------------------显示GOOD-----------------------------------------------SHOW_GOOD:MOV CH,01111111B ;初始化位选码01111111B MOV BH,11110111B ;显示位选结束位LEA SI,GOODBUFFERCALL DISPLAYDEC COUNT ;重复显示COUNT次JNZ SHOW_GOODMOV COUNT,250JMP INPUT;----------------------------------结束--------------------------------------------------;---------------------------------显示HERO-----------------------------------------------SHOW_HERO:DE: MOV CH,01111111B ;初始化位选码01111111B LEA SI, HEROBUFFERMOV BH,11110111B ;显示位选结束位CALL DISPLAYDEC COUNT ;重复显示COUNT次JNZ SHOW_HEROMOV COUNT,10DEC XUNMOV COUNT,10CALL SHOWDELAY_HCMP XUN,00H ;闪光显示JNZ DEMOV XUN ,15MOV COUNT ,250JMP INPUT;----------------------------------结束-------------------------------------------------;---------------------------显示由左到右字符“0”循环------------------------------------SHOW_0: MOV BX,3LSHOW0:MOV CH,01111111B ;初始化位选码01111111LEA DI,LINBUFFERMOV AL,80HMOV DX,203HOUT DX,AL ;再次初始化8255DISPLAY_0:MOV AL,CHMOV DX,202HOUT DX,AL;位选码送PC口MOV AL,[DI]MOV DX,200H;MOV AL,5BHOUT DX,AL ;显示段码CALL SHOWDELAY0ROR CH,1 ;指向下一个数码管CMP CH,11110111BJNZ DISPLAY_0DEC BX ;重复显示3次JNZ LSHOW0JMP INPUT;----------------------------------结束-------------------------------------------------;-----------------------------显示SUN-------------------------------------------SHOW_SUN:MOV CH,01111111B ;初始化位选码01111111BMOV BH,11101111B ;显示位选结束位LEA SI,SUNBUFFERCALL DISPLAYDEC COUNT ;重复显示COUNT次JNZ SHOW_SUNMOV COUNT,250JMP INPUT;-----------------------------------结束------------------------------------------------;----------------------------------显示延时-----------------------------------------------SHOWDELAY PROC NEARPUSH BXPUSH CXMOV BX,10SHOWDEL1:MOV CX,100SHOWDEL2:LOOP SHOWDEL2DEC BXJNZ SHOWDEL1POP CXPOP BXRETSHOWDELAY ENDP;-----------------------------------结束-----------------------------------------------;----------------------------------显示延时0--------------------------------------------SHOWDELAY0 PROC NEARPUSH BXPUSH CXMOV BX,100SHOW0DEL1:MOV CX,2000SHOW0DEL2:LOOP SHOW0DEL2DEC BXJNZ SHOW0DEL1POP CXPOP BXRETSHOWDELAY0 ENDP;-----------------------------------结束---------------------------------------------SHOWDELAY_H PROC NEARPUSH BXPUSH CXMOV BX,10SHOW_HDEL1:MOV CX,2000SHOW_HDEL2:LOOP SHOW_HDEL2DEC BXJNZ SHOW_HDEL1POP CXPOP BXRETSHOWDELAY_H ENDP;---------------------------------显示程序------------------------------------------DISPLAY PROC NEARMOV AL,80HMOV DX,203HOUT DX,AL ;再次初始化8255DISPLAY1:MOV AL,CHMOV DX,202HOUT DX,AL ;位选码送PC口MOV AL,[SI]MOV DX,200HOUT DX,AL ;显示段码CALL SHOWDELAY ;延时INC SIROR CH,1 ;指向下一个数码管CMP CH,BHJNZ DISPLAY1RETDISPLAY ENDP;-----------------------------------结束---------------------------------------------;---------------------------------读取按键盘------------------------------------------KEYBOARD PROC NEARLEA SI,KEYBUFFERMOV AL,10000001B ;初始化8255控制字MOV DX,203HOUT DX,ALKS1:CALL KS ;读取按键CMP AL,0FH ;判断有无按键JZ KS1CALL DELAYCALL KSCMP AL,0FHJZ KS1MOV BL,0EFH ;初始化列码MOV BH,0 ;初始化列计数器AGAIN:MOV DX,202HMOV AL,BLOUT DX,AL ;输出列码IN AL,DX ;读取行码AND AL,0FHCMP AL,0FHJZ NEXT ;该列无键闭合,准备下一列扫描CMP AL,0DH ;判断列是否是第一个键闭合?JNZ TWOMOV AL,1JMP FREETWO: ;判断列是否是第二个键闭合?CMP AL,0BHJNZ THREEMOV AL,4JMP FREETHREE: ;判断列是否是第三个键闭合?CMP AL,07HJNZ NEXTMOV AL,7FREE:PUSH AXWAIT1:CMP AL,0FHJNZ WAIT1POP AXADD AL,BHMOV [SI],AL ;保存键值,并返回JMP RETURNNEXT:INC BHROL BL,1CMP BL,0FEHJNZ AGAINJMP KS1KS PROC NEARMOV DX,202HMOV AL,0FHOUT DX,ALIN AL,DXAND AL,0FHRETKS ENDPDELAY PROC NEARPUSH CXMOV BX,2000DEL1:MOV CX,10DEL2:LOOP DEL2DEC BXJNZ DEL1POP CXPOP BXRETDELAY ENDPRETURN:RETKEYBOARD ENDPEXIT:MOV AH,4CHINT 21HXUN DB 15YEARBUFFER DB 5BH,3FH,3FH,6FH ;存放年2009 MDBUFFER DB 3FH,6FH,3FH,66H ;存放月日0904GOODBUFFER DB 6FH,5CH,5CH,5EH ;GOODKEYBUFFER DB 1LINBUFFER DB 3FHHEROBUFFER DB 76H,79H,77H,3FH ;HEROSUNBUFFER DB 6DH,3EH,37H ;SUNCOUNT DB 250 ;显示次数----------------------------------结束-----------------------------------------CODE ENDSEND START。

实现特定功能的键盘及LED显示

实现特定功能的键盘及LED显示

实现特定功能的键盘及LED显⽰⽬录⼀、实验⽬的 (2)⼆、实验内容 (2)三、总体设计 (2)四、实验电路 (2)五、实验框图 (4)六、实验程序 (5)七、实验⼼得 (10)实现特定功能的键盘及LED显⽰⼀、实验⽬的1、掌握键盘和显⽰器的接⼝⽅法和编程⽅法。

2、掌握键盘扫描和LED⼋段码显⽰器的⼯作原理。

⼆、实验内容1、了解键盘及LED显⽰接⼝设计,绘制出原理图。

2、根据实验箱上提供的硬件资源完成:a、按1键显⽰年b、按2键显⽰⽉⽇c、按3键显⽰GOODd、按4键数码管由左到右8字循环显⽰。

3、设计电路并在实验台上连接线路。

三、总体设计1、选通键盘以及LED数字显⽰控制区2、主要利⽤软件编程,实现实验要求中的各项四、实验电路使⽤PC机与伟福lab8000实验箱连接起来,安装好相应驱动,做好接线分析,由于lab8000实验箱已经将部分电路接线内置,所以接线仅需要将KEY/LED_CS选通端⼝与CS0相连即可,但作为学习过程,应更加详细的将实现电路了解,现已将实验箱所⽤实验器件的内部电路给出,详细电路见下页图1图1:键盘及LED 显⽰电路五、实验框图主程序框图读键输⼊⼦程序框图显⽰程序框图六、实验程序OUTBIT equ 08002h ; 位控制⼝OUTSEG equ 08004h ; 段控制⼝IN_KEY equ 08001h ; 键盘读⼊⼝data segmentLEDBuf db 6 dup(?) ; 显⽰缓冲Num db 1 dup(?) ; 显⽰的数据DelayT db 1 dup(?)LEDMAP: ; ⼋段管显⽰码db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h KeyTable: ; 键码定义db 16h, 15h, 14h, 0ffhdb 13h, 12h, 11h, 10hdb 0dh, 0ch, 0bh, 0ahdb 0eh, 03h, 06h, 09hdb 0fh, 02h, 05h, 08hdb 00h, 01h, 04h, 07hdata endscode segmentassume cs:code, ds:dataDelay proc nearpush ax ; 延时⼦程序push cxmov al, 0mov cx,axloop $pop cxpop axretDelay endpDelay1 proc nearpush ax ; 延时⼦程序push cxmov cx,38000loop $pop cxpop axretDelay1 endpDisplayLED proc nearmov bx, offset LEDBufmov cl, 6 ; 共6个⼋段管mov ah, 00100000b ; 从左边开始显⽰DLoop: mov dx, OUTBITmov al, 0out dx,al ; 关所有⼋段管mov al, [bx]mov dx, OUTSEGout dx,almov dx, OUTBITmov al, ahout dx, al ; 显⽰⼀位⼋段管push axmov ah, 1call Delaypop axshr ah, 1inc bxdec cljnz DLoopmov dx, OUTBITmov al, 0out dx,al ; 关所有⼋段管retDisplayLED endpTestKey proc nearmov dx, OUTBITout dx, al ; 输出线置为0mov dx, IN_KEYin al, dx ; 读⼊键状态not aland al, 0fh ; ⾼四位不⽤retTestKey endpGetKey proc nearmov ch, 00100000bmov cl, 6KLoop:mov dx, OUTBITmov al, ch ; 找出键所在列not alout dx, alshr ch, 1mov dx, IN_KEYin al, dxnot aland al, 0fhjne Goon_ ; 该列有键⼊dec cljnz KLoopmov cl, 0ffh ; 没有键按下, 返回0ffh jmp Exit1Goon_:dec clshl cl, 2 ; 键值= 列X 4 + ⾏mov ch, 4LoopC:test al, 1jnz Exit1shr al, 1inc cljnz LoopCExit1:mov dx, OUTBITmov al, 0out dx, almov ch, 0mov bx, offset KeyTable add bx, cxmov al, [bx] ; 取出键码mov bl, al WaitRelease:mov dx, OUTBITmov al, 0out dx, al ; 等键释放mov ah, 10call Delaycall TestKeyjne WaitReleasemov al, blretGetKey endpStart proc nearmov ax, datamov ds, axmov di,offset LEDBufp1: mov di,offset LEDBuf mov [di], 05bh ; 显⽰2008. mov [di+1], 03fhmov [di+2], 03fhmov [di+3], 0ffhmov [di+4], 0mov [di+5], 06hjmp MLoopp2: mov di,offset LEDBufmov [di], 03fh ; 显⽰08.08. mov [di+1], 0ffhmov [di+2], 03fhmov [di+3], 0ffhmov [di+4], 0mov [di+5], 5bhjmp MLoopp3: mov di,offset LEDBuf mov [di],6fh ;显⽰good mov [di+1],5chmov [di+2],5chmov [di+3],0dehmov [di+4],0mov [di+5],4fhjmp MLoopp4: push cxmov cx,08hmov bx,offset LEDBufp4l: mov [bx],00inc bxloop p4lpop cxmov [di], 7fh ; 显⽰8inc dicmp di,offset LEDBuf + 06h jnz nextmov di,offset LEDBuf next: call delay1call DisplayLED ; 显⽰call TestKeyjne MLoopjmp p4MLoop:call DisplayLED ; 显⽰call TestKey ; 有键⼊?je MLoop ; ⽆键⼊, 继续显⽰call GetKey ; 读⼊键码and al, 0fh ; 显⽰键码cmp al,01hjz mmpp1cmp al,02hjz mmpp2cmp al,03hjz p3cmp al,04hjz p4mov ah, 0mov bx, offset LEDMAP add bx, axmov al, [bx]mov LEDBuf+5, aljmp MLoopmmpp1: jmp p1mmpp2: jmp p2Start endpcode endsend start。

实训五 键盘与LED直接驱动并口输出显示设计-1

实训五  键盘与LED直接驱动并口输出显示设计-1

实训五键盘与LED直接驱动并口输出显示设计
一、实训目的
1、进一步掌握单片机与键盘、LED连接硬件电路的设计方法;
2、掌握键盘编程设计方法;
3、掌握显示程序设计的方法。

二、功能及原理
1、功能描述
(1)实现实训四相同的功能
(2)键盘输入采用中断方式实现。

(3)用并口直接输出代替实训四的串行口输出。

2、要求
学生参考实训二和实训四自己设计硬件电路图和实现程序。

三、实训步骤
1、利用启东MCS-51仿真软件对源程序进行汇编、编译调试,生成.HEX文件;
2、编写C源程序并进行汇编、编译调试,生成.HEX文件;
3、利用PROTEUS画出原理图,在AT89C51中加入刚生成的.HEX文件;
4、运行程序,按下健看LED显示。

四、实训体会
实训二、实训四以及实训五的区别。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

河北科技大学《接口技术》课程设计报告学生姓名:学号:专业班级:课程名称:学年学期:2 0 —2 0 学年第学期指导教师:2 0 年月课程设计成绩评定表目录一、设计题目:--------------------------------------------------------------------------------------------- 2二、设计目的:--------------------------------------------------------------------------------------------- 2三、设计原理及方案: ----------------------------------------------------------------------------------- 21、实验电路图---------------------------------------------------------------------------------------- 22、实验框图 ------------------------------------------------------------------------------------------- 33、各功能实现方案---------------------------------------------------------------------------------- 44、实验程序 ------------------------------------------------------------------------------------------- 4四、实验方法------------------------------------------------------------------------------------------------ 91、实验电路测试------------------------------------------------------------------------------------- 92、软件测试 ------------------------------------------------------------------------------------------- 9五、实验结果------------------------------------------------------------------------------------------------ 9六、改进意见及建议 -------------------------------------------------------------------------------------- 9七、设计体会------------------------------------------------------------------------------------------------ 9一、设计题目:实现特定功能的键盘及LED显示。

二、设计目的:1、掌握键盘和显示器的接口方法和编程方法。

2、掌握键盘扫描和LED八段码显示器的工作原理。

三、设计原理及方案:1、实验电路图说明:使用PC 机与伟福lab8000实验箱连接起来,安装好相应驱动,做好接线分析,由于lab8000实验箱已经将部分电路接线内置,所以接线仅需要将KEY/LED_CS 选通端口与CS0相连即可。

2、实验框图开始显示缓冲区初始化LED 显示读取键值键值转换为显示数据有键输入?是 否主程序框图是 是否开始输出列扫描信号列扫描信号移位 该列有键输入?读入行信号返回6列扫描完?初始化地址参数读键输入子程序框图(接下页)(接上页)3、各功能实现方案(1)功能1:按1键显示年当读取到寄存器AL=02H时,说明按键为1号键。

关于显示年份,首先定义一个显示缓冲区,用于存储表示年份的数字。

然后依次读取其值,再显示到数码管上。

(2)功能2:按2显示月日当读取到寄存器AL=0AH时,说明按键为2号键。

显示月日方法和显示年份一样,首先定义一个显示缓冲区,用于存储表示月日的数字。

然后依次读取其值,再显示与数码管上。

(3)功能3:按3显示GOOD将G,O,O,D分别以七段代码6FH,3FH,3FH,5EH代替,以显示GOOD字样。

然后清空LED数码管的显示,通过延时,让GOOD字样显示与数码管。

(4)功能4:按4键数码管由左到右8字循环显示当8279扫描寄存器AL=01H时,说明按键为4号键。

通过设置循环及延迟及上述相似的方法显示出指定效果。

4、实验程序OUTBIT equ 08002h ; 位控制口OUTSEG equ 08004h ; 段控制口IN_KEY equ 08001h ; 键盘读入口data segmentLEDBuf db 6 dup(?) ; 显示缓冲Num db 1 dup(?) ; 显示的数据DelayT db 1 dup(?)LEDMAP: ; 八段管显示码db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07hdb 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71hKeyTable: ; 键码定义db 16h, 15h, 14h, 0ffhdb 13h, 12h, 11h, 10hdb 0dh, 0ch, 0bh, 0ahdb 0eh, 03h, 06h, 09hdb 0fh, 02h, 05h, 08hdb 00h, 01h, 04h, 07hdata endscode segmentassume cs:code, ds:dataDelay proc nearpush ax ; 延时子程序push cxmov al, 0mov cx,axloop $pop cxpop axretDelay endpDelay1 proc nearpush ax ; 延时子程序push cxmov al, 0mov cx,38000loop $pop cxpop axretDelay1 endpDisplayLED proc nearmov bx, offset LEDBufmov cl, 6 ; 共6个八段管mov ah, 00100000b ; 从左边开始显示DLoop:mov dx, OUTBITmov al, 0out dx,al ; 关所有八段管mov al, [bx]mov dx, OUTSEGout dx,almov dx, OUTBITmov al, ahout dx, al ; 显示一位八段管push axmov ah, 1call Delaypop axshr ah, 1inc bxdec cljnz DLoopmov dx, OUTBITmov al, 0out dx,al ; 关所有八段管retDisplayLED endpTestKey proc nearmov dx, OUTBITmov al, 0out dx, al ; 输出线置为0mov dx, IN_KEYin al, dx ; 读入键状态not aland al, 0fh ; 高四位不用retTestKey endpGetKey proc nearmov ch, 00100000bmov cl, 6KLoop:mov dx, OUTBITmov al, ch ; 找出键所在列not alout dx, alshr ch, 1mov dx, IN_KEYin al, dxnot aland al, 0fhjne Goon_ ; 该列有键入dec cljnz KLoopmov cl, 0ffh ; 没有键按下, 返回0ffhjmp Exit1Goon_:dec clshl cl, 2 ; 键值= 列X 4 + 行mov ch, 4LoopC:test al, 1jnz Exit1shr al, 1inc cldec chjnz LoopCExit1:mov dx, OUTBITmov al, 0out dx, almov ch, 0mov bx, offset KeyTableadd bx, cxmov al, [bx] ; 取出键码mov bl, alWaitRelease:mov dx, OUTBITmov al, 0out dx, al ; 等键释放mov ah, 10call Delaycall TestKeyjne WaitReleasemov al, blretGetKey endpStart proc nearmov ax, datamov ds, axmov di,offset LEDBufp1: mov di,offset LEDBufmov [di], 05bh ; 显示2015.mov [di+1], 03fhmov [di+2], 03fhmov [di+3], 0ffhmov [di+4], 0mov [di+5], 06hjmp MLoopp2: mov di,offset LEDBufmov [di], 03fh ; 显示08.08.mov [di+1], 0ffhmov [di+2], 03fhmov [di+3], 0ffhmov [di+4], 0mov [di+5], 5bhjmp MLoopp3: mov di,offset LEDBufmov [di],6fh ;显示goodmov [di+1],5chmov [di+2],5chmov [di+3],0dehmov [di+4],0mov [di+5],4fhjmp MLoopp4: push cxmov cx,08hmov bx,offset LEDBufp4l: mov [bx],00inc bxloop p4lpop cxmov [di], 7fh ; 显示8inc dicmp di,offset LEDBuf + 06hjnz nextmov di,offset LEDBufnext: call delay1call DisplayLED ; 显示call TestKeyjne MLoopjmp p4MLoop:call DisplayLED ; 显示call TestKey ; 有键入?je MLoop ; 无键入, 继续显示call GetKey ; 读入键码and al, 0fh ; 显示键码cmp al,01hjz mmpp1cmp al,02hjz mmpp2cmp al,03hjz p3cmp al,04hjz p4mov ah, 0mov bx, offset LEDMAPadd bx, axmov al, [bx]mov LEDBuf+5, aljmp MLoopmmpp1: jmp p1mmpp2: jmp p2Start endpcode endsend start四、实验方法1、实验电路测试(1)将KEY/LED_CS选通端口与CS0相连。

相关文档
最新文档