文档库 最新最全的文档下载
当前位置:文档库 › 实验四 4x4键盘输入

实验四 4x4键盘输入

实验报告四

实验名称:4*4键盘输入

1、实验内容

键盘扫描,求键值,并在LED上显示该键值。

2、实验目的

(1) 掌握键盘和显示器的接口方法和编程方法。

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

3、实验要求

在上一个实验的基础上,利用实验仪提供的键盘扫描电路和显示电路,做一个扫描键盘和数码显示实验,把按键输入的键码在六位数码管上显示出来。

实验程序可分为三个模块。

1)键输入模块:扫描键盘、读取一次键盘并将键值存入键值缓冲单元。

2)显示模块:将显示单元的内容在显示器上动态显示。

3)主程序:调用键输入模块和显示模块。

4、实验器材

(1) 计算机1台

5、实验电路

这里只是键盘草图,列为输出,行为输入。图中电阻为上拉电阻。

(0e103H)

图6 8155键盘电路原理图

表2 键值表

6、实验说明

本实验仪提供了一个6×4的小键盘,向列扫描码地址(0e101H)逐列输出低电平,然后从行码地址(0e103H)读回。如果有键按下,则相应行的值应为低,如果无键按下,由于上拉的作用,行码为高。这样就可以通过输出的列码和读取的行码来判断按下的是什么键。在判断有键按下后,要有一定的时延,进行第二读键盘,防止键盘抖动。

7、实验流程图

注:LED显示程序框图见上个实验。

图7 键盘扫描主程序流程图图8 读键输入子程序流程图

8、实验程序清单

;****变量定义文件,文件名:para.lib****

OUTBIT equ 0e101h ; 位控制口

CLK164 equ OUTBIT+1 ; 段控制口(接164时钟位)

DAT164 equ OUTBIT+1 ; 段控制口(接164数据位)

IN equ OUTBIT+2 ; 键盘读入口

LEDBuf equ 60h ; 显示缓冲

; ***变量定义文件结束***

;*****************************************************

;****显示部分做成单独的文件,文件名为:dis.lib,在键盘扫描部分调用**** LEDMAP: ; 八段管显示码

db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h

db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h

db 00H

;******* 延时子程序**************

Delay: ; 延时子程序

mov r7, #0

DelayLoop:

djnz r7, DelayLoop

djnz r6, DelayLoop

ret

;*********LED显示***************

DisplayLED:

mov r0, #LEDBuf

mov r1, #6 ; 共6个八段管

mov r2, #00100000b ; 从左边开始显示

Loop: mov dptr, #OUTBIT

mov a, #0

movx @dptr, a ; 关所有八段管

mov a, @r0

mov B, #8 ; 送164

DLP: rlc a

mov r3, a

mov acc.0, c

mov dptr, #DAT164

anl a,#0fdh ;PB1=0,即时钟低电平

movx @dptr, a

mov dptr, #CLK164

orl a,#02h ;PB1=1,即产生时钟高电平

movx @dptr, a

anl a,#0fdh ;PB1=0,时钟低电平

movx @dptr, a

mov a, r3

djnz B, DLP

mov dptr, #OUTBIT

mov a, r2

movx @dptr, a ; 显示一位八段管

mov r6, #1

call Delay

mov a, r2 ; 显示下一位

rr a

mov r2, a

inc r0

djnz r1, Loop

ret

;******八段管显示码程序文件dis.lib结束****

;***************************************************** ;******键盘扫描程序文件,文件名:key.lib***** TestKey:

mov dptr, #OUTBIT

mov a, #0

movx @dptr, a ; 输出线置为0

mov dptr, #IN

movx a, @dptr ; 读入键状态

cpl a

anl a, #0fh ; 高四位不用

ret

;*******键值表**************

KeyTable: ; 键码定义

db 00h, 01h, 04h, 07h

db 0fh, 02h, 05h, 08h

db 0eh, 03h, 06h, 09h

db 0dh, 0ch, 0bh, 0ah

db 10H,11H,12H,13H

db 14H,15H,16H,17H

;********************************

GetKey:

mov dptr, #OUTBIT

mov P2, dph

mov r0, #Low(IN)

mov r1, #00100000b ;列扫描初值

mov r2, #6 ;扫描6列

Kloop:

mov a, r1 ; 找出键所在列

cpl a

movx @dptr, a

cpl a

rr a

mov r1, a ; 下一列

movx a, @r0 ;读行值

cpl a

anl a, #0fh

jnz Goon1 ; 该列有键入

djnz r2,Kloop

mov r2,#0ffh ; 没有键按下, 返回 0ffh

sjmp Exit

Goon1:

mov r1,a ; R1中为行值,键序号 = (列-1)* 4 + 行

mov a,r2 ;R2中为列值

dec a

rl a

rl a

mov r2,a ; r2 = (r2-1)*4

mov a,r1 ; r1中为读入的行值

mov r1,#4 ;共有4行

LoopC:

rrc a ; 移位找出所在行

jc Exit

inc r2 ; r2 = r2+ 行值

djnz r1,LoopC

Exit: mov a,r2 ; 查表取出键值码

mov dptr,#KeyTable

movc a, @a+dptr

mov r2,a

WaitRelease:

mov dptr,#OUTBIT ; 等键释放

clr a

movx @dptr,a

mov r6,#10

call Delay

call TestKey

jnz WaitRelease

mov a,r2

ret

;****键盘程序文件key.lib结束****

;************************

;*******以下为另一文件:主程序***********

$include (para.lib)

ORG 0

Ljmp Start

Start:

mov sp, #40h

mov dptr,#0e100h

mov a,#03h

movx @dptr,a

mov LEDBuf,#0ffh ; 显示 8.8.8.8.

mov LEDBuf+1,#0ffh

mov LEDBuf+2,#0ffh

mov LEDBuf+3,#0ffh

mov LEDBuf+4,#0

mov LEDBuf+5,#0

Mloop:

call DisplayLED ; 显示

call TestKey ; 有键入?

Jz Mloop ; 无键入, 继续显示

call GetKey ; 读入键码

mov r2,a

anl a, #0fh ; 显示键码低位

mov dptr, #LEDMap

movc a, @a+dptr

mov LEDBuf+5,a

mov a,r2

swap a

anl a, #0fh ; 显示键码高位

mov dptr, #LEDMap

movc a, @a+dptr

mov LEDBuf+4, a

ljmp Mloop

$include (dis.lib)

$include (key.lib)

END

9、实验步骤

1) 编写程序。

2)机器汇编。

3)调试程序并全速执行程序,用手按键盘‘1’、‘2’……、‘F’,观察LED显示结果。

4X4扫描式矩阵键盘课程设计

4X4扫描式矩阵键盘课程设计 课程设计名称: 4_4扫描式矩阵键盘设计 姓名:DUKE 班级:电子1008班 学号:10086 成绩: 日期:2014年1月6日

摘要 随着21世纪的到来,电子信息行业将是人类社会的高科技行业之一,式设施现代化的基础,也是人类通往科技巅峰的直通路。电子行业的发展从长远来看很重要,但最主要的还是科技问题。 矩阵式键盘提高效率进行按键操作管理有效方法,它可以提高系统准确性,有利于资源的节约,降低对操作者本身素质的要求。是它能准时、实时、高效地显示按键信息,以提高工作效率和资源利用率。 矩阵式键盘乃是当今使用最为广泛的键盘模式,该系统以N个端口连接控制N*N个按键,显示在LED数码管上。单片机控制依据这是键盘显示系统,该系统可以对不同的按键进行实时显示,其核心是单片机和键盘矩阵电路部分,主要对按键与显示电路的关系、矩阵式技术及设备系统的硬件、软件等各个部分进行实现。 4*4矩阵式键盘采用AT89C51单片机为核心,主要由矩阵式键盘电路、译码电路、显示电路等组成,软件选用C语言编程。单片机将检测到的按键信号转换成数字量,显示于LED显示器上。该系统灵活性强,易于操作,可靠性高,将会有更广阔的开发前景。

目录 第一章:系统功能要求-------------------------------------------------------- 1.1 4*4 矩阵式键盘系统概述------------------------------------------------ 1.2 本设计任务和主要内容--------------------------------------------------- 第二章:方案论证--------------------------------------------------------------- 第三章:系统硬件电路的设计------------------------------------------------ 3.1 单片机控制系统原理----------------------------------------------------- 3.2 原理图绘制说明---------------------------------------------------------- 3.3 画出流程图---------------------------------------------------------------- 3.4 原理图绘制--------------------------------------------------------------- 第四章:系统程序的设计------------------------------------------------------ 4.1 程序的编写步骤----------------------------------------------------------- 4.2 编写的源程序-------------------------------------------------------------- 第五章:调试及性能分析------------------------------------------------------ 第六章:心得体会--------------------------------------------------------------- 参考文献----------------------------------------------------------------------------

实验三 4X4 键盘输入显示控制器

实验三4X4 键盘输入显示控制器 1.实验目的 学习quartusii 和modelsim的使用方法; 学习原理图和veriloghdl混合输入设计方法; 掌握4X4 键盘输入显示控制器的设计及仿真方法。 2.实验原理 根据下面电路图,设计4X4 键盘输入显示控制器,在kx3c10F+开发板上实现该电路,并作仿真。 简述4X4 键盘检测键号的原理。 其中FPGA内部电路如下图所示: 设计其中的K4X4模块和DECL7S模块的verilogHDL代码,并作出整个系统仿真。 2.1 4X4 键盘检测键号的原理 在应用中,当按下按键后,为了能够辨别和读取键信息,一种比较常用的方法是,向A 口扫描输入一组分别只含一个0的4位数据,如1110,1101,1011等。若有按键按下,则B 口一定会输出对应的数据,这时,只要结合啊A,B口的数据,就能判断出键的位置。如当键

S0按下,对于输入的A=1110,那么输出的B=0111。于是{B,A}=0111_1110就成了S0的代码。 2.2 4X4阵列按键程序代码 module key4(input CLK,input[3:0]A,output reg[3:0]B,R); //定义模块名和输入输出端口 reg[1:0] C; //定义一个2位寄存器变量 initial begin C=0; //初始化变量c end always @(posedge CLK) //每一个上升沿使C加1 begin C<=C+1; case (C) //case选择语句 0:B<=4'B0111;1:B<=4'B1011;2:B<=4'B1101;3:B<=4'B1110; endcase case({B,A}) //B,A组成一个8位二进制数进行选择8'B0111_1110:R<=4'H0; 8'B0111_1101:R<=4'H1; 8'B0111_1011:R<=4'H2; 8'B0111_0111:R<=4'H3; 8'B1011_1110:R<=4'H4; 8'B1011_1101:R<=4'H5; 8'B1011_1011:R<=4'H6; 8'B1011_0111:R<=4'H7; 8'B1101_1110:R<=4'H8; 8'B1101_1101:R<=4'H9; 8'B1101_1011:R<=4'H0A; 8'B1101_0111:R<=4'H0B; 8'B1110_1110:R<=4'H0C; 8'B1110_1101:R<=4'H0D; 8'B1110_1011:R<=4'H0E; 8'B1110_0111:R<=4'H0F; endcase end endmodule //模块结束 效果图:

4X4矩阵键盘

题目名称:4×4矩阵式键盘 队员:伍星刘晓峰陈仁凤 摘要: 本系统采用AT89S52为控制核心。采用4X4键盘,通过8位数码管显示动态扫描0—F 16个数字。 关键词: AT89S52键盘数码管显示 Abstract: This system USES AT89S52 devices as control https://www.wendangku.net/doc/8019156136.html,ing 4X4 keyboard, through eight digital tube display dynamic scan 0-16 F. Keyword: AT89S52 Keyboard LED Display

目录 1 方案论证与比较 (3) 1.1采样方法方案论证 (3) 1.2处理器的选择方案论证................................................. 错误!未定义书签。 1.3周期性判别与测量方法方案论证................................. 错误!未定义书签。 2 系统设计 (3) 2.1总体设计 (3) 2.2单元电路设计 (5) 2.2.1 前级阻抗匹配和放大电路设计 (5) 2.2.2 AD转换及控制模块电路设计 (6) 2.2.3 功率谱测量单元电路设计 (6) 3 软件设计 (7) 4系统测试 (8) 5 结论 (9) 参考文献: (9) 附录: (9) 附1:元器件明细表: (9) 附2:仪器设备清单 (9) 附3:电路图图纸 (10) 附4:程序清单 (11)

1.方案论证与比较 1.1采样方法比较与选择 方案一:采用FPGA作为系统主控器。FPGA可实现各种复杂逻辑功能,规模大,集成度高,体积小,稳定性好,IO资源丰富、易于进行功能扩展,处理速度快,但适用于大规模实时性要求较高的系统,价格高,编程实现难度大。用液晶显示器进行键盘扫描,价格偏高,程序复杂,故不选择此方案 方案二: 采用Atmel公司的AT89S52单片机作为主控制器。AT89S52是一个低功耗、高性能8位单片机,片内含8 KB Flash片内程序存储器,256 Bytes RAM,32个外部双向输入/输出(I/O)口,5个中断优先级,2层中断嵌套中断等。价格便宜,使用方便,编程实现难度低,适合用来实现本系统的控制功能。 P0.0-P0.7端口作为数码管段选,P2.0-P2.7端口作为数码管位选,P3.0-P3.7作为键盘输入端口。8位LED数码管进行动态显示。 综上分析,本设计选择方案二。 2 系统设计 2.1 总体设计 16个键盘通过AT89S52进行动态扫描,在8位数码管可以动态显示0-F 16个数字。手动复位键可以达到清零的效果。

4x4键盘保险箱密码锁

单片机实践实验报告课题:4x4键盘保险箱密码锁 院系:机械工程系 班级: 姓名: 学号: 指导老师:

1.实验功能描述——4x4键盘密码锁 【功能要求】 能描述如下:用4x4键盘上的按键设定好数字0~9,密码有初始程序给定,由键盘输入6位数字密码,正确指示灯亮,错误蜂鸣响5下报警。 2.硬件及原理说明 本实验利用6位数码管显示、4x4键盘实现输入。 说明: ON:1(0x01);TW:2(0x02);TH:3(0x04); FO:4(0x11);FI:5(0x12);SI:6(0x14);SET:开始输入密码(0x18); SE:7(0x21);EI:8(0x22);NI:9(0x24);ZE:0(0x28); OK:确定(0x38)。

本实验利用状态转移法依次输入数字的原理示意图: 键盘位于实验仪08区,四行四列,PC口低四位接列、高四位接行,电路连接图如下:

3.C51程序摘要及简述 1.本次实验的主要功能为键盘功能,即模块3,所以本次报告的摘要以模块3的为主: #define SET 0x18 //对从0x18到0x38的键盘地址进行定义#define ON 0x01 #define TW 0x02 #define TH 0X04 #define FO 0x11 #define FI 0x12 #define SI 0x14 #define SE 0x21 #define EI 0x22 #define NI 0x24 #define ZE 0x28 #define OK 0x38 #include extern unsigned char one,two,three,four,five,six; //声明调用在模块1定义的密码的6位数字变量extern unsigned char code table[16]; //声明调用在模块1定义的数码管字型码用于DisplayEdit函数显示extern unsigned char DispBuf[6]; extern void Ring(int n); //声明调用在模块1定义的报警函数unsigned char Editone,Edittwo,Editthree,Editfour,Editfive,Editsix; //声明密码6位数字编辑变量extern unsigned char KeyV al; unsigned char CurKey,LastKey; unsigned char KeySts; extern unsigned char Point; sbit lamp=P1^1; //指示灯使用P1.1 sbit ring=P1^2; //报警蜂鸣器使用P1.2 void DisplayEdit() { DispBuf[5]=table[Editone]; DispBuf[4]=table[Edittwo]; DispBuf[3]=table[Editthree]; DispBuf[2]=table[Editfour]; DispBuf[1]=table[Editfive]; DispBuf[0]=table[Editsix]; DispBuf[6-KeyS ts] &=0x7F; } void Check () //密码检查正误函数{ if (one==1 && two==2 && three==3 && four==4 && five==5 && six==6) { ring = 1;

实验四 4x4键盘输入

实验报告四 实验名称:4*4键盘输入 1、实验内容 键盘扫描,求键值,并在LED上显示该键值。 2、实验目的 (1) 掌握键盘和显示器的接口方法和编程方法。 (2) 掌握键盘扫描和LED八段码显示器的工作原理。 3、实验要求 在上一个实验的基础上,利用实验仪提供的键盘扫描电路和显示电路,做一个扫描键盘和数码显示实验,把按键输入的键码在六位数码管上显示出来。 实验程序可分为三个模块。 1)键输入模块:扫描键盘、读取一次键盘并将键值存入键值缓冲单元。 2)显示模块:将显示单元的内容在显示器上动态显示。 3)主程序:调用键输入模块和显示模块。 4、实验器材 (1) 计算机1台 5、实验电路 这里只是键盘草图,列为输出,行为输入。图中电阻为上拉电阻。 (0e103H) 图6 8155键盘电路原理图

表2 键值表 6、实验说明 本实验仪提供了一个6×4的小键盘,向列扫描码地址(0e101H)逐列输出低电平,然后从行码地址(0e103H)读回。如果有键按下,则相应行的值应为低,如果无键按下,由于上拉的作用,行码为高。这样就可以通过输出的列码和读取的行码来判断按下的是什么键。在判断有键按下后,要有一定的时延,进行第二读键盘,防止键盘抖动。 7、实验流程图 注:LED显示程序框图见上个实验。 图7 键盘扫描主程序流程图图8 读键输入子程序流程图 8、实验程序清单 ;****变量定义文件,文件名:para.lib**** OUTBIT equ 0e101h ; 位控制口

CLK164 equ OUTBIT+1 ; 段控制口(接164时钟位) DAT164 equ OUTBIT+1 ; 段控制口(接164数据位) IN equ OUTBIT+2 ; 键盘读入口 LEDBuf equ 60h ; 显示缓冲 ; ***变量定义文件结束*** ;***************************************************** ;****显示部分做成单独的文件,文件名为:dis.lib,在键盘扫描部分调用**** LEDMAP: ; 八段管显示码 db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h db 00H ;******* 延时子程序************** Delay: ; 延时子程序 mov r7, #0 DelayLoop: djnz r7, DelayLoop djnz r6, DelayLoop ret ;*********LED显示*************** DisplayLED: mov r0, #LEDBuf mov r1, #6 ; 共6个八段管 mov r2, #00100000b ; 从左边开始显示 Loop: mov dptr, #OUTBIT mov a, #0 movx @dptr, a ; 关所有八段管 mov a, @r0 mov B, #8 ; 送164 DLP: rlc a mov r3, a mov acc.0, c mov dptr, #DAT164 anl a,#0fdh ;PB1=0,即时钟低电平 movx @dptr, a mov dptr, #CLK164 orl a,#02h ;PB1=1,即产生时钟高电平 movx @dptr, a anl a,#0fdh ;PB1=0,时钟低电平

单片机4X4键盘计算器课程设计论文

课题二:4X4键盘扫描显示系统的设计 一、设计方案与选择方案 1.1、方案构思 (1)方案一:采用独立式按键作为输入模块 独立式按键输入模块,其特点是:直接用I/O口构成单个按键电路,接口电路配置灵活、按键识别和软件结构简单;但是当键数较多时,占用I/O口较多,比较浪费资源。其原理图如图1所示。 图 1 独立的功能按键图 2 矩阵键盘输入 (2)方案二:采用矩阵式键盘作为输入模块 矩阵式按键输入模块,其特点是:电路和软件稍复杂,但相比之下,当键数越多时,越节约I/O口,比较节省资源。其原理图如图2所示。 1.2、方案比较与选择 本设计中的输入模块使用的是矩阵键盘输入。 键盘输入预置用于计算,按键较多。若是采用独立按键,需频繁按键,为软件设计增加负担,且操作界面不友好;若是采用矩阵式按键,可以方便地输入一个数值,使操作界面更具有人性化,且节约了宝贵的I/O口资源。 通过对比,故采用方案二作为系统输入模块。 二、整体方案原理框图 2.1硬件与软件系统设计 依据系统分析及实现功能,硬件小系统方框图如图1所示:

图5 依据系统硬件设计,软件系统主要包括: 单片机控制程序模块:作为系统的主控制程序模块,用KeilC 编程控制其他程序模块的协调工作; 键盘程序模块:用来输入用户的功能,使单片机完成相应的控制功能; 液晶显示模块:使用字符型液晶显示器显示用户的选择。 2.2 单片机模块 单片机控制主程序流程图如下: 单片机外围扩展电路程序模块 单片机 振荡电路 键盘输入 液晶显示 对比度调节 复位电路 开始 初始化 扫描键盘得键值 显示定位 显示 结束

为了节约成本,本设计中液晶显示模块与单片机之间采用模拟口线的方式控制,键盘与单片机之间采用扫描的工作方式。 键盘程序流程图(扫描方式) 键盘程序流程图如下所示: LCM 程序流程图如下所示: 本设计的软件系统分别用伟福E6000和KeilC 编写及编译。4*4键盘程序模块用汇编语言和C 语言编写,实现直接从P2口扫描得到键盘码,并采用查询方式得到与之对应的LCD 字型码,在LCD 上显示出来。 三、单元电路设计 3.1键盘输入 计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多情况下都不采用这种方式。为此,我们引入了矩阵键盘的应用,采用四条I/O 线作为行线,四条I/O 线作为列线组成键盘。在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为4×4个。这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率。 矩阵键盘的工作原理: 计算器的键盘布局如图5所示:一般有16个键组成,在单片机中正好可以用一个P 口实现16个按键功能,这种形式在单片机系统中也最常用。 键盘上的每一个按键都有一个键值。给键赋值的最直接办法是将行、列线按二进制顺序排列,当某一键按下时,键盘扫描程序执行到给该列置低电平0,若读出各行状态为非全1,这时的行、列数据组合成键值。键盘键值从左到右、从上到下依次是77,7B ,7D ,7E ;B7,BB , 开 LCD 初始化 LCD 是否为忙? 单片机向LCD 写命令 单片机向LCD 写数据 显示数据 结束 Y N

4x4键盘

4x4键盘输入实验 一、实验目的 1.掌握4×4矩阵式键盘程序识别原理。 2.掌握4×4矩阵式键盘按键的设计方法。 二、实验原理: 主要原理为扫描键盘矩阵时,每次只有一行电平拉低。在逐次扫描拉低的这些行的同时,去读那些列的电平。;被拉低的行上,按下的键对应的列的电平为0 ,其它为1. 用左移位的指令,在进位位CY里就可以检测出是0还是1.为1表示无按下,;为0表示该键按下。在扫描按键时,如无按下,则取码指针R1加1后,继续扫描。如有键按下,转按键处理子程序,按键按下标志位;F0清0(表示按下)。此时,取码指针的值,就是按键的键名。随后继续进入按键检测子程序重新扫描。 每个按键有它的行值和列值,行值和列值的组合就是识别这个按键的编码。矩阵的行线和列线分别通过两并行接口和CPU通信。每个按键的状态同样需变成数字量“0”和“1”,开关的一端(列线)通过电阻接VCC,而接地是通过程序输出数字“0”实现的。键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,键的功能是什么;还要消除按键在闭合或断开时的抖动。两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。 键盘连接成4×4的矩阵形式,占用单片机P1口的8根线,行信号是P1.0-1.3,列信号是P1.4-1.7。

三、实验内容及过程: 1、流程图 2、实验中碰到的问题 编写程序时需要用到的共阳字形码,不能与共阴字形码混淆。在仿真过程中,数码管下拉电阻起到分流作用,应该接地,但是却始终不能出结果,将下拉电阻与电源相连就可以显示正确了。 四、实验现象: 按下一个键,在数码管上就会显示对应的数字或者字母。 五、程序: ORG 0000H AJMP MAIN

矩阵键盘显示实验

矩阵键盘显示实验报告 20 -20 学年第学期 学院电子信息学院 课程矩阵键盘显示实验姓名 学号 指导老师 日期 20XX年XX月XX日

矩阵键盘显示实验 一、实验目的 1、掌握矩阵键盘检测的原理和方法; 2、掌握按键消抖的方法; 3、再次熟悉数码管的显示。 二、实验任务 从4×4矩阵键盘输入4位字符(如“15EF”),并显示于4位数码管。三、实验原理 在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图1-1所示。在矩阵键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。 图1-1 矩阵键盘 矩阵键盘的按健识别方法很多,其中最常见的方法是行扫描法。行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,下面介绍矩阵键盘的扫描过程。 (1)判断有无键按下 第一步:向所有的列输出口线输出低电平; 第二步:然后将行线的电平状态读入; 第三步:判断读入的行线值。若无键按下,所有的行线仍保持高电平状态;若有键按下,行线中至少应有一条线为低电平。 (2)去除按键的抖动 去抖原理:当判断到键盘上有键按下后,则延时一段时间再判断键盘的状态,若仍为有键按下状态,则认为有一个键按下,否则当作按键抖动来处理。 (3)按键识别(列或行扫描法) 在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将列(行)线置为低电平,即在置某根列(行)线为低电平时,其列(行)线为高电平,再逐行(列)检测各行(列)线的电平状态。若某行为低电平,则该行线与置为低电平的列线交叉处的按键就是闭合的按键。

(4)求按键的键值 根据闭合键的行值row和列值col采用计算法(如健值=行号×4+列号)或查表法将闭合键的行值和列值转换成所定义的键值。 电路原理图如下图所示。 图1-2 键盘显示实验电路

课程设计 制作单片机的4X4矩阵键盘

目录 摘要 (2) 第一章硬件部分 (3) 第一节AT89C51 (3) 第二节4*4矩阵式键盘 (6) 第三节LED数码管 (8) 第四节硬件电路连接 (10) 第二章软件部分 (12) 第一节所用软件简介 (12) 第二节程序流程图 (14) 第三节程序 (17) 第三章仿真结果 (19) 心得体会 (21) 参考文献 (22)

摘要 电子信息行业将是人类社会的高科技行业之一,是设施现代化的基础,也是人类通往科技巅峰的直通车。电子行业的发展很重要,而计算机技术是现代科技发展的重要组成部分。 矩阵式键盘控制系统可以提高效率,是进行按键操作管理的有效方法,它可以提高系统准确性,有利于资源的节约,降低对操作者本身的要求。并能正确、实时、高效地显示按键信息,以提高工作效率和资源利用率。 矩阵式键盘是当今使用最为广泛的键盘模式,该系统以N个端口连接控制N*N个按键,并通过单片机,显示在LED数码管上。单片机控制键盘显示系统,可以对不同的按键进行实时显示,其核心是单片机、键盘矩阵电路和数码管显示电路。4*4矩阵式键盘以AT89C51单片机为核心,主要由矩阵式键盘电路、显示电路等组成,软件选用C语言编程。单片机将检测到的按键信号转换成数字量,显示于LED显示器上。该系统灵活性强,易于操作,可靠性高,广泛应用于各种场合。

第一章硬件部分 第一节AT89C51 AT89C51是一种带4K字节FLASH存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。引脚如图所示 AT89C51 图1 AT89C51管脚图 AT89C51其具有以下特性: 与MCS-51 兼容 4K字节可编程FLASH存储器 寿命:1000写/擦循环 数据保留时间:10年 全静态工作:0Hz-24MHz 三级程序存储器锁定

键盘 实验报告

键盘实验报告 实验报告:键盘 引言: 键盘是计算机输入设备中最常用的一种设备,用于输入字符、数字、命令等等。键盘以一定的方式将我们按下的按键转换成计算机可识别的信号,从而实现输入功能。本实验的目的是了解键盘的工作原理、结构以及使用方法。 实验目的: 1. 了解键盘的工作原理; 2. 掌握键盘通信协议; 3. 掌握键盘的结构和按键布局; 4. 学习键盘的使用方法。 实验原理: 键盘的工作原理是通过扫描矩阵的方式实现的,常见的键盘为4x4矩阵结构,也有其他规格的矩阵结构。按键的每一个位置都与键盘电路中的一个电气开关相连接,当按下某个按键时,会导电并向计算机发送信号。键盘通过PS/2或USB 接口与计算机相连,传输按键的信息。 键盘结构通常包括以下部分: 1. 按键:键盘上的每一个按键代表一个字符、数字、命令或功能等。按键大致

分为四个区域:字母区、数字区、符号区和功能区。 2. 电路板:键盘的电路板上连接着按键开关,实现按键的电气连接和信号传输。 3. 导线和线缆:将电路板与接口连接,传递信号。 4. 接口:键盘通过PS/2或USB接口与计算机相连,实现信号的传输。 实验步骤: 1. 准备一个计算机和一台键盘,确保键盘的连接正确。 2. 打开计算机,进入操作系统。 3. 在文本编辑器中打开一个文档,用来记录实验结果。 4. 将注意力集中在键盘上,按下键盘上的一个按键,观察文档中的输入情况。 5. 重复步骤4,测试其他按键,记录测试结果。 6. 关闭计算机,结束实验。 实验结果与分析: 通过本实验,我们了解到键盘的工作原理是通过扫描矩阵的方式实现的,按键通过电路板中的电气开关与计算机相连,实现键盘输入。键盘的按键布局通常分为四个区域:字母区、数字区、符号区和功能区。通过实验测试,我们发现按键输入是可靠的,按下按键时能够正确输入对应的字符或数字。键盘的使用方法是简单明了的,只需要按下对应的按键即可完成输入。 实验总结: 键盘作为计算机最常用的输入设备,广泛应用于各个领域。通过这次实验,我们

单片机实践简易计算器实验报告

单片机实践简易计算器实验报告 本次实验的目的是通过单片机实现一个简易计算器,实现加减乘除四则运算。在实验过程中,我们使用了STC89C52单片机,通过编写程序实现计算器的功能。 实验步骤: 1. 确定硬件电路连接 我们需要确定硬件电路连接。本次实验使用的是STC89C52单片机,需要将其与LCD1602液晶屏、4x4矩阵键盘、蜂鸣器等硬件连接。具体连接方式如下: STC89C52单片机: P0口:连接LCD1602液晶屏的数据线D0-D7 P1口:连接LCD1602液晶屏的控制线RS、RW、E P2口:连接4x4矩阵键盘的行线R1-R4 P3口:连接4x4矩阵键盘的列线C1-C4 P4口:连接蜂鸣器 2. 编写程序

接下来,我们需要编写程序实现计算器的功能。程序主要分为以下几个部分: (1)LCD1602液晶屏初始化 (2)4x4矩阵键盘扫描 (3)计算器功能实现 (4)LCD1602液晶屏显示结果 3. 调试程序 编写完程序后,我们需要进行调试。在调试过程中,我们需要注意以下几点: (1)检查硬件连接是否正确 (2)检查程序是否有语法错误 (3)检查程序是否能够正常运行 4. 实验结果 经过调试,我们成功实现了一个简易计算器。在使用过程中,用户可以通过4x4矩阵键盘输入数字和运算符,计算器会自动进行计算,并在LCD1602液晶屏上显示结果。同时,计算器还具有清零、退格等功能,方便用户进行操作。

总结: 通过本次实验,我们学习了单片机的基本原理和编程方法,掌握了如何使用单片机实现一个简易计算器。同时,我们还学习了如何进行硬件电路连接和程序调试,提高了我们的实践能力和动手能力。

8255-位置码

8255—4x4键盘位置码 一:实验问题 用8255实现,顺序接收4x4键盘输入的4个按键位置码存入4个字节的缓冲区中。 二:实验目的 通过对8255的学习,掌握8255实现键盘输入的键值在数码管中显示的应用。 三:实验过程 1.本次实验的地址为20H—26H。 2.根据实验要求编写如下程序: .model small .8086 .stack .data a_port equ 20h b_port equ 22h c_port equ 24h ct_port equ 26h ;位置码 ; 0 1 2 3 4 5 6 7 table db 0eeh,0deh,0beh,7eh,0edh,0ddh,0bdh,7dh ; 8 9 A B C D E F db 0ebh,0dbh,0bbh,7bh,0e7h,0d7h,0b7h,77h disp db 4 dup(0) ;4个缓冲区 .code .startup MOV DI,0 mov si,0 MOV CX,4 again:PUSH CX mov dx,ct_port mov al,10000001b ;定义8255 A口、B口方式0输出,C口高4位输出、低4位输入 out dx,AL MOV AL,3fh MOV DX,a_port

OUT DX,AL MOV AL,07h MOV DX,b_port OUT DX,AL ;向键盘所有列送0 mov dx,c_port mov al,00h out dx,al ;读行,按键是否松开 mov dx,c_port wait_open: in al,dx and al,0fh ;行 cmp al,0fh jne wait_open wait_pres: in al,dx ;读C口 and al,0fh ;查行值 cmp al,0fh ;是否有键按下 je wait_pres ;无,等待 ;去抖动 mov cx,16eah delay:loop delay ;延时xx毫秒 in al,dx and al,0fh cmp al,0fh je wait_pres MOV DL ,0 chh:INC DL SHR AL,1 JC chh DEC DL ;存行号到DL PUSH DX next_row:mov dx,ct_port mov al,10001000b OUT DX,AL ;定义8255 A口、B口方式0输出,C口高4位输入、低4位输出 MOV AL,0 mov dx,c_port out dx,AL ;向键盘所有行送0 in al,dx ;读C口状态 and al,0f0h ;读列值 cmp al,0f0h je again ;无按键,出错!返回开始。

单片机课程设计说明书4x4键盘设计要点

课程设计说明书课程名称:单片机应用基础 设计题目:模拟键盘输入及显示系统设计 专业:机械设计制造及其自动化 指导教师: 设计者: 学号:

目录 第一章课程设计的目的和要求 (1) 1.1课程设计的目的和要求 (1) 1.2课程设计预备知识 (1) 1.3课题设计的任务 (3) 第二章总体设计 (4) 2.1明确任务 (4) 2.2硬件和软件功能的划分 (4) 第三章硬件设计 3.1系统扩展 (4) 3.2功能接口 (5) 3.3系统的组成及统一编址 (5) 3.480C51单片机引脚图及引脚功能介绍 (5) 3.5键盘设计 (6) 3.6 4位7段码数码管的连接 (7) 3.7、最后设计的系统工作原理图如下 (7) 第四章软件设计 (8) 4.1系统定义 (8) 4.2软件结构设计 (9) 4.3绘制程序流程框图 (9) 4.4、编写程序 (12) 第五章系统调试和仿真 (12) 第六章结束语 (12) 参考文献 (13)

第一章、课程设计目的和要求 1.1 课程设计目的和要求 《单片机应用基础》课程设计是学好本门课程的又一重要实践性教学环节,课程设计的目的就是配合本课程的教学和平时实验,以达到巩固消化课程的内容,进一步加强综合应用能力及单片机应用系统开发和设计能力的训练,启发创新思维,使之具有独立单片机产品和科研的基本技能,是以培养学生综合运用所学知识的过程,是知识转化为能力和能力转化为工程素质的重要阶段。 1.2课程设计预备知识 总的来说,设计者要具备MCS-51单片机的有关硬件及软件知识,汇编语言编程或者C 语言编程的有关知识,I\O接口的有关知识,WAVE6000集成调试软件的应用,能利用PROTEUS 软件绘制系统工作原理,一定的设计经验等等。本次设计所要掌握的一些基本知识如下:(1)键盘工作原理 键盘是由若干按键组成的开关矩阵,是嵌入式控制系统的一种输入部件。键盘分两种:一种是独立式按键,另一种是矩阵式按键。如图所示。独立式按键用的比较少,可以直接与单片机的P1口某一位进行连接,通过判断这一位的状态知道是否有键输入。在应用中通常需要数量较多的按键,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图所示。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。

单片机4X4键盘扫描和显示课程设计

二、设计内容 1、本设计利用各种器件设计,并利用原理图将8255单元与键盘及数码管显示单元连接,扫描键盘输入,最后将扫描结果送入数码管显示。键盘采用4*4键盘,每个数码管可以显示0-F共16个数。将键盘编号,记作0-F,当没按下其中一个键时,将该按键对应的编号在一个数码管上显示出来,当在按下一个 键时,便将这个按键的编号在下一个数码管上显示,数码管上 可以显示最近6次按下的按键编号。 设计并实现一4×4键盘的接口,并在两个数码管上显示键盘所在的行与列。 三、问题分析及方案的提出 4×4键盘的每个按键均和单片机的P1口的两条相连。若没有按键按下时,单片机P1口读得的引脚电平为“1”;若某一按键被按下,则该键所对应的端口线变为地电平。单片机定时对P1口进行程序查询,即可发现键盘上是否有按键按下以及哪个按键被按下。 实现4×4键盘的接口需要用到单片机并编写相应的程序来识别键盘的十六个按键中哪个按键被按下。因为此题目还要求将被按下的按键显示出来,因此可以用两个数码管来分别显示被按下的按键的行与列

表示任意一个十六进制数)分别表示键盘的第二行、第三行、第四行;0xXE、0xXD、0xXB、0xX7(X表示任意一个十六进制数)则分别表示键盘的第一列、第二列、第三列和第四列。例如0xD7是键盘的第二行第四列的按键 对于数码管的连接,采用了共阳极的接法,其下拉电阻应保证芯片不会因为电流过大而烧坏。 五、电路设计及功能说明 4×4键盘的十六个按键分成四行四列分别于P1端口的八条I/O 数据线相连;两个七段数码管分别与单片机的P0口和P2口的低七 位I/O数据线相连。数码管采用共阳极的接法,所以需要下拉电阻 来分流。结合软件程序,即可实现4×4键盘的接口及显示的设计。 当按下键盘其中的一个按键时,数码管上会显示出该按键在4×4键 盘上的行值和列值。所以实现了数码管显示按键位置的功能 四、设计思路及原因 对于4×4键盘,共有十六个按键。如果每个按键与单片机的一个引脚相连,就会占用16个引脚,这样会使的单片机的接口不够用(即使够用,也是对单片机端口的极大浪费)。因此我们应该行列式的接法。行列式非编码键盘是一种把所有按键排列成行列矩阵的键盘。在这种键若没有按键按下时,单片机从P1口读得的引脚电平为“1”;若某一按键被按下,则该键所对应的端口线变为地电平。因此0xEX(X表示任意4×4键盘的第一行中的某个按键被按下,相应的0xDX、0xBX、0x7X(X 二、实验内容

4x4键盘实验报告

单片机及DSP课程设计报告 专业: 班级: 姓名: 学号: 指导教师: 时间: 一、设计目的 为了进一步稳固学习的理论知识,增强学生对所学知识的实际应用能力和运用所学的知识解决实际问题的能力,开场为期两周的课程设计。通过设计使学生在稳固所学知识的根底之上具有初步的单片机系统设计与应用能力。 1、通过本设计,使学生综合运用"单片机技术原理与应用"、"DSP原理与应用"C语言程 序设计"以及"数字电路"、"模拟电路"等课程的内容,为以后从事电子产品设计、软件编程、系统控制等工作奠定一定的根底。 2、学会使用KEIL C和PROTEUS等软件,用C语言或汇编语言编写一个较完整的实 用程序,并仿真运行,保证设计的正确性。 3、了解单片机接口应用开发的全过程:分析需求、设计原理图、选用元器件、布线、 编程、调试、撰写报告等。 二、硬件电路方案设计 1、4*4键盘设计 4*4键盘工作原理: 每个按键都有它的行值和列值,行值和列值的组合就是识别这个按键的编码。矩阵的行线和列线分别通过两并行接口和CPU通信。键盘的一端〔列线〕通过电阻接VCC,而接地是通过程序输出数字"0〞实现的。键盘处理程序的任务是:确

定有无键按下,判断哪一个键按下,键的功能是什么.还要消除按键在闭合或断开时的抖动。两个并行口中,一个输出扫描码,使按键逐行动态接地;另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。 2、数码管显示电路设计 数码管显示原理: 动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。这样一来,就没有必要每一位数码管配一个锁存器,从而大大地简化了硬件电路。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好似各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。 3、晶振和复位电路设计 4、系统总电路图 三、程序设计 1、程序流程图 〔1〕键盘扫描

单片机4X4键盘扫描和显示课程设计

表示任意一个十六进制数)分别表示键盘的第二行、第二行、第四 行;OxXE、OxXD、OxXB、0xX7(X表示任意一个十六进制数)则分别表示键盘的第一列、第二列、第三列和第四列。例如0xD7是键盘的第二行第四列的按键 对于数码管的连接,采用了共阳极的接法,其下拉电阻应保证芯片不会因为电流过大而烧坏。 五、电路设计及功能说明 4X4键盘的十六个按键分成四行四列分别于P1端口的八条I/O 数据线相连;两个七段数码管分别与单片机的P0 口和P2 口的低七位I/O数据线相连。数码管采用共阳极的接法,所以需要下拉电阻来分流。结合软件程序,即可实现 4 X4键盘的接口及显示的设计。当按下键盘其中的一个按键时,数码管上会显示出该按键在4X4键盘上的行值和列值。所以实现了数码管显示按键位置的功能 二、实验内容

"3 ■审 ■ "X I ►Tf 9 fe 设计并实现一 4 X 4键盘的接口,并在两个数码管上显示键盘所在的行与列。 即将8255单元与键盘及数码管显示单元连接,编写实验程序扫描键盘输入, 并 将扫描结果送数码显示,键盘采用4 X 4键盘,每个数码管值可以为0到F, 16 个数。将键盘进行编号记作0—F 当按下其中一个按键时将该按键对应的编号在 一个数码管上显示出来,当按下下一个按键时便将这个按键的编号在下一个数码 管上显示出来,且数码管上可以显示最近 6次按下按键的编号。 基本原理 1•电路设计及功能说明 2•硬件原理框图及电路图(包括接口芯片简介) 电路图: 叫"11 I —0 - 0 E E 可编辑 2 ・q 戟 r : fQfiWEl FQ^IS

六、实验步骤 (1) . 把实验平台与PC机串行口连起来,根据实验连线提示在实验 台上连线,之后打开电源。 (2) . 在PC机上用鼠标点击“ Wave ”图标,进入 WINDOWS 调试 环境,而后进行初始化设置。点击[仿真器仿真器设置]出现“仿真器设置”窗,进行仿真器的设置。 ⑶. 用鼠标点一下[文件打开文件],输入文件名*asm,创建新文件,在该窗口中输入 事先编好的程序。 ⑷. 用鼠标点[项目全部编译]窗,对当前源文件进行编译,反复修改好程序,直到编 译通过为止。 ⑸. 全速运行程序,通过在键盘按键,观察八段管的显示结果,理解键盘扫描原理及程 序编写方法。 接口芯片简介 AT89C51 简介 AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性 能CMOS 8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除100 次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能 8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。 主要管脚说明: VCC :供电电压。 GND :接地。

4乘4矩阵键盘输入数码管显示四位数

沈阳航空航天大学 综合课程设计三相步进电机控制器电路的设计 班级 学号 23 学生姓名 XXXXXXXXX 指导教师常丽东

课程设计任务书 一、设计说明 步进电机是工业过程控制及仪表控制中的主控元件之一,作为执行元件其特点为能够快速起启停、精度高且能直接接收数字量,由于这些特点使其在定位场合得到了广泛的应用。 设计一个三相步进电机控制器,使其能够控制步进电机的工作状态,如步进电机正、反转,步进电机的工作方式等。 用键盘设定步进电机的工作频率,工作方式,并用数码管显示设定值,可以通过按键来更换显示内容。用示波器观测三相的输出波形,并用数码管显示电路的工作状态。 二、技术指标 步进电机的工作频率为:<10kHz 三、设计要求 1.进行方案论证,提出一个合理的设计方案并进行理论设计; 2.对所设计的方案部分进行调试; 3.在选择器件时,应考虑成本。 4.设计测量调试电路。 四、实验要求 1.根据技术指标制定实验方案;验证所设计的电路。 2.进行实验数据处理和分析。 五、推荐参考资料 1.谢自美. 电子线路设计·实验·测试. [M]武汉:华中理工大学出版社,2000年 2.阎石. 数字电子技术基础. [M]北京:高等教育出版社,2006年 3.童诗白、华成英.模拟电子技术基础. [M]北京:高等教育出版社,2006年 4..付家才. 电子实验与实践. [M]北京:高等教育出版社,2004年 5.沙占友、李学芝著.中外数字万用表电路原理与维修技术. [M]北京:人民邮电出版社,1993年

六、按照要求撰写课程设计报告成绩评定表

沈阳航空航天大学综合课程设计 一、概述 本次毕设的题目是:三相步进电机控制电路的设计。本次毕设使用80C51单片机作为主控芯片,利用ULN2003A集成电路作为三相步进电机的驱动电路,采用单极性驱动方式,使三相步进电机能在(1)三相单三拍,(2)三相双三拍,(3)三相六拍三种工作方式下正常工作;能实现的功能有:启动/停止控制、方向控制;速度控制;用LED数码管显示工作方式。键盘输入工作频率。本次课程设计采用80C51单片机作为主控芯片,程序采用C语言来编写,驱动电路采用ULN2003A集成电路,显示采用7SEG-MPX4-CC,即四位共阴数码管,P0接段码,并用8 只1K欧左右电阻上拉。P2的4 位IO口接位选码。正转,数码管显示1。反转,数码管显示2.不转,数码管显示0.采用Proteus软件进行仿真。在Keil uVsuon3编程环境下编程和编译生成HEX文件,导入到80C51单片机,实现对各个模块的控制,实现我们所需要的功能。 本次课程是对毕业设计的基础设计,即实现4x4键盘输入,数码管显示输入数字的设计。 二、方案论证 1 步进电机驱动方案选择 方案1:使用功率三极管等电子器件搭建成功率驱动电路来驱动电机的运行。这种方案的驱动电路的优点是使用电子器件联接,电路比较简单,但容易受干扰,信号不够稳定,缺点是器件较大而不便电路的集成,使用时很不方便,联接时容易出错误。 方案2:使用专门的电机驱动芯片ULN2003A来驱动电机运行。驱动芯片的优点是便于电路的集成,且驱动电路简单,驱动信号很稳定,不易受外界环境的干扰,因而设计的三相步进电机控制系统性能更好。 通过对两种方案的比较,我选择方案2使用ULN2003A电机驱动芯片来作为驱动。 2 数码管显示方案选择 方案1:把所需要显示的数据通过专用的七段显示译码器(例如7448)的转换输出给LED显示屏。优点是输出比较简单,可以简化程序,但增加了芯片的费用,电路也比较复杂。 方案2:通过程序把所要的数据转化为七段显示的数据,直接通过单片机接口来显示,其优点是简化了电路,但增加了软件编写的负担。 通过对两种方案进行比较,我选择通过软件编写来输出显示信号,即单片机直接和显示器相连。 3 控制状态的读取 方案1:把按键接到单片机的中断口,若有按键按下,单片机接收到中断信 1

相关文档