本人刚学51单片机,现遇到一个问题,如下
现编个一个99.9秒计时控制器,第一次按开关SP1,启动计时器同时灯1亮,第二次按,停止计时器同时灯2亮,第三次按,计时器清零同时灯3亮!
汇编程序如下,现在想改为动态扫描数码管的方法,请高手赐教,完成后,追加500分。要求,P0口接动态共阳数码管的段选,P2.0~P2.2接个位十倍百位的位选。最好用PROTEUS仿真能通过。这厢有礼了!请高手赐教完整程序!或者知道本人 QQ 550809798 注明单片机指导!
TCNTA EQU 30H
TCNTB EQU 31H
GW EQU 32H
KEYCNT EQU 33H
SW EQU 34H
BW EQU 35H
SP1 BIT P3.5
ORG 00H
LJMP STAR
ORG 0BH
LJMP INT_T0
STAR: MOV P0,#0CH
MOV P1,#40H
MOV P2,#4EH
LCALL DELAY2S
START:
MOV KEYCNT,#00H
MOV GW,#00H
MOV A,GW
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV SW,#00H
MOV A,SW
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P1,A
MOV BW,#00H
MOV A,BW
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
MOV TMOD,#02H
SETB ET0
SETB EA
WT: JB SP1,WT
LCALL DELY10MS
JB SP1,WT
INC KEYCNT
MOV A,KEYCNT
CJNE A,#01H,KN1
SETB TR0
MOV TH0,#06H
MOV TL0,#06H
MOV TCNTA,#00H
MOV TCNTB,#00H
CLR P3.1
SETB P3.2
SETB P3.3
LJMP DKN
KN1: CJNE A,#02H,KN2
CLR P3.2
SETB P3.1
SETB P3.3
CLR TR0
LJMP DKN
KN2: CJNE A,#03H,DKN
CLR P3.3
SETB P3.2
SETB P3.1
MOV GW,#00H
MOV A,GW
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV SW,#00H
MOV A,SW
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P1,A
MOV BW,#00H
MOV A,BW
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
MOV KEYCNT,#00H
DKN: JNB SP1,$
LJMP WT
DELY10MS:
MOV R6,#40
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
DELAY2S:MOV R5,#20
D2: MOV R6,#200
D3: MOV R7,#248
DJNZ R7,$
DJNZ R6,D3
DJNZ R5,D2
RET
INT_T0:
INC TCNTA
MOV A,TCNTA
CJNE A,#100,NEXT
MOV TCNTA,#00H
INC TCNTB
MOV A,TCNTB
CJNE A,#4,NEXT
MOV TCNTB,#00H
INC GW
MOV A,GW
CJNE A,#10,DONE
MOV GW,#00H
INC SW
MOV A,SW
CJNE A,#10,DONE
MOV GW,#00H
MOV SW,#00H
INC BW
MOV A,BW
CJNE A,#10,DONE
MOV GW,#00H
MOV SW,#00H
MOV BW,#00H
DONE: MOV A,GW
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV A,SW
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P1,A
MOV A,BW
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
NEXT: RETI
TABLE: DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H
END
LED数码管动态显示2017的51单片机汇编语言
共阳极接法。abcdefg 为 P0 口,位选端为 P2 口。八个数码管同时显示 01234567。电路与程序,如下所示:
单片机 汇编 LED数码管动态显示
所谓的动态显示就是:led灯按设定的循序不停的一个一个(一个数用一块八段管)数的输出显示,由于led灯的闪烁速度很快,而人的眼睛最多只能识别0.2秒间隙以上的变化。那么在人看来,不停闪烁的led管就像是静态显示一样。图中,段控制和位控制分时复用P0口,选用两个锁存器573来分开段控制和位控制...
如何在51单片机矩阵键盘里按一个键可实现数码管动态显示而不是一...
include<reg51.h>#define uchar unsigned char;uchar distab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; \/\/0到fvoid delay(unsigned int a){unsigned int i,j;for(i=0;i<a;i++)for(j=0;j<120;j++);}uchar kbsca...
51单片机怎么让数码管显示学号?用汇编语言
数码管显示方式为动态扫描方式,当P0口送第一个数0的码型到锁存器时,P2送位选地址01H,即Y0=0,只有第一个数码管亮,显示0,其他数码管不显示。当P0口送第二个数1的码型到锁存器时,P2送位选地址02H,即Y1=0,只有第二个数码管亮,显示1,其他数码管不显示。即每次只有一个数码管点亮,8个...
高分:51单片机汇编程序,数码管跳动问题
给你贴一个我写的显示程序(在定时中断中调用,这个程序显示两组数据,500ms换一次):\/ 函数名称: void Display()功能描述: 将缓冲区中可显示字符输出到LED \/ define PIN_SDINP0_0 define PIN_STP0_1 define PIN_SHP0_2 define LOC_D10x08 void Display(void){ unsigned char i,ch,loc;if...
51单片机用键盘输入并用动态数码管显示
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 ...
单片机,使用汇编语言使led数码管每隔1秒轮流显示数字0000-9999,这个怎么...
这是四位数的秒计数器,用四位一体共阴数码管显示,P0口输出段码,P2口输出位码。用定时器定时器50ms,采用中断方式,中断20次为1秒,显示数字加1。
51单片机怎么用汇编语言让8个数码管不停的 显示0-9(最好要接74HC595...
要数码管不停显示,只能用动态显示,但是要看是单片机接数码管是哪个端口,还有是直接接在数码管上还是中间有寄存器,不知74HC595是接在哪的
单片机 用51单片机显示一个数码管轮流显示9到0再从0到9每隔一秒出现一 ...
MOV P0,#0FFH LOP:LOOP0:MOV 20H,#9 MOV R0,#10 LOOP1:MOV A,20H; 9-0 MOVC A,@A+DPTR MOV P0,A DEC 20H CALL DELL;YANSHI DJNZ R0,LOOP1 MOV 20H,#0;0-9 MOV R0,#10 LOOP2:MOV A,20H; 0-9 MOVC A,@A+DPTR MOV P0,A INC 20H CALL DELL;YANSHI DJNZ R0,LOOP2 AJMP...
基于51单片机利用八个数码管花样显示如下
其实很简单,你把1--8对应的共阴极或共阳极的编码寻在一个数组里(C语言)或者表里(汇编语言查表法),在P0口和P2口接上8个7段数码管,P2口做位选,P0口做段选,每次从表中查询你要显示的数据的编码写到P0口,再把你要在哪一个数码管上显示写到P2口(比如位选为低电平有效,向P2口写入0xFE...