键盘和数码管扫描实验

合集下载

实验五 键盘扫描实验 实验报告

实验五 键盘扫描实验 实验报告

键盘扫描实验实验报告一、实验目的1. 掌握线反转法键盘扫描原理。

2. 了解单片机的输入和输出过程,理解单片机的数据采集过程。

二、实验内容单片机外接4x4键盘,通过线反转法判断按下的键,并在数码管上显示按键对应的数字。

第一行从左到右分别是开关K0, K1, K2, K3,第二行从左到右分别是K4, K5, K6, K7以此类推。

当按下Kn时,在数码管上显示数字n。

三、实验原理线翻转法:先对行(R0-R3)置0,对列(R4-R7)置1。

当有键被按下时,会把按键所在的列的电位从1变0,记录下位置;然后再将行列翻转,记录下按下键的所在行,两数进行或运算,就可以得到一个唯一表示按下键的数字。

例如:假定R0-R7分别与单片机的P2.0-P2.7相连。

先把R4-R7置1,R0-R3置0(通过指令MOV P2, #0F0H实现)。

当键K5被按下时,R5电位被拉低为低电平。

此时,P2口表示的数为:1101 0000(0xD0);然后再置R4-R7为0,R0-R3为1,此时,R1电位被拉低为低电平,此时,P2口表示的数为:0000 1101(0x0D)。

将两数相与取反,得到:0010 0010。

四、实验过程1. 连接好单片机及其外围设备电路2. 编写汇编程序ORG LJMP KeyLJMP K7: CJNE R2, #82H, K8ORG 0100H MOV P0, #0F8H Init: CLR P1.3 LJMP KeyMOV P0, #0C0H K8: CJNE R2, #14H, K9 Key: MOV P2, #0F0H MOV P0, #080HMOV A, P2 LJMP KeyMOV R1, A K9: CJNE R2, #24H, K10MOV P2, #0FH MOV P0, #090HMOV A, P2 LJMP KeyORL A, R1 K10: CJNE R2, #44H, K11CPL A MOV P0, #088HMOV R2, A LJMP KeyJNZ KeyPro K11: CJNE R2, #84H, K12LJMP Key MOV P0, #083H KeyPro: CJNE R2, #11H, K1 LJMP KeyMOV P0, #0C0H K12: CJNE R2, #18H, K13LJMP Key MOV P0, #0C6H K1: CJNE R2, #21H, K2 LJMP KeyMOV P0, #0F9H K13: CJNE R2, #28H, K14LJMP Key MOV P0, #0A1H K2: CJNE R2, #41H, K3 LJMP KeyMOV P0, #0A4H K14: CJNE R2, #48H, K15LJMP Key MOV P0, #086H K3: CJNE R2, #81H, K4 LJMP KeyMOV P0, #0B0H K15: CJNE R2, #88H, K16LJMP Key MOV P0, #08EH K4: CJNE R2, #12H, K5 LJMP KeyMOV P0, #099H K16: LJMP KeyLJMP Key ENDK5: CJNE R2, #22H, K6MOV P0, #092HLJMP KeyK6: CJNE R2, #42H, K7MOV P0, #082H五、实验结果1. 当按下开关Kn时,数码管能够显示对应的数字。

单片机实验——查询式键盘实验

单片机实验——查询式键盘实验

单片机实验——查询式键盘实验1.实验目的(1)掌握查询式按键检测方法(2)掌握数码管动态扫描汇编语言的编制方法2.预习要点(1)按键检测的基本原理(2)数码管动态扫描显示方法3.实验设备计算机、单片机实验箱。

4.实验内容基本要求:接实验二的实验内容,通过实验板的4个按键电路,将按键的检测线连接到CPU 的p1.0~p1.3上。

当按下按键1到4时,在实验板显示电路分别对应显示30H到33H存储单元的内容。

扩展要求:30H~33H中放置字母A~D的ASCII码,当按下按键1到4时,A~D字母循环间隔分别为1至4秒实验3ORG 0000HSJMP MAIN;********************************;主程序ORG 0030HMAIN:MOV SP,#70H;初始化8155MOV DPTR,#0100HMOV A,#03HMOVX @DPTR,ALOOP:LCALL KEYSCAN ;键扫描LCALL DISPLAY ;数码管显示SJMP LOOP;********************************;显示子程序DISPLAY:LD0:MOV DPTR,#0102HMOV A,#0FEHMOVX @DPTR,AMOV DPTR,#DTABMOV A,R0MOVC A,@A+DPTRMOV DPTR,#0101HMOVX @DPTR,ALCALL DELAYRET;********************************;字形表DTAB:DB 3FH,06H,5BH,4FH,66HDB 6DH,7DH,07H,7FH,6FHDB 77H,7CH,39H,5EH,79HDB 71H;********************************;延时1msDELAY:MOV R7,#2DEL1:MOV R6,#0FFH ;(这里用的是FFH,和250差不多的这里精确度要求不高) DEL2:DJNZ R6,DEL2DJNZ R7,DEL1RET;********************************;延时20ms ;用来消除抖动用的DELAY20MS:MOV R7,#40DEL11:MOV R6,#0FFHDEL22:DJNZ R6,DEL22DJNZ R7,DEL11RET;********************************;键扫描子程序KEYSCAN:MOV P1,#0FFH ;给P1全高,如果此时有键按下的话下一瞬间对应的位会马上变0MOV A,P1CJNE A,#0FFH,K_NEXT1 ;如果A=FFH则表明没有键按下,退出子程序,有键按下的话跳转到K_NEXT1RETK_NEXT1:LCALL DELAY20MS ;延时20ms,用来消除抖动MOV A,P1CJNE A,#0FFH,K1 ;再次检测P1是否为FFH,若为FFH说明刚才的是干扰,退出子程序,如果实在有键按下则跳转K1RETK1:JB ACC.0,K2 ;下面是逐位检测看看到底是哪一个按键按下,然后执行对应的操作,这里是把要现实的内容放到MOV R0,#01H ;R0里,ABCD键分别对应1234RETK2:JB ACC.1,K3MOV R0,#02HRETK3:JB ACC.2,K4MOV R0,#03HRETK4:JB ACC.3,KRETMOV R0,#04HRETKRET:MOV R0,#00HRET;********************************实验3扩展ORG 0000HSJMP MAIN;*******************************************ORG 0030HMAIN: MOV SP,#70H ;主程序;设置显示缓存区MOV 30H,#0AHMOV 31H,#0BHMOV 32H,#0CHMOV 33H,#0DH;初始化8155MOV DPTR,#0100HMOV A,#03HMOVX @DPTR,AMOV 40H,#0LOOP:MOV DPTR,#0102H ;关显示(控制字位) 为了使当没有键按下时数码管不亮MOV A,#0FFHMOVX @DPTR,AMOV DPTR,#0101H ;关显示(控制字形) 为了使当没有键按下时数码管不亮,其实这两个只取一个就可以了.MOV A,#0H ;显示间隔标志MOVX @DPTR,ALCALL KEYSCAN ;键扫描MOV R4,40H ;R4为字母变化的间隔CJNE R4,#0,LOOP1 ;若间隔为0,则表示没有键按下,若不为0,则跳转LOOP1,进行对应间隔的显示SJMP LOOPLOOP1:LCALL DISPLAY ;调用显示SJMP LOOP;*********************************************;显示子程序DISPLAY:MOV R0,#30HMOV R3,#0FEHMOV R4,40H ;显示间隔LD0:MOV DPTR,#0102H ;送字位MOV A,R3MOVX @DPTR,ANEXT:MOV DPTR,#DTAB ;查表,送字形MOV A,@R0MOVC A,@A+DPTRMOV DPTR,#0101HMOVX @DPTR,ANEXT1:LCALL DELAY1 ;延时T=R4*250msDJNZ R4,NEXT1MOV R4,40HINC R0CJNE R0,#34H,NEXT ;没有显示完ABCD的话继续显示,显示了跳出子程序RET;************************************************8;字形表DTAB:DB 3FH,06H,5BH,4FH,66HDB 6DH,7DH,07H,7FH,6FHDB 77H,7CH,39H,5EH,79HDB 71H;********************************************************;延时250MsDELAY1:MOV R5,#5DEL000:MOV R7,#100DEL111:MOV R6,#0FFHDEL222:DJNZ R6,DEL222DJNZ R7,DEL111DJNZ R5,DEL000RET;**********************************************************;键扫描KEYSCAN:MOV A,P1CJNE A,#0FFH,K_NEXT1MOV 40H,#0 ;如果没有键按下的话令40H为0 时间间隔为0RETK_NEXT1:LCALL DELAY2 ;消除抖动CJNE A,#0FH,K1RETK1:JB ACC.0,K2 ;检查看看是哪一个键按下,分别给40H赋不同的时间间隔MOV 40H,#1RETK2:JB ACC.4,K3MOV 40H,#2RETK3:JB ACC.2,K4MOV 40H,#3RETK4:JB ACC.3,KRETMOV 40H,#4KRET:RET;******************************************************;延时20msDELAY2:MOV R7,#40DEL11:MOV R6,#0FFH ;我个人比较习惯用FFH ╮( ̄▽ ̄")╭DEL22:DJNZ R6,DEL22DJNZ R7,DEL11RET;******************************************************8 END。

嵌入式实验报告数码管显示实验

嵌入式实验报告数码管显示实验

实验报告课程名称嵌入式系统编程实践实验仪器清华同方辰源嵌入式系统实验箱实验名称实验四:数码管显示实验系别__计算机学院_专业 _班级/学号学生姓名实验日期 2013年10月11日成绩___________________指导教师实验四:数码管显示实验一、实验问题回答(1)如何设置功能3,4中的循环速度?答:利用系统SysTick Handler中断,控制循环速度void SysTick_Handler (void){Event = 1;}(2)若是想实现类似实验(三)通过键盘动态控制循环速度,考虑一下应该如何设计?答:SysTickPeriodSet(SysCtlClockGet() / X)//设置x的大小就可以控制循环的速度。

void Reset_Counter_Speed(int x){SysTickIntDisable();SysTickDisable();SysTickPeriodSet(SysCtlClockGet() / x);// 设置x,控制计数频率,值与频率成正比SysTickEnable();SysTickIntEnable();},达到预期的效果。

二、实验目的和效果(效果即是否达到实验目的,达到的程度如何)学习、了解和掌握数码管工作原理和使用方法实验结果及检查(1)默认在在OLED屏幕上分行显示自己的学号、姓名、项目序号、时间,如“2010011001”、“zhangsan”、“work4”、“2012-11-”(2)首先在屏幕上显示四个功能选单,通过键盘A-F键选择不同功能,选择后屏幕显示相关功能提示,接受键盘输入的数字键0-9并在数码管上显示。

如:开始显示:“please choose the function:”“A: …”“B: …”“C: …”“D: …”按下“A”键后,显示”now you choose function A”(3)按下键盘后,根据不同功能在数码管上显示按键字符。

数码管显示和键盘扫描的ch451应用1

数码管显示和键盘扫描的ch451应用1

451 的数码管显示和键盘显示
1.系统功能:
单片机在开发过程中,常常会因为资源不足而不得不大量扩展接口芯片以满足应用系 统的需要,其中原因之一是人机界面中的键盘显示占用了系统太多资源,从而造成系统庞 大,同时降低了系统的可靠性。在单片机应用系统中,键盘显示通常可采用以下几种方式: (1)采用并行接口的键盘显示专用芯片8279。但8279所需外围元件多(显示驱动、 译码等)、占用电路板面积大、综合成本高,在中小系统中常常大材小用;(2)采用通用并 行I/O芯片扩展(如用8155等),但此方案同样需要驱动显示,同时键盘显示扫描还 需占用CPU大量时间;(3)采用专用显示控制器,并用CPU的I/O引脚完成键盘输 入(如 MC14499、PS7219、MAX7219、ICM7218、TLC5921等, 大多是串行接口并有显示驱动能力,I/O占用少)。这种接口方式省去了显示的扫描,而 且电路大多也很简单,通常在系统需要的按键较少时比较适用;(4)采用带I2C总线的 键盘显示芯片(如显示用SAA1064,键盘用PCF8574),不过这种方式对于无 I2C总线接口的CPU来说,编程显得有些不便;(5)采用串行接口的键盘显示专用芯 片,如BC7280/81、HD7279、CH451等。这类芯片占用CPU的资源 少,传输速度较快,外围器件要求也较少,在中小系统中都可得到广泛的应用,本文着重 介绍CH451的主要特性及接口应用方法。
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,力根保通据护过生高管产中线工资敷艺料设高试技中卷术资配,料置不试技仅卷术可要是以求指解,机决对组吊电在顶气进层设行配备继置进电不行保规空护范载高与中带资负料荷试下卷高总问中体题资配,料置而试时且卷,可调需保控要障试在各验最类;大管对限路设度习备内题进来到行确位调保。整机在使组管其高路在中敷正资设常料过工试程况卷中下安,与全要过,加度并强工且看作尽护下可关都能于可地管以缩路正小高常故中工障资作高料;中试对资卷于料连继试接电卷管保破口护坏处进范理行围高整,中核或资对者料定对试值某卷,些弯审异扁核常度与高固校中定对资盒图料位纸试置,.卷编保工写护况复层进杂防行设腐自备跨动与接处装地理置线,高弯尤中曲其资半要料径避试标免卷高错调等误试,高方要中案求资,技料编术试5写交卷、重底保电要。护气设管装设备线置备4高敷动调、中设作试电资技,高气料术并中课3试中且资件、卷包拒料中管试含绝试调路验线动卷试敷方槽作技设案、,术技以管来术及架避系等免统多不启项必动方要方式高案,中;为资对解料整决试套高卷启中突动语然过文停程电机中气。高课因中件此资中,料管电试壁力卷薄高电、中气接资设口料备不试进严卷行等保调问护试题装工,置作合调并理试且利技进用术行管,过线要关敷求运设电行技力高术保中。护资线装料缆置试敷做卷设到技原准术则确指:灵导在活。分。对线对于盒于调处差试,动过当保程不护中同装高电置中压高资回中料路资试交料卷叉试技时卷术,调问应试题采技,用术作金是为属指调隔发试板电人进机员行一,隔变需开压要处器在理组事;在前同发掌一生握线内图槽部纸内故资,障料强时、电,设回需备路要制须进造同行厂时外家切部出断电具习源高题高中电中资源资料,料试线试卷缆卷试敷切验设除报完从告毕而与,采相要用关进高技行中术检资资查料料和试,检卷并测主且处要了理保解。护现装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。

行列式键盘及8位七段数码管的显示拓展

行列式键盘及8位七段数码管的显示拓展

一、实验目的1、掌握矩阵式键盘的原理及编程方法,掌握数码管动态扫描显示的原理及编程方法二、实验原理在实验2的基础上改进程序,当按下数字键0~9时在数码管上显示,要求每按下一个新的数字时,在最低位(最右边)显示,之前按下的数字一次向左移动一个位置,当按下的数字键超过8个时,不再显示新内容。

当按下非数字键即剩下的6个键(A~F)中任意一个时,清除当前显示的内容。

注意这里需要判断按键是否弹起(避免重复显示,有关重复显示参考书第4章例5的重复计数问题,比较相似),否则多个数码管可能会显示同一按键对应的数值三、实验内容⑴掌握行列式键盘和8位七段数码管显示原理;⑵掌握实验3的C51语言编程;四、实验步骤⑴阅读与实验3有关的阅读材料;⑵参考上图,在ISIS中完成电路原理图的绘制;⑶在Keil μvision3中编写和编译C51程序,并生成可执行文件;⑷在μvision3中启动ISIS的仿真运行,并进行联机调试。

五、实验要求提交实验报告并包括如下内容:电路原理图、软件调试分析、C51源程序、仿真运行截图及实验小结。

①源程序:#include<reg51.h>sbit P3_2=P3^2;unsigned char segcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};unsigned char bitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsignedcharkey_buf[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x 77};unsigned int number=0;unsigned int buf[8]={10,10,10,10,10,10,10,10};void delay(unsigned int time){unsigned int j=0;for(;time>0;time--)for(j=0;j<125;j++);}void getkey() interrupt 0{ delay(10);if(P3_2==0){char key_scan[]={0xef,0xdf,0xbf,0x7f};char i=0,j=0;int m=0,n=0;for(i=0;i<4;i++){P1=key_scan[i];for(j=0;j<16;j++){if(key_buf[j]==P1){number=j;break;}}}for(i=0;i<4;i++){P1=key_scan[i];for(j=0;j<16;j++){while(key_buf[j]==P1);}}if(number<8){for(m=7;m>0;m--){buf[m]=buf[m-1];}buf[0]=number;}else if(number>9){for(n=0;n<8;n++)buf[n]=10;}}}void main(){int k;IT0=1;EX0=1;EA=1;while(1){P1=0x0f;for(k=0;k<8;k++){P0=segcode[10];P2=bitcode[k];P0=segcode[buf[k]];}}}。

键盘与数码管显示实验

键盘与数码管显示实验

R72 10K
S14 SW-PB S18 SW-PB S22 SW-PB S26 SW-PB
R73 10K
S15 SW-PB S19 SW-PB S23 SW-PB S27 SW-PB
D2 Diode
D3 Diode
D4 Diode
D5 Diode
J33 1 2 3 4 5 6 7 8
Header 8
R94
R95
Res1
Res1
Res1
Res1
Res1
Res1
Res1
Res1
330R
330R
330R
330R
330R
330R
330R
330R
DS1
11 7 4 2 1 10 5 3
a b DIG1 c d e f g DP
HDSP-B09G
DIG2 DIG3
DP3
DP2
K1 DIG4 K2
K3 K4
9 GND COM D 10
ULN2803A GND
VCC
Pad_DS_K1 Pad_DS_K2 Pad_DS_K3 Pad_DS_K4
Pad_DS_K5
Pad_DS_K6
Pad_DS_K7
Pad_DS_K8 J37
S8550
R80 Res1 10K Q20
S8550
R81 Res1 10K Q21
键盘与数码管显示
一、4X4键盘 二、LED显示器的基本结构 三、实验箱原理图 四、STC15 I/O口 工作模式配置 五、实验要求
一、4X4键盘
5V
行线(输出)
•键特征值的判断
列线(输入)
•键盘控制方式:扫描、中断

[知识]按键控制数码管和流水灯设计报告实验报告

[知识]按键控制数码管和流水灯设计报告实验报告

摘要000单片机自20世纪70年代以来,以其极高的性价比,以及方便小巧受到人们极大的重视和关注。

本设计选用msp430f249芯片作为控制芯片,来实现矩阵键盘对LED数码管显示的控制。

通过单片机的内部控制实现对硬件电路的设计,从而实现对4*4矩阵键盘的检测识别。

用单片机的P3口连接4×4矩阵键盘,并以单片机的P3.0-P3.3口作键盘输入的列线,以单片机的P3.4-P3.7口作为键盘输入的行线,然后用P0.0-P0.7作输出线,通过上拉电阻在显示器上显示不同的字符“0-F”。

在硬件电路的基础上加上软件程序的控制来实现本设计。

其工作过程为:先判断是否有键按下,如果没有键按下,则继续检测整个程序,如果有键按下,则识别是哪一个键按下,最后通过LED数码管显示该按键所对应的序号。

000关键字:单片机、流水灯、数码管、控制系统SCM since the nineteen seventies, with its high price, and a convenient compact attention and great concern. Thisdesign uses msp430f249 chip as the control chip, to realize the control of the LED digital tube display matrix keyboard. Through the internal control single chip to realize the hardware design of the circuit, so as to re alize the detection and recognition of 4*4 matrix keyboard. 4 * 4 matrix keyboard connected with the MCU P3 port, and the MCU P3.0 P3.3 port for a keyboard input, MCU P3.4P3.7 port as the lines of keyboard input, and then use theP0.0 P0.7 as the output line, by a pull-up resistor display different characters "0F on display". Control with software programs based on the hardware circuit to realize the design. The working process is: first to determine whether a key is pressed, if no key is pressed, it will continue to test the whole procedure, if a key is pressed, the000 Keywords: SCM, water lights, digital tubes, control system000键盘控制流水灯和数码管实验报告00目录000一设计的目的 (200)二任务描述及方案设计 (300)1. 任务描述 (300)2. 方案设计 (300)三硬件设计方案 (30)001. Msp430f149单片机的功能说明 (30)2. 显示器功能 (40)3. 复位电路 (40)4. 按键的部分 (40)5. 74HC573的特点 (4)0006. 流水灯和数码管电路原理图 (40)007. 元器件清单 (40)四程序设计方案 (50)001. 用IAR Embedded W orkbench软件编程序 (5)002. 仿真电路图 (60)五实物实验 (70)001. 实物图 (7)002. 测试结果与分析 (700)六结论 (11)000八参考文献 (16)000一、设计目的0001、进一步巩固和加深学生所学一门或几门相关专业课理论知识,培养学生设计、计算、绘画、计算机应用、文献查阅、报告撰写等基本技能;0002、培养学生实践动手能力及独立分析和解决工程实践问题能力;003、培养学生的团队协作精神、创新意思、严肃认真的治学态度和严谨求实的工作作风。

键盘输入与七段数码管显示实验

键盘输入与七段数码管显示实验
;查第 4 行无键按下,转查第 5 行 ;第 4 行有键按下,行首键码#04H 送(A) ;转求键码
;查第 5 行无键按下,转查第 6 行 ;第 5 行有键按下,行首键码#05H 送(A) ;转求键码
;查第 6 行无键按下,转查第 7 行 ;第 6 行有键按下,行首键码#06H 送(A) ;转求键码
实 才知道原因,原来是我们那设备箱没有初始化好。后来在老师的指导下,我
验 们把设备箱设置好后,终于做出了结果。也达到了实验目的。①.学会利用
总 8255 扩展 I/O 口;

②.掌握行列式键盘、7 段数码显示器接口的设计方法,验证 7 段数码管
显示原理;
③.通过软硬件结合,了解单片机应用中软硬件的相依性。 总的来说,这次实验让我收获颇多啊,锻炼了我独自想考和动手的能力。
;查第 2 行无键按下,转查第 3 行
.
MOV A, #02H
AJMP LKP
LTHR: JB ACC.3, LFOU
MOV A, #03H
AJMP LKP
LFOU: JB
ACC.4, LFIV
MOV A, #04H
AJMP LKP
LFIV: JB
ACC.5, LSIX
MOV A, #05H
AJMP LKP
MOV A, #00H
;第 0 行有键按下,行首键码#00H 送(A)
AJMP LKP
;转求键码
LONE: JB
ACC.1, LTWO
;查第 1 行无键按下,转查第 2 行
MOV A, #01H
;第 1 行有键按下,行首键码#01H 送(A)
AJMP LKP
;转求键码
LTWO: JB
ACC.2, LTHR
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

键盘和数码管扫描实验
//*******键盘和数码管扫描实验*******//
# include<reg52.h>
# define uint unsigned int //宏定义
# define uchar unsigned char
sbit dula=P2^6; //数码管段选
sbit wela=P2^7; //数码管位选
uchar i=100;
uchar key1,key2,temp,j,k,m,n;
uchar led[]={0x00,0x06,0x5b,0x4f,0x66}; //数码管显示驱动1 2 3 4
void delay(uchar i) //延时程序
{
for(j=i;k>0;j--)
for(k=125;k>0;k--);
}
void display1(uchar num1) //数码管段选位选程序
{
P0=led[num1]; dula=1; dula=0;
P0=0xfe; wela=1; wela=0;
}
void display2(uchar num2) //数码管段选位选程序
{
P0=led[num2]; dula=1; dula=0;
P0=0xfd; wela=1; wela=0;
}
void close_led() //数码管清楚关闭程序
{
P0=0x00; dula=1; dula=0;
P0=0xff; wela=1; wela=0;
}
void hangxuan() //行选程序
{
temp=P3;
temp=temp&0xf0; //屏蔽低四位
if(temp!=0xf0) //判断高四位是否存在低电平,即判断是否存在按键按下{
delay(10); //延时消抖
}
}
void saomiao() //扫描程序部分
{
switch(m)
{
case 0x01:P3=0xfe;hangxuan();
if(temp!=0xf0) key1=1;break; //第一行判断case 0x02:P3=0xfd;hangxuan();
if(temp!=0xf0) key1=2;break; //第二行判断case 0x03:P3=0xf7;hangxuan();
if(temp!=0xf0) key1=3;break; //第三行判断case 0x04:P3=0xfb;hangxuan();
if(temp!=0xf0) key1=4;break; //第四行判断}
switch(temp)
{
case 0xd0:key2=1;break; //第一列判断
case 0xe0:key2=2;break; //第二列判断
case 0xb0:key2=3;break; //第三段判断
case 0x70:key2=4;break; //第四段判断
}
display1(key1); //显示对应的行数for(n=0;n<2;n--)
delay(100);
display2(key2); //显示对应的列数for(n=0;n<2;n--)
delay(100);
}
void main()
{
m=0;
close_led(); //关闭数码管
while(1)
{
saomiao(); //等待按键输入
m++;
if(m==5)
m=0;
}
}。

相关文档
最新文档