单片机时钟程序 24小时制 20

急需谢谢!... 急需谢谢! 展开
 我来答
hyz_bd
推荐于2017-11-28 · 超过17用户采纳过TA的回答
知道答主
回答量:78
采纳率:0%
帮助的人:50.4万
展开全部
C语言的:
#include <reg51.h>
#include<stdio.h>

unsigned char ledbuf[8];
code unsigned char ledmap[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99,
0x92, 0x82, 0xf8, 0x80, 0x90}; //8段显示

void delay(unsigned char cnt)
{
unsigned char i;
while(cnt--!=0)
for(i=100;i!=0;i--);
}

#define tick 7554
#define T100us (256-134)
unsigned char hour,minute,second,ankey;
unsigned int c100us;

void sees()
{
ledbuf[0]=ledmap[hour/10];
ledbuf[1]=ledmap[hour%10];
ledbuf[2]=0xbf;
ledbuf[3]=ledmap[minute/10];
ledbuf[4]=ledmap[minute%10];
ledbuf[5]=0xbf;
ledbuf[6]=ledmap[second/10];
ledbuf[7]=ledmap[second%10];
}

void displayled()
{

char i;
unsigned char pos;
pos=0x01;
for(i=7;i>=0;i--)
{
P2=0x255;
P0=ledbuf[i];
P2=~pos;
delay(2);
P2=0x255;
pos<<=1;
}
}

void key()
{

if(P32==0||P33==0||P35==0)
delay(2);
if(P32==0||P33==0||P35==0)
{
if(P32==0)
{
hour++;
if(hour==24)
hour=0;
while(P32==0)
{
sees();
displayled();
}
}
if(P33==0)
{
minute++;
if(minute==60)
minute=0;
while(P33==0)
{
sees();
displayled();
}
}
if(P35==0)
{
second++;
if(second==60)
second=0;
while(P35==0)
{
sees();
displayled();
}
}
}

}

void t0int()interrupt 1
{
c100us--;
if(c100us==0)
{
c100us=tick;
second++;

if(second==60)
{
second=0;
minute++;

if(minute==60)
{
minute=0;
hour++;
if(hour==24)hour=0;
}
}
}
}

void main()
{

TMOD=0x02;
TH0=T100us;
TL0=T100us;
IE=0x82;
hour=0;
minute=0;
second=0;
c100us=tick;
TR0=1;

while(1)
{
sees();
displayled();
key();
}
}

汇编的:
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP TIME

ORG 0300H
MAIN:
MOV P3,#0FFH;
MOV 25H,#00H;
MOV R0,#40H;
MOV 20H,#00H;
MOV 21H,#00H;
MOV 22H,#00H;
MOV 23H,#00H;
MOV P2,#0FFH
MOV IP,#02H;
MOV IE,#82H;
MOV TMOD,#01H;
MOV TL0,#0B0H;
MOV TH0,#3CH;
SETB TR0;
MOV SP,#50H;

NEXT:
LCALL DISP;
LCALL KEY;
JZ NEXT;
LCALL ANKEY;
SJMP NEXT;
NOP
NOP;
NOP;

TIME:
PUSH ACC;
PUSH PSW;
MOV TL0,#0B4H;
MOV TH0,#3CH;
INC 20H;
MOV A,20H;
CJNE A,#20,RETI1;

MOV 20H,#00H;
MOV A,21H;
INC A;
MOV 21H,A;
CJNE A,#3CH,RETI1;
MOV 21H,#00H;
MOV A,22H;
ADD A,#01H;

MOV 22H,A;
CJNE A,#3CH,RETI1;
MOV 22H,#00H;
MOV A,23H;
ADD A,#01H;

MOV 23H,A;
CJNE A,#18H,RETI1;
MOV 23H,#00H;

RETI1:
POP PSW;
POP ACC;
RETI;
NOP
NOP

DISP:

MOV A,21H;

MOV B,#10;
DIV AB;
MOV 41H,A;
MOV 40H,B;

MOV A,22H;

MOV B,#10;
DIV AB;
MOV 43H,A;
MOV 42H,B;

MOV A,23H;

MOV B,#10;
DIV AB;
MOV 45H,A;
MOV 44H,B;

MOV R0,#40H
LCALL DISP2; 1
CLR P2.0;
LCALL DELAY;
SETB P2.0;

INC R0;
LCALL DISP2;
CLR P2.1;
LCALL DELAY;
SETB P2.1;

MOV P0,#0bfh;
CLR P2.2 ;
LCALL DELAY;
SETB P2.2;

INC R0;
LCALL DISP2;
CLR P2.3;
LCALL DELAY;
SETB P2.3;

INC R0;
LCALL DISP2;
CLR P2.4;
LCALL DELAY;
SETB P2.4;

MOV P0,#0BFH;
CLR P2.5;
LCALL DELAY;
SETB P2.5;

INC R0;
LCALL DISP2;
CLR P2.6;
LCALL DELAY;
SETB P2.6;

INC R0;
LCALL DISP2;
CLR P2.7;
LCALL DELAY;
SETB P2.7;
MOV R0,#40H;

DISP2:
MOV DPTR,#TABLE;
MOV A,@R0;
MOVC A,@A+DPTR;
MOV P0,A;
RET

DELAY:
MOV R6,#255;
D2:DJNZ R6,D2;
RET;

TABLE:DB 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h
; 0 1 2 3 4 5 6 7 8 9

;按键判断程序
KEY:
MOV A,P3;
CPL A;
ANL A,#3CH;
JZ RETX ;无键按下则返回
LCALL DISP ;
LCALL DELAY;

MOV A,P3;
CPL A;
ANL A,#3CH;
JZ RETX ;无键按下则返回

MOV R6,A ;将键值存入R6。
LOOP2: LCALL DISP ;
MOV A,P3;
CPL A;
ANL A,#3CH;
JNZ LOOP2 ;等待键释放
MOV A,R6;
RETX:
MOV P3,#0FFH;
RET;
NOP
NOP
;按键处理子程序
ANKEY: CLR EA;关中断
LX: MOV A,R6;
JB ACC.2,L1;是功能键转L1
JB ACC.3,L2;是确认键转L2
JB ACC.4,L3;是减1键转L3
JNB ACC.5,L12;不是增1键,转L12
JB 2BH.4,L6;判断使哪一位(时、分、秒)的值加1
JB 2DH.4,L8;
JB 2FH.4,L9;

L12: LCALL DISP;
LCALL DISP;
LCALL KEY;判断有无键按下。
JZ L12;
LJMP LX;

L2: MOV 25H,#00H ;确认键处理程序
CLR 2BH.4;
CLR 2DH.4;
CLR 2FH.4;
SETB EA;
RET;

L3: JB 2BH.4,L61;减一键处理程序
JB 2DH.4,L81;
JB 2FH.4,L91;
AJMP L12;

L1: MOV A,25H;功能键处理程序
JZ LB1;
JB ACC.0,LB2;
JB ACC.1,LB3;
JNB ACC.2,L12;

LB1: MOV 25H,#01H;25H单元是标志位,(25H)=01H调节时单元的值
SETB 2BH.4;
CLR 2DH.4;
CLR 2FH.4;
AJMP L12;

LB3: MOV 25H,#04H;25H单元是标志位,(25H)=04H调节秒单元的值
SETB 2FH.4;
CLR 2DH.4;
CLR 2BH.4;
AJMP L12;

LB2: MOV 25H,#02H;25H单元是标志位,(25H)=02H调节分单元的值
SETB 2DH.4;
CLR 2BH.4;
CLR 2FH.4;
AJMP L12;

L61: AJMP L611;
L81: AJMP L811;
L91: AJMP L911;
L112:AJMP L12;

L6: MOV A,23H;时加一
INC A;
MOV 23H,A;
CJNE A,#24H,L12;
MOV 23H,#00H;
AJMP L12;

L8: MOV A,22H;分加一
INC A;
MOV 22H,A;
CJNE A,#60H,L12;
MOV 22H,#00H;
AJMP L12;

L9: MOV A,21H;秒加一
INC A;
MOV 21H,A;
CJNE A,#60H,L12;
MOV 21H,#00H;
AJMP L12;

L611: MOV A,23H;时减一
DEC A;

MOV 23H,A;
CJNE A,#00H,L112;
MOV 23H,#23H;
AJMP L12;

L811: MOV A,22H;分减一
DEC A;

MOV 22H,A;
CJNE A,#00H,L112;
MOV 22H,#59H
AJMP L12;

L911: MOV A,21H;秒减一
DEC A;

MOV 21H,A;
CJNE A,#00H,L112;
MOV 21H,#59H;
AJMP L12;
NOP
NOP
END
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
深圳市兴威帆电子技术有限公司
2023-08-24 广告
实时时钟模块可以选择许多不同的制造商和型号,具体选择取决于您的应用需求和预算。一些流行的实时时钟模块品牌包括DS1302、MA电商平台6925和MCP7941。这些模块都具有精度高、稳定性好、功耗低等优点,并具有不同的功能和特性,可以满足各... 点击进入详情页
本回答由深圳市兴威帆电子技术有限公司提供
东颖崇
2006-11-22 · TA获得超过243个赞
知道答主
回答量:138
采纳率:0%
帮助的人:0
展开全部
没什么难的啊,就是个显示程序,再用个定时器就好了- -!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
酷酷一号
2006-11-17
知道答主
回答量:19
采纳率:0%
帮助的人:0
展开全部
我真想自己试着编这个程序。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式