用89C51单片机设计4*4矩阵式键盘计算器程序 要汇编的 求解!

作者&投稿:空炎 (若有异议请与网页底部的电邮联系)
用89C51单片机设计4*4矩阵式键盘计算器程序 要汇编的~

KEYBUF EQU 40H ;键号存放单元
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN: MOV KEYBUF,#0 ;初始键号设位0,也可以为任意值
MOV R0,#30H ;显示首地址
MOV R2,#0CH ;计算数据存放单元个数
CLR A
QING: MOV @R0,A ;将数据存放单元清零
INC R0
DJNZ R2,QING
MOV P0,#8FH ;关闭显示
MOV R1,#30H ;将显示首地址存放R1里
;===============================================
;五位无符号显示子程序
DIS1: MOV R0,#30H ;把显示数据第一位放在R0里
MOV R2,#04H ;把显示的位码放在R2里
MOV R3,#05H ;把显示的长度放在R3里
DIS2: MOV A,@R0
ANL A,#0FH ;屏蔽显示数据的高四位
MOV B,A
MOV A,R2
ANL A,#0FH ;屏蔽位码的高四位
SWAP A
ORL A,B
MOV P0,A ;送总显示数据到P0显示
LCALL DELY4ms ;调用延时4ms
INC R0 ;取下一个显示数据
DEC R2
DJNZ R3,DIS2 ;四位显示晚后重新开始显示
;===================================================
;键盘扫描子程序
WAIT: MOV P1,#0FFH ;P1口送高电平
CLR P1.0 ;第一行清零
MOV A,P1 ;读P1口
ANL A,#0F0H ;低位屏蔽
XRL A,#0F0H ;判断低位是否有低电平 ,即判断是否有按键按下
JZ NOKEY1 ;地位有低电平继续扫描,否者跳到第而行去扫描
LCALL DELY10ms ;延时10ms去抖在进行判断是否有按键按下
MOV A,P1 ;继续读P1口
ANL A,#0F0H ;判断低位是否有低电平
CJNE A,#0E0H,NK1 ;如果扫描数据不为0E0H就转到NK1
MOV KEYBUF,#0 ;否者判断为0号键
AJMP DK ;转DK1查表程序
NK1: CJNE A,#0D0H,NK2 ;如果扫描数据不为0D0H就转到NK2
MOV KEYBUF,#1 ;否者判断为1号键
AJMP DK ;转DK2查表程序
NK2: CJNE A,#0B0H,NK3 ;如果扫描数据不为0B0H就转到NK3
MOV KEYBUF,#2 ;否者判断为2号键
AJMP DK ;转DK3查表程序
NK3: CJNE A,#70H,NK4 ;如果扫描数据不为70H就转到NK4
LJMP SAN_CHU
NK4: NOP
NOKEY1: MOV P1,#0FFH ;和上面相同
CLR P1.1
MOV A,P1
ANL A,#0F0H
XRL A,#0F0H
JZ NOKEY2
LCALL DELY10MS
MOV A,p1
ANL A,#0F0H
XRL A,#0F0H
JZ NOKEY2
MOV A,P1
ANL A,#0F0H
CJNE A,#0E0H,NK5
MOV KEYBUF,#3
AJMP DK
NK5: CJNE A,#0D0H,NK6
MOV KEYBUF,#4
AJMP DK
NK6: CJNE A,#0B0H,NK7
MOV KEYBUF,#5
AJMP DK
NK7: CJNE A,#70H,NK8
MOV KEYBUF,#10 ;否者判断为3号键
AJMP DK ;转DK4查表程序
NK8: NOP
NOKEY2: MOV P1,#0FFH
CLR P1.2
MOV A,P1
ANL A,#0F0H
XRL A,#0F0H
JZ NOKEY3
LCALL DELY10MS
MOV A,P1
ANL A,#0F0H
XRL A,#0F0H
JZ NOKEY3
MOV A,P1
ANL A,#0F0H
CJNE A,#0E0H,NK9
MOV KEYBUF,#6
AJMP DK
NK9: CJNE A,#0D0H,NK10
MOV KEYBUF,#7
AJMP DK
NK10: CJNE A,#0B0H,NK11
MOV KEYBUF,#8
AJMP DK
NK11: CJNE A,#70H,NK12
LJMP DENG_HAO
NK12: NOP
NOKEY3: MOV P1,#0FFH
CLR P1.3
MOV A,P1
ANL A,#0F0H
XRL A,#0F0H
JZ NOKEY4
LCALL DELY10MS
MOV A,P1
ANL A,#0F0H
XRL A,#0F0H
JZ NOKEY4
MOV A,P1
ANL A,#0F0H
CJNE A,#0E0H,NK13
LJMP CHU
NK13: CJNE A,#0D0H,NK14
LJMP CHENG
NK14: CJNE A,#0B0H,NK15
LJMP JIAN
NK15: CJNE A,#70H,NK16
LJMP JIA
NK16: NOP
;=======================================================
;查表求键值程序
DK: MOV B,#00H
MOV A,KEYBUF ;查表程序 查对应的键号数据
MOV DPTR,#TABLE ;把表头地址放入DPTR
MOVC A,@A+DPTR ;A里面存放的为键号,利用A和表头地址找到对应的键号数据
MOV B,A ;把查到的数据送往显示单元
INC R1 ;取下一个显示单元
MOV A,R1
CJNE A,#36H,DKA1 ;判断显示单元是否已满
MOV R1,#35H ;35H,36H单元用于更好的控制五位显示
AJMP DKA
DKA1: MOV 34H,33H ;按键代码按左移显示,先按先显示
MOV 33H,32H
MOV 32H,31H
MOV 31H,30H
MOV 30H,B
DKA: MOV A,P1 ;读P1口
ANL A,#0F0H ;屏蔽高四位
XRL A,#0F0H ;地位是有低电平
JNZ DKA ;如果有低电平继续读P1口,否者向下执行,查找第二行
NOKEY4: LJMP DIS1
;===================================
;功能按键功能设定
DENG_HAO:MOV DPTR,#JI_SUAN ;等号键功能通过加、减、乘、除设定的偏移量来调用子程序
MOV A,3CH ;3CH存放的为功能程序入口地址偏移量
JMP @A+DPTR ;转移到按键功能程序
JI_SUAN: AJMP JIA1 ;加计算子程序
AJMP JIAN1 ;减计算子程序
AJMP CHENG1 ;乘计算子程序
AJMP CHU ;除计算子程序
;=======删除键功能
SAN_CHU: ACALL QING_DIS
AJMP DKA
;=======加键功能
JIA: MOV 3CH,#00H
ACALL CUN_SHU
ACALL QING_DIS
AJMP DKA
;=======减键功能
JIAN: MOV 3CH,#02H
ACALL CUN_SHU
ACALL QING_DIS
AJMP DKA
;=======乘键功能
CHENG: MOV 3CH,#04H
ACALL CUN_SHU
ACALL QING_DIS
AJMP DKA
;=======除键功能
CHU: MOV 3DH,#06H
ACALL CUN_SHU
ACALL QING_DIS
AJMP DKA

;=================================
;存被加(减、乘、除)数,存放在37H~3BH里
CUN_SHU: MOV 37H,30H ;36H存放的为最低位
MOV 38H,31H
MOV 39H,32H
MOV 3AH,33H
MOV 3BH,34H ;3AH存放的为最高位
RET
;================================
;清除显示单元
QING_DIS: MOV R1,#30H
QING1: MOV @R1,#00H
INC R1
MOV A,R1
CJNE A,#36H,QING1
MOV R1,#30H
LOP1: RET
;================================
;十进制加法子程序
JIA1:
MOV A,37H ;个位被加数
ADD A,30H ;个位被加数+加数
MOV B,#10 ;十六进制除10转换成BCD码
DIV AB
MOV 30H,B ;余数即个位存放在30H
MOV 37H,A ;商存放在37H
MOV A,38H ;十位被加数
ADD A,31H ;十位被加数+加数
ADD A,37H ;加上个位之和的进位
MOV 37H,#00H ;清除37H
MOV B,#10 ;十六进制除10转换成BCD码
DIV AB
MOV 31H,B ;余数即十位存放在31H
MOV 38H,A ;商存放在38H
MOV A,39H ;百位计算同十位
ADD A,32H
ADD A,38H
MOV 38H,#00H
MOV B,#10
DIV AB
MOV 32H,B
MOV 39H,A
MOV A,3AH ;千位计算同十位
ADD A,33H
ADD A,39H
MOV 39H,#00H
MOV B,#10
DIV AB
MOV 33H,B
MOV 3AH,A
MOV A,3BH ;万位计算同十位
ADD A,34H
ADD A,3AH
MOV 3AH,#00H
MOV B,#10
DIV AB
MOV 34H,B
MOV 3BH,#00H
AJMP DKA
;=====================
JIAN1: AJMP DKA
CHENG1: AJMP DKA
CHU1: AJMP DKA
;=============================================
;延时程序和查表表格
DELY4ms: MOV R6,#8 ;延时4毫秒
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
DELY10ms:MOV R6,#20 ;延时10毫秒
D2: MOV R7,#248
DJNZ R7,$
DJNZ R6,D2
RET
TABLE: DB 07H, 04H, 01H ; / 本表格是以键盘为参考 7 8 9 /
DB 08H, 05H, 02H ; * 4 5 6 *
DB 09H, 06H, 03H ; - 1 2 3 -
DB 00H, 00H ;= + 清除 0 = +
END

这是郭天祥老师写的:

#include
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
sbit key1=P3^4;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0};
uchar num,temp,num1;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
uchar keyscan();
void display(uchar aa);
void main()
{
num=17;
dula=1;
P0=0;
dula=0;
wela=1;
P0=0xc0;
wela=0;

while(1)
{
display(keyscan());
}
}
void display(uchar aa)
{
dula=1;
P0=table[aa-1];
dula=0;
}
uchar keyscan()
{
P3=0xfe;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:num=1;
break;
case 0xde:num=2;
break;
case 0xbe:num=3;
break;
case 0x7e:num=4;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}

P3=0xfd;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed:num=5;
break;
case 0xdd:num=6;
break;
case 0xbd:num=7;
break;
case 0x7d:num=8;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}


P3=0xfb;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb:num=9;
break;
case 0xdb:num=10;
break;
case 0xbb:num=11;
break;
case 0x7b:num=12;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}


P3=0xf7;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xe7:num=13;
break;
case 0xd7:num=14;
break;
case 0xb7:num=15;
break;
case 0x77:num=16;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
return num;

}

KEYVAL EQU 30H

KEYTM EQU 31H

KEYSCAN EQU 32H

DAT  EQU 33H

SCANLED EQU 37H

S_DAT EQU 38H

D_DAT EQU 39H

R_DATL EQU 3AH

R_DATH EQU 3BH

CALFLAG EQU 3CH

FLAG BIT 00H

ORG 0000H

LJMP MAIN

ORG 000BH

LJMP T0ISR

ORG 0030H

MAIN:

  MOV SP,#5FH

  MOV TMOD,#01H

  MOV TH0,#0D8H

  MOV TL0,#0F0H

  MOV KEYVAL,#0

  MOV P2,#00H

  MOV SCANLED,#0

  MOV 33H,#0H

  MOV 34H,#0H

  MOV 35H,#0H

  MOV 36H,#0H

  MOV S_DAT,#0

  MOV D_DAT,#0

  CLR FLAG

  SETB EA

  SETB ET0

  SETB TR0

LOOP:

  LCALL KEYSEL

  MOV A,KEYVAL

  CJNE A,#0FFH,LOOP1

  SJMP LOOP

LOOP1:

  CJNE A,#11,LOOP2 ;“=”

  MOV A,33H

  MOV B,#10

  MUL AB

  ADD A,34H

  MOV D_DAT,A

  LCALL DEALDAT

  LCALL HB2

  MOV A,R5

  ANL A,#0FH

  MOV 34H,A

  MOV A,R5

  SWAP A

  ANL A,#0FH

  MOV 33H,A

  MOV A,R4

  ANL A,#0FH

  MOV 36H,A

  MOV A,R4

  SWAP A

  ANL A,#0FH

  MOV 35H,A

  SJMP LOOP

LOOP2:

  CJNE A,#15,LOOP3 ;“+”

  LCALL GETDAT

  SJMP LOOP

LOOP3:

  CJNE A,#14,LOOP4 ;“-”

  MOV CALFLAG,#1

  LCALL GETDAT

  SJMP LOOP

LOOP4:

  CJNE A,#13,LOOP5 ;“*”

  MOV CALFLAG,#2

  LCALL GETDAT

  SJMP LOOP

LOOP5:

  CJNE A,#12,LOOP6 ;"/"

  MOV CALFLAG,#3

  LCALL GETDAT

  SJMP LOOP

LOOP6:

  CJNE A,#10,LOOP7  ;数字键

LOOP7:

  JC LOOP8

  LJMP LOOP

LOOP8:

  MOV 33H,34H

  MOV 34H,KEYVAL

  LJMP LOOP

;------------------

HB2:

  MOV R6,R_DATH

  MOV R7,R_DATL

  CLR  A   ;BCD码初始化

  MOV  R3,A

  MOV  R4,A

  MOV  R5,A

  MOV  R2,#10H   ;转换双字节十六进制整数

HB3:

  MOV  A,R7   ;从高端移出待转换数的一位到 CY 中

  RLC  A

  MOV  R7,A

  MOV  A,R6

  RLC  A

  MOV  R6,A

  MOV  A,R5   ;BCD码带进位自身相加,相当于乘2

  ADDC  A,R5

  DA  A   ;十进制调整

  MOV  R5,A

  MOV  A,R4

  ADDC  A,R4

  DA  A

  MOV  R4,A

  MOV  A,R3

  ADDC  A,R3

  MOV  R3,A   ;双字节十六进制数的万位数不超过6,不用调整

  DJNZ  R2,HB3   ;处理完16bit

  RET

;------------------

GETDAT:

  MOV A,33H

  MOV B,#10

  MUL AB

  ADD A,34H

  MOV S_DAT,A

  MOV 33H,#0

  MOV 34H,#0

  MOV 35H,#0

  MOV 36H,#0

  RET

;------------------

DEALDAT:

  MOV A,CALFLAG

  JNZ DEAL01

DEAL00:    ;+

  MOV A,S_DAT

  ADD A,D_DAT

  MOV R_DATL,A

  CLR A

  ADDC A,#0

  MOV R_DATH,A

  RET

DEAL01:    ;=

  DEC A

  JNZ DEAL02

  CLR C

  MOV A,S_DAT

  SUBB A,D_DAT

  MOV R_DATL,A

  SUBB A,#0

  MOV R_DATH,A

  RET

DEAL02:    ;*

  DEC A

  JNZ DEAL03

  MOV A,S_DAT

  MOV B,D_DAT

  MUL AB

  MOV R_DATL,A

  MOV R_DATH,B

  RET

DEAL03:    ;/

  MOV A,S_DAT

  MOV B,D_DAT

  DIV AB

  MOV R_DATL,A

  MOV R_DATH,#0

  RET

;------------------

KEYSEL: 

  MOV KEYVAL,#0

  MOV KEYSCAN,#0EFH

  LCALL GETKEY

  MOV A,KEYTM

  JZ KEYS1

  MOV KEYVAL,A

  SJMP KEYRTN

KEYS1: 

  MOV KEYSCAN,#0DFH

  LCALL GETKEY

  MOV A,KEYTM

  JZ KEYS2

  CLR C

  ADD A,#4

  MOV KEYVAL,A

  SJMP KEYRTN

KEYS2: 

  MOV KEYSCAN,#0BFH

  LCALL GETKEY

  MOV A,KEYTM

  JZ KEYS3

  CLR C

  ADD A,#8

  MOV KEYVAL,A

  SJMP KEYRTN

KEYS3: 

  MOV KEYSCAN,#7FH

  LCALL GETKEY

  MOV A,KEYTM

  JZ KEYRTN

  CLR C

  ADD A,#12

  MOV KEYVAL,A

KEYRTN: 

  LCALL CHGKEY

  RET

;--------------------

GETKEY: 

  MOV KEYTM,#0

  MOV A,KEYSCAN

  MOV P3,A

  NOP

  MOV A,P3

  ANL A,#0FH

  XRL A,#0FH

  JZ NOKEY

  MOV R2,#10

  LCALL DELAY

  MOV A,P3

  ANL A,#0FH

  XRL A,#0FH

  JZ NOKEY

  MOV A,P3

  ANL A,#0FH

  MOV R7,A

SF:

  MOV A,P3

  ANL A,#0FH

  XRL A,#0FH

  JNZ SF

  MOV A,R7

  CJNE A,#0EH,NK1

  MOV KEYTM,#1

  SJMP NOKEY

NK1:

  CJNE A,#0DH,NK2

  MOV KEYTM,#2

  SJMP NOKEY

NK2:

  CJNE A,#0BH,NK3

  MOV KEYTM,#3

  SJMP NOKEY

NK3:

  CJNE A,#07H,NOKEY

  MOV KEYTM,#4

NOKEY: RET

;--------------------

DELAY:

  MOV R3,#50

DELAY1:

  MOV R4,#100

  DJNZ R4,$

  DJNZ R3,DELAY1

  DJNZ R2,DELAY

  RET

;--------------------

T0ISR:

  PUSH ACC

  CLR TR0

  MOV TH0,#0D8H

  MOV TL0,#0F0H

  SETB TR0

  MOV DPTR,#LEDTAB

T000:      ;数字显示

  MOV R0,#DAT

  MOV A,SCANLED

  ADD A,R0

  MOV R0,A

  MOV A,SCANLED

  JNZ T001

  MOV P2,#01H

  SJMP T0DIS

T001:

  DEC A

  JNZ T002

  MOV P2,#02H

  SJMP T0DIS

T002:

  DEC A

  JNZ T003

  MOV P2,#04H

  SJMP T0DIS

T003:

  MOV P2,#08H

T0DIS:

  MOV A,@R0

  MOVC A,@A+DPTR

;  CPL A

  MOV P0,A

  INC SCANLED

  MOV A,SCANLED

  ANL A,#03H

  MOV SCANLED,A

  POP ACC

  RETI

;--------------------

CHGKEY:

  MOV A,KEYVAL

  JZ KV16

  DEC A

  JNZ KV01

  MOV KEYVAL,#7

  RET

KV01:

  DEC A

  JNZ KV02

  MOV KEYVAL,#4

  RET

KV02:

  DEC A

  JNZ KV03

  MOV KEYVAL,#1

  RET

KV03:

  DEC A

  JNZ KV04

  MOV KEYVAL,#10

  RET

KV04:

  DEC A

  JNZ KV05

  MOV KEYVAL,#8

  RET

KV05:

  DEC A

  JNZ KV06

  MOV KEYVAL,#5

  RET

KV06:

  DEC A

  JNZ KV07

  MOV KEYVAL,#2

  RET

KV07:

  DEC A

  JNZ KV08

  MOV KEYVAL,#0

  RET

KV08:

  DEC A

  JNZ KV09

  MOV KEYVAL,#9

  RET

KV09:

  DEC A

  JNZ KV10

  MOV KEYVAL,#6

  RET

KV10:

  DEC A

  JNZ KV11

  MOV KEYVAL,#3

  RET

KV11:

  DEC A

  JNZ KV12

  MOV KEYVAL,#11 ;=

  RET

KV12:

  DEC A

  JNZ KV13

  MOV KEYVAL,#12 ;/

  RET

KV13:

  DEC A

  JNZ KV14

  MOV KEYVAL,#13 ;*

  RET

KV14:

  DEC A

  JNZ KV15

  MOV KEYVAL,#14 ;-

  RET

KV15:

  DEC A

  JNZ KV16

  MOV KEYVAL,#15 ;+

  RET

KV16:

  MOV KEYVAL,#0FFH

  RET

;--------------------

LEDTAB:

  DB 0C0H ;"0" 00H

  DB 0F9H ;"1" 01H

  DB 0A4H ;"2" 02H

  DB 0B0H ;"3" 03H

  DB 99H ;"4" 04H

  DB 92H ;"5" 05H

  DB 82H ;"6" 06H

  DB 0F8H ;"7" 07H

  DB 80H ;"8" 08H

  DB 90H ;"9" 09H

  DB 88H ;"A" 0AH

  DB 83H ;"B" 0BH

  DB 0C6H ;"C" 0CH

  DB 0A1H ;"D" 0DH

  DB 86H ;"E" 0EH

  DB 8EH ;"F" 0FH

  DB 0FFH ;" " 10H

;--------------------

END




89C51串行通信中,单片机如何自动调节波特率,望高手指点!(最好有详细...
要一个串口,上报又需要另一个串口,这就要求单片机具有双串口的功能,但我们知道一般的51 系列只提供一个串口,那么另一个串口只能靠程序模拟。本文所说的模拟串口, 就是利用51的两个输入输出引脚如P1.0和P1.1,置1或0分别代表高低电 平,也就是串口通信中所说的位,如起始位用低电平,则将其...

单片机89c51一个6位LED数码管显示功能 程序,希望能准确点的程序,只显...
include <reg51.h> include <intrins.h> void delay(unsigned int i); \/\/函数声名 char DelayCNT;\/\/定义变量 \/\/此表为 LED 的字模, 共阴数码管 0-9 - unsigned char code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; \/\/段码控制 \/\/...

这个单片机89c51的电路图各部分原件有什么用,以及为什么要这样设计...
U1是单片机,LS1是一个小喇叭发声音的。X1是晶体振荡器,提供单片机的工作频率。K1到K4是按键,按下以后通过一个中断信号来通知单片机。用户有按键的动作。再上面是一个显示屏。

89C51单片机的当前工作寄存器组如何选择
由程序状态字寄存器PWS的D3,D4位来控制;地址为D0H PWS的结构如下 单片机共有四个工作寄存器组(0 组-3 组),它们就是由 RS1,RS0 来控制,这两位就在 这里,它共有四种组合状态,看上面的表格:每个工作寄存器组有 8 个字节,分别记为 R0-R7,当然在 某一时刻,CPU 只使用其中的一组 在...

求用C语言编写一个单片机89C51电子时钟程序,有时,分,秒,还有电路图_百 ...
include <NEW_8051.h>"#include <task.h>\/***\/sbit T_CLK=P3^5; \/\/DS1302引脚连接sbit T_IO =P3^6;sbit T_RST=P3^7;sbit ACC0=ACC^0; \/\/1bit数据存储位sbit ACC7=ACC^7;uchar starts_time[7]={0x00,0x10,0x22,0x20,0x05,0x04,0x10}; \/\/初始化后设置uchar Sec;...

89C51单片机课设
ORG 0000H LJMP MAIN ORG 000BH ;定时器T0中断入口地址 AJMP BRTO ORG 0030H MAIN: MOV TMOD, #01H ;置T0为方式1 MOV R0, #14H MOV R2, #8 MOV A, #0FEH ; 赋亮灯数据初值 MOV TH0, #03CH ;送初值 MOV TL0, #0B0...

89c51单片机两个数码管同时工作怎么弄
89c51单片机两个以上数码管同时工作,一般采用扫描显示方式,如果加上按键(矩阵扫描按键)就是如下面的仿真图,可以作为参考,有参考代码如下。include<reg51.h> define uchar unsigned char uchar temp;int key1,key,disbuf;\/\/ 此表为 LED 的字模 0 1 2 3 4 5 6 7 8 9 a b c d e f u...

89c51单片机程序设计!!!
题目的要求可以理解为,将电压的变化以二进制数字的形式表示出来(即用发光 二极管来表示二进制数)。硬件需要单片机、发光二极管、ad转化器(如TLC549)下面提供一个例子。\/ 文件名 : TLC549.c 描述 : TLC549是一个新型的AD转换器,具有8位的分辨率,具有控制简单,体积小的优点。\/ include<re...

求编程单片机89c51,要求:按key1(P3.4,p3.5)键三次后,P1口的LED灯全部点...
\/ 晶振4MHZ,按键key1为P3.4,P3.5接口 功能:按 key1键三次,P1灯亮,再按一次灭,如此重复 \/ include<reg51.h> sbit key1 = P3^4;\/ void delay40us(uint time)输入参数:time 输出参数:无 函数功能:延时程序40us \/ void delay40us(unsigned int time){ unsigned char ks;while(...

89c51单片机的数字钟程序?
2016-11-30 求程序用AT89C51单片机...用八位数码管实现数字... 2015-11-03 利用AT89C51单片机制作多功能数字时钟 2011-11-24 求c51单片机电子钟程序(c语言) 13 2010-12-30 C语言 AT89C52数字钟的程序问题 9 2012-01-09 单片机89C51 电子时钟程序 4位数码管,有4个开关分别控... 5 2013-07-31 ...

中卫市19274007962: 89c51单片机4*4矩阵键盘编程. -
红张祖师: PANDUAN: MOV P1,#0FFHCLR P1.4MOV A,P1ANL A,#0FHXRL A,#0FHJZ SW1LCALL DELAY10MSJZ SW1//确认有键按下,但不知道哪个,此时可以之间让蜂鸣器叫 MOV P3.0,#1//蜂鸣器发声(赋1还是赋0取决你用的蜂鸣器)...

中卫市19274007962: 急求一个由89C51单片机的代码!要求用4*4矩阵键盘控制LED矩阵输出0~9的数字!
红张祖师: 可以了吧.能推荐答案给分吗, 也是反转写的,下次自己说要C的就行#include&lt;reg52.h&gt;#define uchar unsigned char#define uint unsigned intvoid delay(uint k);void display();void keyscan();uchar array[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7...

中卫市19274007962: 求.用89C51单片机设计4*4矩阵式键盘计算器程序 -
红张祖师: /*我写的这个计算器可以算255范围以内的整数计算,本打算再加入小数与做最后的处理工作.可是又太费时间,所以就放那里了.看见了你的提问,也懒得改一改,你看看能不能用.*/ #include<reg51.h> unsigned char Line,Row,Val; void delay(...

中卫市19274007962: 最简单的汇编矩阵键盘程序4*4得芯片用AT89C51. -
红张祖师: 14. 4*4矩阵式键盘识别技术 1. 汇编源程序KEYBUF EQU 30H ORG 00HSTART: MOV KEYBUF,#2WAIT: MOV P3,#0FFH CLR P3.4 MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY1 LCALL DELY10MS MOV A,P3 ANL A,#0FH XRL A,#0FH JZ ...

中卫市19274007962: 51单片机 如何4*4矩阵键盘输入按键 继电器输出信号 -
红张祖师: ........... Inter0_process() interrupt 2 //外部中断1 { Key_scan();//你的键盘扫描程序(中断服务程序),一旦触发中断,将运行至本段. } //主程序main() {........... ........... ........... EX1=1; //开中断一 P3.3 IT1=1; //下降沿触发 ET1=1; EA=1;........... ...........} 注:图中的键盘接法都是独立按键接发,矩阵键盘没有见过能直接触发中断的.

中卫市19274007962: 急求:用扫描法读出4*4矩阵键盘,在8*8LED点阵屏上点亮对应灯(用单片机89C51) 要仿真图和C程序! -
红张祖师: #include <reg52.h>#define uchar unsigned char #define uint unsigned int sbit A = P2^5; sbit B1 = P2^6; sbit C = P2^7; uchar code lie[]={1,2,4,8,16,32,64,128}; uchar code DIS1[]= {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xF7,0xE3,0xC1,0x80,0xE3,0xE3,0...

中卫市19274007962: 基于单片机at89c51的4*4矩阵式键盘的全扫描和逐列扫描怎么理解? -
红张祖师: 如果你是接在p1口上就是p1.0~p1.3(行)输出信号p1.4~p1.7(列)进行检测,如果为0说明有键按下..

中卫市19274007962: 简单的51系列单片机控制4*4矩阵键盘显示电路图 -
红张祖师: 可以在P0.0/P0.1/P0.2/P0.3四个I/O口上每个接四个按键,,在P0.4/P0.5/P0.6/P0.7四个口线上与前面的四个口线上的按键交插相连,这样可以通过查询的方式,比如是第查到P1.0口上有按键按下了,再转向查看P0.1,P0.5,P0.6,P0.7哪个口的电平发生的变化,这样就很容易找到是哪个按键了

中卫市19274007962: 求用AT89C51作为主控芯片结合4*4键盘、LCD1602液晶显示的电子密码锁设计的源程序和电路图 -
红张祖师: 在单片机I/O接口上外接输入键盘用于输入和一些功能的控制.考虑到密码的存在形式一般为数字或字母形式,而字母数量众多,并且排列不规则,不能使用矩阵式键盘排列字母;并且按键过多会大大增加系统的体积,对适用性极为不利,故只使用数字作为密码.阿拉伯数字不仅便于用户记忆,而且通用性极强,是作为密码的首选.10个数字需要1个不同的按键,故选用为4*4矩阵键盘;

中卫市19274007962: 单片机 直流电动机的驱动 编程(附图) -
红张祖师: 直流 http://www.proteus.com.cn/bbs/viewthread.php?tid=21604************************** 用单片机控制直流电机 http://www.liuhelu.cn/article/11/211.html 本设计以AT89C51单片机为核心,以4*4矩阵键盘做为输入达到控制直流电机的启停、速度和方向,完成了基本要求和发挥部分的要求.在设计中,采用了PWM技术对电机进行控制,通过对占空比的计算达到精确调速的目的.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网