表示任意一个十六进制数)分别表示键盘的第二行、第二行、第四行;OxXE、OxXD、OxXB、0xX7(X表示任意一个十六进制数)则分别表示键盘的第一列、第二列、第三列和第四列。
例如0xD7是键盘的第二行第四列的按键对于数码管的连接,采用了共阳极的接法,其下拉电阻应保证芯片不会因为电流过大而烧坏。
五、电路设计及功能说明4X4键盘的十六个按键分成四行四列分别于P1端口的八条I/O 数据线相连;两个七段数码管分别与单片机的P0 口和P2 口的低七位I/O数据线相连。
数码管采用共阳极的接法,所以需要下拉电阻来分流。
结合软件程序,即可实现 4 X4键盘的接口及显示的设计。
当按下键盘其中的一个按键时,数码管上会显示出该按键在4X4键盘上的行值和列值。
所以实现了数码管显示按键位置的功能二、实验内容"3■审■ "X I►Tf9fe设计并实现一 4 X 4键盘的接口,并在两个数码管上显示键盘所在的行与列。
即将8255单元与键盘及数码管显示单元连接,编写实验程序扫描键盘输入,并将扫描结果送数码显示,键盘采用4 X 4键盘,每个数码管值可以为0到F, 16 个数。
将键盘进行编号记作0—F 当按下其中一个按键时将该按键对应的编号在 一个数码管上显示出来,当按下下一个按键时便将这个按键的编号在下一个数码 管上显示出来,且数码管上可以显示最近 6次按下按键的编号。
基本原理1•电路设计及功能说明2•硬件原理框图及电路图(包括接口芯片简介) 电路图:叫"11I —0 - 0E E可编辑2・q 戟r :fQfiWElFQ^IS六、实验步骤(1) . 把实验平台与PC机串行口连起来,根据实验连线提示在实验台上连线,之后打开电源。
(2) . 在PC机上用鼠标点击“ Wave ”图标,进入 WINDOWS 调试环境,而后进行初始化设置。
点击[仿真器仿真器设置]出现“仿真器设置”窗,进行仿真器的设置。
⑶. 用鼠标点一下[文件打开文件],输入文件名*asm,创建新文件,在该窗口中输入事先编好的程序。
⑷. 用鼠标点[项目全部编译]窗,对当前源文件进行编译,反复修改好程序,直到编译通过为止。
⑸. 全速运行程序,通过在键盘按键,观察八段管的显示结果,理解键盘扫描原理及程序编写方法。
接口芯片简介AT89C51 简介AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS 8位微处理器,俗称单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能 8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。
主要管脚说明:VCC :供电电压。
GND :接地。
P0 口: P0 口为一个8位漏级开路双向I/O 口,每脚可吸收8TTL门电流。
当 P1 口的管脚第一次写 1 时,被定义为高阻输入。
P0 能够用于外部程序数据存储器,它可以被定义为数据 /地址的第八位。
在 FIASH 编程时, P0 口作为原码输入口,当 FIASH 进行校验时, P0 输出原码,此时 P0 外部必须被拉高。
P1 口: P1 口是一个内部提供上拉电阻的 8位双向I/O 口,P1 口缓冲器能接收输出4TTL门电流。
P1 口管脚写入1后,被内部上拉为高,可用作输入, P1 口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在 FLASH 编程和校验时, P1 口作为第八位地址接收。
P2 口: P2 口为一个内部上拉电阻的8位双向I/O 口,P2 口缓冲器可接收,输出4个TTL门电流,当P2 口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时, P2 口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2 口当用于外部程序存储器或 16 位地址外部数据存储器进行存取时, P2 口输出地址的高八位。
在给出地址“ 1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时, P2 口输出其特殊功能寄存器的内容。
P2 口在 FLASH 编程和校验时接收高八位地址信号和控制信号。
P3 口: P3 口管脚是8个带内部上拉电阻的双向I/O 口,可接收输出4个TTL 门电流。
当 P3 口写入“ 1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3 口将输出电流(ILL)这是由于上拉的缘故。
P3 口同时为闪烁编程和编程校验接收一些控制信号。
ALE/PROG :当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在 FLASH 编程期间,此引脚用于输入编程脉冲。
在平时, ALE 端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的 1/6 。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:每当用作外部数据存储器时,将跳过一个 ALE 脉冲。
如想禁止 ALE 的输出可在 SFR8EH 地址上置 0。
此时, ALE 只有在执行 MOVX ,MOVC 指令是 ALE 才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态 ALE 禁止,置位无效。
/PSEN :外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次 /PSEN 有效。
但在访问外部数据存储器时,这两次有效的 /PSEN 信号将不出现。
数码管简介数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元 (多一个小数点显示) ;按能显示多少个“8”可分为 1位、 2 位、 4 位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。
共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。
共阳数码管在应用时应将公共极 COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。
当某一字段的阴极为高电平时,相应字段就不亮。
共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极 (COM) 的数码管。
共阴数码管在应用时应将公共极 COM 接到地线 GND 上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。
当某一字段的阳极为低电平时,相应字段就不亮。
七、软件部分的程序流程图,算法和使用的编程技巧 1.编程技巧1 .在按键扫描程序中,通过for 循环语句实现被按下的按键的行值的确定, 用switch 语句实现列值的确定。
OxEX (X 表示任意一个十六进制数)表示4 X 4 键盘的第一行中的某个按键被按下, 相应的OxDX 、OxBX 、0x7X (X 表示任意一pi.sa i P1.6 □;i=i.? nsPl.0PM Z?:pi?iPl.5 PL.4,門小.Pl.7 ftST ..(RXIW3,0 (TXD)P3.1 .. (iN7^)P3.2(fTTbP 左 3{K))P<4 '(TIJP3.5 (WR)P3.6示UA 左7.'XTAL2 _ XTAL1GN H1 402 393 3S4 375 36 6 357 34 S 33 9 32 JO 31 11 30 12 2913 邛14 27 15 26 16 25 1724 惜2319 ?■) ——20 21¥0PO^ADOJ Pai(ADl) ~ (AD2)~ ^AD3J P04MD4} P(i3(AD5) ~ 炉呦P07(AD7> kA. API 1P27(A15) P2,b(A14) 'P2.^AH>P2.4(A12) P23(AH) P2JHA10)P2J(A9)rtdsrt.£ n (KMrdodE 二Od 口pod n 00>nQN rl一签L二T-d rlE:M口Eld 口二 d 口RSTQ4 iRxoiPioas NC 0 6 iTxOi pyi □: (丽)p^sda(丽沖3.3口9 (TO ) PX4 口 ICfri)ra.s □ 1133C P0 4 (AD4} i2 O M.5 (AQ5 剑□ M 6 (AD6) 30pPC7(AD7) 29 打 EAWP 2SD NC» □ AL 白亍佞 西口 =SEN 25D =2 7(A1S> 24p3: 6 I :A14» 23D =:.5 ..A13-ill口0 列吟 0 吟 g 臂 ro « m « PI mLrJ CL .®s可编辑个十六进制数)分别表示键盘的第二行、第三行、第四行;OxXE、0xXD、0xXB、0xX7(X表示任意一个十六进制数)则分别表示键盘的第一列、第二列、第三列和第四列;2. ucRow+ucLi ne+1 即为被按下的按键的行列值;3. 用十六个switch语句实现对单片机P0端口和P2 口的I/O数据线的控制,来控制数码管显示被按下按键的行值和列值;主流程图子流程图八、程序编程OUTBIGEQU 8002H ; 位控制口OUTSEG EQU 8004H ; 段控制口KEYIN EQU 8001H ; 键盘读入口 MOV 20H,#3FH ;缓冲器设初值,赋值到 6 个数码管 MOV 21H,#3FH MOV 22H,#3FH MOV 23H,#3FH MOV 24H,#3FH MOV 25H,#3FH LCALL DISPLAY;无键码输入,调用显示模块 LCALL TESTJZ MAIN;累加器为 0 即说明无按键,则转移继续显示 LCALL SEARCH;有键值输入,寻找输入键值所在的行和列 MOV 20H,21H;数码管显示出输入的键值 MOV 21H,22HMOV 22H,23HMOV 23H,204MOV 24H,25HMOV DPTR,#LEDTABMOVC A,@A+DPTRREADY:MAIN: MOV 25H,ASJMP MAIN段管 MOV A, R2MOVX @DPTR, ALCALL DELAY ;延时MOV A, R2RR A ;位选信号右移一位, 即动态显示下一个数码 MOV R2, A MOV R0,#20H ;缓冲区从 20H 处开始 MOV R1, #6 ;共 6 个八段管 MOV R2, #00100000B ; 从左边开始显示灯亮为 1 ,灭为 0, MOV DPTR, #OUTBIG MOV A, #0 MOVX @DPTR, A ; 位选码初值设为 0 , 即关闭所有八段管MOV A, @R0 ;将以 20H 为首地址的内存值发送到段码;显示模块 LOOP:DISPLAY:输出口 8004HMOV DPTR, #OUTSEG MOVX @DPTR,A MOV DPTR, #OUTBIG ;输出位选通信号,使每次只显示一位八INC R0 ;内存地址加一,提供段码输出DJNZ R1, LOOPRETDELAY: MOV R7,#01H ; 延时子程序DEL1: MOV R6,#00HDEL2: DJNZ R6, DEL2DJNZ R7, DEL1RETTEST: MOV DPTR,#OUTBIG ;检测有无键值输入MOV A,#00HMOVX @DPTR,A ;输出线置为 0MOV DPTR,#KEYINMOVX A,@DPTR ;读入键状态CPL A ;累加器求反ANL A,#0FH ;高四位不用RETSEARCH:;找出键值所在的的位置(行和列)MOV R1,#00100000BMOV R2,#06HMOV R5,#00HMOV R4,#03HLSEARCH: ;找出列所在位置后MOV A,R1CPL AMOV DPTR,#OUTBIGMOVX @DPTR,ACPL ARR A ;通过判断循环几次进位为 1 来实现计数的功能,从而得知行所在位置MOV R1,AMOV DPTR,#KEYINMOVX A,@DPTRCPL AANL A,#0FHJNZ HSEARCH ;找到所在列,继续寻找行所在位置INC R5DJNZ R2,LSEARCHHSEARCH:MOV R7,#04HLOOP2: RRC AJC GETDEC R4DJNZ R7, LOOP2GET: ;确定输入的键码值键值=行 *6+ 列,R4*6+R5->AMOV A,R4MOV B,#6HMUL ABCLR A MOVX @DPTR,ALCALL DELAYLCALL TESTJNZ WAITMOV A,26HRET LEDTAB: ; 八段管显示码DB3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h DB 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71hKEYTAB:;键盘码DB 07H,08H,09H,0AH,00H,00HDB 04H,05H,06H,0BH,00H,00HDB 01H,02H,03H,0CH,00H,00HDB 00H,0FH,0EH,0DH,00H,00HMOVDPTR,#KEYTAB MOVC A,@A+DPTRMOV26H,A 失WAIT: MOVDPTR,#OUTBIG;将取出键值暂时保存在内存中, 以免数据丢;等键释放;释放出键盘输入值ADD A,R5;取出键码所在位置END九、仿真过程综述1.按照设计思路在 PROTEUS 软件中找到相应元器件,按照正确的连线方法将各个元器件连起来。