求程序数字钟。要求1显示小时和分钟2整点报时3四按键 选择 加1 减1 确认4秒由一个LED闪烁表示使用52单片机

求程序数字钟。要求1显示小时和分钟2整点报时3四按键 选择 加1 减1 确认4秒由一个LED闪烁表示使用52单片机,第1张

EF0 DATA 19H

EF1 DATA 20H

EF2 DATA 21H

EF3 DATA 22H

EF4 DATA 23H

EF5 DATA 24H

EF6 DATA 25H

EF7 DATA 26H

EF8 DATA 27H

EF9 DATA 28H

EF10 DATA 29H

EF11 DATA 30H

EF12 DATA 31H

ORG 0000H

LJMP MAIN

ORG 0003H

AJMP SS

ORG 0013H

AJMP SSS

ORG 0032H

MAIN: MOV DPTR,#TAB

MOV IE,#85H

SETB PX1

MOV R6,#24

MOV SP,#50H

MOV EF12,#01H

LOOP: MOV R5,#03FH

MOV R4,#03FH

MOV R3,#03FH

MOV R2,#03FH

MOV R1,#03FH

MOV R0,#03FH

ACALL D

LOOP6: MOV EF5,#00H

LOOP5: MOV EF4,#00H

LOOP4: MOV EF3,#00H

LOOP3: MOV EF2,#00H

LOOP2: MOV EF1,#00H

LOOP1: MOV EF0,#00H

DJNZ EF12,D0

ZO: MOV EF5,#01H

MOV EF4,#01H

MOV EF3,#01H

MOV EF2,#01H

MOV EF1,#01H

MOV EF0,#01H

D0: MOV EF12,#02H

MOV A,EF0

MOVC A,@A+DPTR

MOV R0,A

ACALL D

INC EF0

ACALL DEL

CJNE R0,#067H,D0

AJMP D1

D1: MOV A,EF1

CJNE R1,#06DH,D10

MOV R1,#3FH

AJMP D2

D10: MOVC A,@A+DPTR

MOV R1,A

ACALL D

INC EF1

AJMP LOOP1

D2: MOV A,EF2

CJNE R2,#07FH,D20

MOV R2,#3FH

AJMP D3

D20: MOVC A,@A+DPTR

MOV R2,A

ACALL D

INC EF2

CJNE R2,#067H,LOOP2

D3: MOV A,EF3

CJNE R3,#06DH,D30

MOV R3,#03FH

AJMP D4

D30: MOVC A,@A+DPTR

MOV R3,A

ACALL D

INC EF3

CJNE R3,#07DH,LOOP3

D4: MOV A,EF4

MOVC A,@A+DPTR

MOV R4,A

ACALL D

INC EF4

DJNZ R6,LOOP6

CJNE R4,#067H,LOOP4

D5: MOV A,EF5

MOVC A,@A+DPTR

MOV EF7,A

ACALL D

INC EF5

AJMP LOOP5

;

D: PUSH ACC ;显示子程序

MOV A,#0FEH

MOV P0,R0

MOV P2,A

RL A

ACALL DE

MOV P0,R1

MOV P2,A

RL A

ACALL DE

MOV P0,R2

SETB P07

MOV P2,A

RL A

ACALL DE

MOV P0,R3

MOV P2,A

RL A

ACALL DE

MOV P0,R4

SETB P07

MOV P2,A

RL A

ACALL DE

MOV P0,EF7

MOV P2,A

ACALL DE

POP ACC

RET

DEL: MOV EF8,#5BH

DEL2: ACALL D

DJNZ EF8,DEL2

RET

DE: PUSH PSW

MOV EF9,#01H

DL2: MOV EF10,#8EH

DL: MOV EF11,#02H

DJNZ EF11,$

DJNZ EF10,DL

DJNZ EF9,DL2

POP PSW

RET

DELOO: ;误差 0us

MOV EF9,#0C7H

DL1:

MOV EF10,#78H

DL0:

MOV EF11,#01H

DJNZ EF11,$

DJNZ EF10,DL0

DJNZ EF9,DL1

RET

TAB: DB 03FH,006H,05BH,04FH,066H

DB 06DH,07DH,007H,07FH,067H

RET

;

SS: ACALL DELOO ;中断

MAI: MOV R7,#00H

LOOP01: MOV P1,#0FH

MOV A,P1

CJNE A,#0FH,F

ACALL D

AJMP LOOP01

F: ACALL DELOO ;按键

CJNE A,#0FH,FO

AJMP LOOP01

FO: MOV P1,#0BFH

JNB P10,L0

JNB P11,L1

JNB P12,L2

JNB P13,L3

F1: MOV P1,#0DFH

JNB P10,L4

JNB P11,L5

JNB P12,L6

JNB P13,L7

F2: MOV P1,#0EFH

JNB P10,L8

JNB P11,L9

JNB P12,O0

JNB P13,MAI

W6: AJMP LOOP01

L0: MOV A,#00H

MOV R6,A

AJMP LOOP9

L1: MOV A,#01H

MOV R6,A

AJMP LOOP9

L2: MOV A,#02H

MOV R6,A

AJMP LOOP9

L3: MOV A,#03H

MOV R6,A

AJMP LOOP9

L4: MOV A,#04H

MOV R6,A

AJMP LOOP9

L5: MOV A,#05H

MOV R6,A

AJMP LOOP9

L6: MOV A,#06H

MOV R6,A

AJMP LOOP9

L7: MOV A,#07H

MOV R6,A

AJMP LOOP9

L8: MOV A,#08H

MOV R6,A

AJMP LOOP9

L9: MOV A,#09H

MOV R6,A

LOOP9: INC R7

MOVC A,@A+DPTR

CJNE R7,#01,W1

MOV EF5,R6

MOV EF7,A

W1: CJNE R7,#02,W2

MOV EF4,R6

MOV R4,A

W2: CJNE R7,#03,W3

MOV EF3,R6

MOV R3,A

W3: CJNE R7,#04,W4

MOV EF2,R6

MOV R2,A

W4: CJNE R7,#05,W5

MOV EF1,R6

MOV R1,A

W5: CJNE R7,#06,W6

MOV EF0,R6

MOV R0,A

O0: RETI

;

SSS: ACALL DELOO

MOV R5,#03FH

MOV R4,#03FH

MOV R3,#03FH

MOV R2,#03FH

MOV R1,#03FH

MOV R0,#03FH

ACALL D

MOV EF5,#00H

MOV EF4,#00H

MOV EF3,#00H

MOV EF2,#00H

MOV EF1,#00H

MOV EF0,#00H

RETI

END

条件与是两个&&字符,应该写成if(miao==0&&fen==0)

响十下最简单的就是用for或者while循环,如下,但这样会有其它问题,你可以实际测下,到时再追问。

unsigned char i=10;

do {

beep=1;

delay1(10);

beep=0;

}

while(--i > 0);

时间运行到整点时间时,闹钟响,几点钟就响几声(每声 持续响 2 秒,每两声之间时间间隔 2 秒)

利用单片机定时器计时,液晶1602显示时分秒。

独立按键设置时间。

整点报时,1点蜂鸣器响1下,2点蜂鸣器响2下,同理其他点。

#include<reg51h>

#include<intrinsh>

#define uchar unsigned char

uchar pwm,ctl=5;

sbit fmq=P1^0;

bit flag;

void delay(uchar a)

{

uchar i;

while(a--)for(i=0;i<120;i++);

}

void t0isr() interrupt 1

{

pwm++;

if(pwm<=ctl)P0=0xff;

else P0=0x00;

if(pwm==100)

    {

    pwm=0;

    ctl++;

    }

if(ctl==100)flag=1;

}

main()

{

uchar i,led;

TMOD=0x02;

TH0=236;

TL0=236;

ET0=1;

EA=1;

while(1)

    {

    led=0xfe;

    for(i=0;i<8;i++)

        {

        P0=led;

        led=led<<1;

        delay(200);

        }

    led=0xff;

    delay(200);

    led=0x7f;

    for(i=0;i<8;i++)

        {

        P0=led;

        led=led>>1;

        delay(200);

        }

    TR0=1;

    flag=1;

    while(flag);

    TR0=0;

    }

}

plc中蜂鸣器长鸣一次程序,首先要确定蜂鸣器是否已经连接到PLC控制器上,并且检查电源是否正常。

如果电源正常,可以尝试检查PLC程序,看看是否有蜂鸣器的控制程序。

如果没有,可以尝试添加蜂鸣器的控制程序,并确保蜂鸣器的输出信号正确连接到PLC控制器上。

最后,可以尝试运行PLC程序,看看蜂鸣器是否能够正常工作。

设按键为k1,k2,k3

void main()

{

char beepflag=0;

while(1)

{

if((k1==0)

beepflag|=0x01;

else

beepflag&=0xFE;

if(k2==0) //按键按下

beepflag|=0x02;

else

beepflag&=0xFD;

if(k3==0) //按键按下

beepflag|=0x04;

else

beepflag&=0xFB;

//------------这里判断字符低三位,如果有其中两位置一,则开启蜂鸣器

}

}

思路大概就是这样,如对您有帮助,请采纳,谢谢!

以上就是关于求程序数字钟。要求1显示小时和分钟2整点报时3四按键 选择 加1 减1 确认4秒由一个LED闪烁表示使用52单片机全部的内容,包括:求程序数字钟。要求1显示小时和分钟2整点报时3四按键 选择 加1 减1 确认4秒由一个LED闪烁表示使用52单片机、单片机时钟整点蜂鸣器响十下、单片机整点报时几点响几下等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10630303.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存