51单片机用键盘输入并用动态数码管显示

如题,利用51单片机的4*4键盘,输入数据,并用4个数码管分别显示,例如输入1显示1,再输入2,显示12,再输入3,显示123,输入4,显示1234,输入5显示2345,如此循环下去,可以用C语言,也可以用汇编,只要能实现功能就好,编完方便的话直接贴在下面,不太方便的话,就发到我邮箱zhoushuai0623@126.com

第1个回答  2010-06-28
CLK BIT P0.0
DAT BIT P0.1
STR BIT P0.2
S1 BIT P2.4
S2 BIT P2.5
S3 BIT P2.6
S4 BIT P2.7
ORG 0000H
MAIN:CLR 20H.0
MOV R0,#0FFH ;11111111
MOV R1,#04H ;00000100
LOOP:MOV C,20H.0
LOOP1: MOV A,R0
RRC A ;01111111-c(0)-
MOV R0,A ;01111111
MOV P2,A ;01111111
MOV A,P2 ;01111101
CPL A ;10000010
ANL A,#0FH ;00000010
JNZ NEXT
DJNZ R1,LOOP1
AJMP MAIN
NEXT:;LCALL DELAY2
MOV 20H.0,C
CLR C
JB ACC.0,K4
JB ACC.1,K3
JB ACC.2,K2
JB ACC.3,K1
K4:MOV A,R1 ;A=4
SUBB A,#01H ;A=3
MOV B,#04H ;B=00000100
MUL AB ;AB=12;=0BH A=0BH B=0
AJMP LOOP0
K3:MOV A,R1 ;A=4
SUBB A,#01H ;A=3
MOV B,#04H ;
MUL AB ;AB=12
ADD A,#01H ;A=0CH B=0
AJMP LOOP0
K2:MOV A,R1
SUBB A,#01H ;
MOV B,#04H
MUL AB
ADD A,#02H
AJMP LOOP0
K1:MOV A,R1
SUBB A,#01H ;
MOV B,#04H
MUL AB
ADD A,#03H

LOOP0:
ADD A,#01H ;(要显示的数)
MOV B,#0AH
DIV AB
SETB S1
SETB S2
CLR S3
SETB S4
ACALL DISP
LCALL DELAY1
MOV A,B
SETB S1
SETB S2
SETB S3
CLR S4
ACALL DISP
LCALL DELAY1
MOV A,#0
SETB S1
SETB S2
SETB S3
SETB S4
ACALL DISP
LCALL DELAY1
DJNZ R1,LOOP
AJMP MAIN

DISP: MOV DPTR,#TABLE
MOVC A,@A+DPTR
CPL A
SEND_ACC:
MOV R2, #8
CLR STR
S_LOOP:
RRC A ;A中的最低位移动到C
MOV DAT, C ;移动到D口
NOP
CLR CLK ;P0.1输出一个脉冲
NOP
NOP
SETB CLK
DJNZ R2, S_LOOP
SETB STR
CLR STR
RET

DELAY1: MOV R7,#50
DIP: MOV R5,#50
DJNZ R5,$
DJNZ R7, DIP
RET
/*DELAY2:MOV R6,#100
DIP2:MOV R4,#100
DJNZ R4,$
DJNZ R6,DIP2
RET*/

TABLE:DB 0F5H,05H,0E3H,67H,17H,76H,0F6H,25H
DB 0F7H,77H
END

显示送4094
proteus图我也有
第2个回答  2010-06-28
PS8数据线接在普通口还真不好办 数据线接在中断脚就很容易写啦 PS8接串口就更加方便啦 PS8键盘按键输出原理至少要弄懂 明白原理就很容易写啦

51单片机用键盘输入并用动态数码管显示
CLK BIT P0.0 DAT BIT P0.1 STR BIT P0.2 S1 BIT P2.4 S2 BIT P2.5 S3 BIT P2.6 S4 BIT P2.7 ORG 0000H MAIN:CLR 20H.0 MOV R0,#0FFH ;11111111 MOV R1,#04H ;00000100 LOOP:MOV C,20H.0 LOOP1: MOV A,R0 RRC A ;01111111-c(0)- MOV R0,A ;01111111 MOV P2...

51单片机怎样用键盘控制数码管显示
51单片机怎样用键盘控制数码管显示的方法。如下参考:1.首先,编写代码并点亮数码管。2.在编写源代码之后,确保原始代码是正确的。3.确认代码正确后,进入下一步,就是在这一行代码(箭头所指)中,删除这四个单词。4.然后如图所示,四个单词已被删除,只要修改相应的代码编号即可。5.表示数字0的代码在...

51单片机怎么用按键控制一个数码管,按一下显示一
\/*---名称:单个共阳数码管动态显示变化数字内容:通过循环检测P1口按键输入值,然后用数码管输出,没有按键按下时原值不变---*\/#include\/\/包

求由51单片机控制4x4键盘输入,4个数码管(采用动态扫描)显示 C语言编...
可以这样写,先计算按了几下了,按下若小于4次,让四个段选端前几个端导通,按下数超过或等于4次你就可以用扫屏的方式来显示就好了。比如第一下按的是8你就可以设置if和else语句组合啊!先有个数组d[]={0xf7;0xfb;0xfd;0xfe}\/\/段选,按了几下设为变量uint a\/\/无符号字符型,if(a<4...

如何在51单片机矩阵键盘里按一个键可实现数码管动态显示而不是一...
kbscan(void){unsigned char sccode,recode;P1=0x0f; \/\/发0扫描,列线输入if ((P2 & 0x0f) != 0x0f) \/\/有键按下{delay(20); \/\/延时去抖动if ((P1&0x0f)!= 0x0f){sccode = 0xef; \/\/逐行扫描初值while((sccode&0x01)!=0){ P1=sccode;if((P1&0x0f)...

51单片机,8位共阴极数码管动态显示12位学号,按键调整走动速度,C语言的...
unsigned char code SEG7[] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0xff};unsigned char DISP_BUFF[] = { 10, 10, 10, 10, 10, 10, 10, 10,1, 3, 9, 2, 5, 8, 0, 7, 4, 6, 3, 2,10, 10, 10, 10, 10, 10, 10, 10};unsigned char ...

51单片机控制数码管显示hello和动态显示123456
端口接动态数码管原理。P0端口接动态数码管的字形码笔段,P2端口接动态数码管的数位选择端,P1.7接一个开关,当开关接高电平时,显示“12345”字样;当开关接低电平时,显示“HELLO”字样。

请教高手,用51单片机独立按键控制数码管数字加减,为什么在按下独立按...
数码管一般都是动态扫描的,利用人眼的视觉暂留做的,你按下按键的时候,肯定有延时消抖,延时的时候就影响了数码管显示,所以数码管刷新的慢了,人眼就能分辨出来亮和灭的状态...解决办法 1、改进按键扫描 2、改进数码管显示 3、用嵌入式系统 以上三选一即可解决 ...

51单片机怎样设按键切换数码管显示时间和日期?
你要设置一个标志变量,如flag,在进入按键程序后,flag++;然后加个控制判断语句 if(flag>3)flag=0;这样,在显示模块中再加入开关语句;switch(flag){ case 0:...显示时间..case 1:...显示日期。。.case 2:...显示温度。。。}

急求51单片机数码管显示程序
希望以下能够给你帮助:\/* 实验目的:1.掌握键盘扫描的原理以及十\/十六进制的转换 2.了解单片机输入和输出的过程,以及如何对数据进行采集的 实验内容:键盘上对应有16个按键,从0到F,按下相应的键会在数码管上显示相应的数字,其中K0到K15是采用4*4的方式连接的 \/ ;; 0 1 2 3 --...

相似回答
大家正在搜