求数字时钟程序,是用51单片机做的,我们实验室里能提供六个数码管,一个74ls245,一个74ls138译码器,只需

供稿:hz-xin.com     日期:2024-05-22
74LS138的译码器可以直接作为数码管的驱动吗?

直接作为数码管的驱动可能电流不够,看你要驱动多大的电流了,不够的话,可以加三极管放大。

74LS138是3线8线译码器,有8个输出端,可以带8个数码管,所以,13个数码管就要用2个74LS138。
想用74LS138驱动数码管有点问题,输出端在低电平时的最大输出电流只有4mA,而它的输出端是要接到数码管公共端的,数码管是点亮时公共端的电流要远远大于4mA的,而且数码管必须是共阴的,共阳是无效的。
74HC154是4线-16线译码器,有16个输出端,一片就可以带16个数码管了。更主要是它的输出端的输出电流可达到25mA,这个电流驱动数码管的公共端还可以。
结论,用1片74HC154就可以接13个数码管,而不能用74LS138。

74ls138三八译码器,A\B\C分别接P1.0\P1.1\P1.2,Y0~Y7分别接0~7号数码管(共阴极),输出格式是: 23-59-59,你只用6个数码管,就把中间的两个横杠去掉就行了,代码修改一下。(不仅是代码中用于显示-的部分,还有数码管的控制字,也就是三八译码器的3个输入端得信号,也要去掉两个)。P2.0~P2.7接数码管的八位(P2.0接a,依次。。。)
调整时间的用四个独立按键,控制时钟+的接P3.2,-的接P3.2,控制分钟+的接P1.0,-的接P1.1。这4个控制键可以自己改。
源程序:
COUNT1 EQU 30H
MIAO1 EQU 31H
MIAO2 EQU 32H
COUNT2 EQU 33H
FEN1 EQU 34H
FEN2 EQU 35H
COUNT3 EQU 36H
SHI1 EQU 37H
SHI2 EQU 38H
ORG 0000H
SJMP START
ORG 0030H
START:MOV SP,#60H
MOV P0,#0FFH
MOV P2,#0FFH
MOV DPTR,#TAB
MOV COUNT1,#0
MOV MIAO1,#0
MOV MIAO2,#0
MOV COUNT2,#0
MOV FEN1,#0
MOV FEN2,#0
MOV COUNT3,#0
MOV SHI1,#0
MOV SHI2,#0

MAIN: CALL PROCESS1
CALL PROCESS2
CALL PROCESS3
CALL DISPLAY
INC COUNT1
SJMP MAIN

PROCESS1:MOV A,COUNT1
CJNE A,#60,JIXU1
MOV COUNT1,#0
INC COUNT2
JIXU1: MOV A,COUNT1
MOV B,#10
DIV AB
MOV MIAO1,A
MOV MIAO2,B
RET
PROCESS2:MOV A,COUNT2
CJNE A,#60,JIXU2
MOV COUNT2,#0
INC COUNT3
JIXU2: MOV A,COUNT2
MOV B,#10
DIV AB
MOV FEN1,A
MOV FEN2,B
RET
PROCESS3:MOV A,COUNT3
CJNE A,#24,JIXU3
MOV COUNT3,#0
JIXU3: MOV A,COUNT3
MOV B,#10
DIV AB
MOV SHI1,A
MOV SHI2,B
RET

DISPLAY:MOV R2,#0FH
L1: MOV R3,#09H
L2: MOV A,MIAO1
MOVC A,@A+DPTR
MOV P2,A
MOV P1,#06H
CALL DELAY
MOV A,MIAO2
MOVC A,@A+DPTR
MOV P2,A
MOV P1,#07H
CALL DELAY
MOV P2,#40H
MOV P1,#05H
CALL DELAY
MOV A,FEN1
MOVC A,@A+DPTR
MOV P2,A
MOV P1,#03H
CALL DELAY
MOV A,FEN2
MOVC A,@A+DPTR
MOV P2,A
MOV P1,#04H
CALL DELAY
MOV P2,#40H
MOV P1,#02H
CALL DELAY
MOV A,SHI1
MOVC A,@A+DPTR
MOV P2,A
MOV P1,#00H
CALL DELAY
MOV A,SHI2
MOVC A,@A+DPTR
MOV P2,A
MOV P1,#01H
CALL DELAY
DJNZ R3,L2
DJNZ R2,L1
RET

DELAY:MOV R0,#50
D2: MOV R1,#10
D1: DJNZ R1,D1
DJNZ R0,D2
RET

用!这是个显示系统日期和时间的程序。这个程序运行时按‘D’显示日期,按‘T’显示时间,注意一定要切换到大写状态下按,不然没用。

STACK SEGMENT STACK
DW 200 DUP (?)
STACK ENDS
DATA SEGMENT
SPACE DB 1000 DUP (' ')
PATTERN DB 6 DUP (' '),0C9H,26 DUP (0CDH),0BBH,6 DUP (' ')
DB 6 DUP (' '),0BAH,26 DUP (20H),0BAH,6 DUP (' ')
DB 6 DUP (' '),0C8H,26 DUP (0CDH),0BCH,6 DUP (' ')
DBUFFER DB 8 DUP (':'),12 DUP (' ')
DBUFFER1 DB 20 DUP (' ')
STR DB 0DH,0AH, 'PLEASE INPUT DATE(D) OR TIME(T) OR QUIT(Q): $'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START: MOV AX,0001H ;设置显示方式为40*25彩色文本方式
INT 10H
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV BP,OFFSET SPACE
MOV DX,0B00H
MOV CX,1000
MOV BX,0040H
MOV AX,1300H
INT 10H
MOV BP,OFFSET PATTERN ;显示矩形条
MOV DX,0B00H
MOV CX,120
MOV BX,004EH
MOV AX,1301H
INT 10H
LEA DX,STR ;显示提示信息
MOV AH,9
INT 21H
MOV AH,1 ;从键盘输入单个字符
INT 21H
CMP AL,44H ;AL='D'?
JNE A
CALL DATE ;显示系统日期
A: CMP AL,54H ;AL='T'?
JNE B
CALL TIME ;显示系统时间
B: CMP AL,51H ;AL='Q'?
JNE START
MOV AH,4CH ;返回dos状态
INT 21H
DATE PROC NEAR ;显示日期子程序
DISPLAY:MOV AH,2AH ;取日期
INT 21H
MOV SI,0
MOV AX,CX
MOV BX,100
DIV BL
MOV BL,AH
CALL BCDASC1 ;日期数值转换成相应的ASCII码字符
MOV AL,BL
CALL BCDASC1
INC SI
MOV AL,DH
CALL BCDASC1
INC SI
MOV AL,DL
CALL BCDASC1
MOV BP,OFFSET DBUFFER1
MOV DX,0C0DH
MOV CX,20
MOV BX,004EH
MOV AX,1301H
INT 10H
MOV AH,02H ;设置光标位置
MOV DX,0300H
MOV BH,0
INT 10H
MOV BX,0018H
REPEA: MOV CX,0FFFFH ;延时
DEC BX
JNZ REPEA
MOV AH,01H ;读键盘缓冲区字符到AL寄存器
INT 16H
JE DISPLAY
JMP START
MOV AX,4C00H
INT 21H
RET
DATE ENDP
TIME PROC NEAR ;显示时间子程序
DISPLAY1:MOV SI,0
MOV BX,100
DIV BL
MOV AH,2CH ;取时间
INT 21H
MOV AL,CH
CALL BCDASC ;将时间数值转换成ASCII码字符
INC SI
MOV AL,CL
CALL BCDASC
INC SI
MOV AL,DH
CALL BCDASC
MOV BP,OFFSET DBUFFER
MOV DX,0C0DH
MOV CX,20
MOV BX,004EH
MOV AX,1301H
INT 10H
MOV AH,02H
MOV DX,0300H
MOV BH,0
INT 10H
MOV BX,0018H
RE: MOV CX,0FFFFH
REA: LOOP REA
DEC BX
JNZ RE
MOV AH,01H
INT 16H
JE DISPLAY1
JMP START
MOV AX,4C00H
INT 21H
RET
TIME ENDP
BCDASC PROC NEAR ;时间数值转换成ASCII码字符子程序
PUSH BX
CBW
MOV BL,10
DIV BL
ADD AL,'0'
MOV DBUFFER[SI],AL
INC SI
ADD AH,'0'
MOV DBUFFER[SI],AH
INC SI
POP BX
RET
BCDASC ENDP
BCDASC1 PROC NEAR ;日期数值转换成ASCII码字符子程序
PUSH BX
CBW
MOV BL,10
DIV BL
ADD AL,'0'
MOV DBUFFER1[SI],AL
INC SI
ADD AH,'0'
MOV DBUFFER1[SI],AH
INC SI
POP BX
RET
BCDASC1 ENDP
CODE ENDS
END START

用51单片机做一个LED显示的电子钟
答:4 2011-05-18 大家有基于51单片机来实现电子钟的C语言程序吗?用LED显示... 1 2011-06-11 以at89c51为核心,制作一个LED显示的智能电子钟。用C... 2 2018-01-10 用51单片机编写程序实现数码管的时钟数字显示 2 2016-06-14 利用AT89C51单片机设计简易电子钟(六位),通过8位LE... 2 更多...

求基于51单片机P01,P2 LED接数码管,用三极管驱动的电子时钟程序,大神...
答:程序名称:51单片机数码管电子钟汇编程序 简要说明:实现24小时制电子钟,8位数码管显示,显示时分秒 显示格式:23-59-59(小时十位如果为0则不显示)P0口输出段选信号,P2口输出位选信号 P1.0为调时按钮,P1.1为调分按钮;晶振12M 编 写:JiangX.net / ORG 0000H ;程序入口地址 LJMP START ...

51单片机时钟程序设计
答:朋友以下是本人历时一个月殚精竭虑自主开发的一个8位51单片机时钟程序,望吾之兄弟姐妹习之,此程序乃采用一键控制,通过感知按下键持续时间的长短来进行调整时间,闹铃,6只共阳数码管输出显示,此外还包括整点铃声功能,在看程序之前我先交代一下运行该程序的硬件要求:12M晶振,P0端口驱动显示,P2.0...

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 ...

求教一个51单片机程序。。(LCD电子时钟)
答:求教一个51单片机程序。。(LCD电子时钟) 这一次老师要求做一个基于LCD显示的电子时钟。完全不知所云,所以希望能请教一下高手关于LCD时钟的事情。做一个LCD时钟需要些什么东西啊,具体步骤是怎么做的呢?现在手上有一块单片机... 这一次老师要求做一个基于LCD显示的电子时钟。完全不知所云,所以希望能请教一下高手...

51单片机控制数字钟原理图及汇编程序设计
答:void display() //显示程序 { uchar i,k;k=0x01;for(i=0;i<8;i++){ P2=0;//关闭显示 P0=display_code[time[i]%10];//存放个位数 P0=~P0;P2=k;k=k<<1;delay();//调用延时程序 P2=0;P0=display_code[time[i]/10];//存放十位数字 P0=~P0;P2=k;k=k<<1;delay();//...

51单片机数字秒表的程序 1、能实现0.0到9.9的计数 2、使用数码管显示计...
答:include<reg52.h> sbit LED1=P2^0;sbit LED2=P2^1;sbit LED3=P2^2;sbit LED4=P2^3;sbit P3_5 =P3^5;unsigned char keycnt;unsigned char Tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};unsigned int counet,second,msecond,minute;void delay(unsigned int m...

用51单片机设计一个电子钟
答:巧了,国亲无聊做了一个玩玩,给你看看把,其实电子钟挺简单的,下面是程序:include<reg52.h> define uchar unsigned char define uint unsigned int sbit ch=P3^2;sbit key=P3^5;sbit key1=P3^4;uchar t0,numn,numy,numr,nums,numf,numm,sw,w,q,b,s,g,sw1,w1,q1,b1,s1,g1,rq...

我做了一个12864的数字钟,是用51 单片机做的,C语言写的,但是显示屏没字...
答:对比度调了,那要么是你线没接对,再可能就是初始化失败,有个串口并口选择位,用上了没。看看背面的跳线接了没。

数字时钟C语言设计.用的是51单片机。 00 秒 00 分 00 小时 还有小数点...
答:我这写了一个!使用数码管显示的!可以用键盘校对时间!你参考下。还写了一个液晶显示的!你要的话也可以发给你!include<reg52.h> define uchar unsigned char define uint unsigned int sbit K1=P3^0;sbit K2=P3^1;sbit K3=P3^2;uchar table[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x...