单片机六十秒倒计时程序

单片机六十秒倒计时程序,第1张

数码管段选接P2口,位选接P3.0和P3.1,

采用定时器T0定时10ms,60H为1s计数单元,计数100次为1sORG 0000H 程序从0地址开始

LJMP MAIN 跳到MAIN处执行

ORG 000BH 定时器T0

LJMP TIME0

ORG 0030H

MAIN:MOV TMOD,#01H 设置T0工作在模式1

MOV TH0,#0D8H 赋初值,定时10ms

MOV TL0,#0F0H

MOV IE,#82H 开CPU中断,开定时器0中断

MOV R3,#60

SETB TR0 启动T0定时器工作

MOV 60H,#100给60H单元赋初值

CLR 4FH 清零4FH单元

DISPLAY: 显示子程序

MOV DPTR,#TAB DPTR指向编码表位置

MOV A,R3 将R3的内容复制到A

MOV B,#10

DIV AB A除B,商给A,余数给B

MOVC A,@A+DPTR 根据A的值取出编码表中的编码

MOV P2,A 由P1口输出A的内容

CLR P3.0 清零P2.0

SETB P3.0 置位P2.0 MOV A,B

MOVC A,@A+DPTR 根据A的值取出编码表中的编码

MOV P2,A 由P1口输出A的内容

CLR P3.1 清零P2.1

SETB P3.1 置位P2.1

JNB 4FH,DISPLAY 判断1秒时间是否到,没有到,则跳转到DIAPLAY处

CLR 4FH 1秒到,清4FH

LJMP DISPLAY 调用显示子程序 TIME0:MOV TH0,#0D8H赋初值

MOV TL0,#0F0H

DJNZ 60H,TT 60H单元自减1,判断是否为0,不为0则跳转到TT处

MOV 60H,#100 60H单元为0,则重新给其赋值100

SETB 4FH 同时置位4FH单元

DEC R3R3自加1

CJNE R3,#00H,TT 判断R3是否为0,否则跳转TT处

CLR TR0

TT:RETI

TAB: 编码表

DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH 共阴

END程序结束

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,

0x6f}

void display(uchar fen,uchar miao)

uchar a,fen,miao,shu

void delay(uint z)

void init()

void main()

{

init()

while(1)

{

display(fen,miao)

}

}

void timer0() interrupt 1

{

TH0=(65536-50000)/256

TL0=(65536-50000)%256

a++

if(a==20)

{

a=0

shu++

fen=shu/10

miao=shu%10

if(shu==60)

shu=0

}

}

void init()

{

TMOD=0x01

TH0=(65536-50000)/256

TL0=(65536-50000)%256

EA=1

ET0=1

TR0=1

}

void display(uchar fen,uchar miao)

{

P1=0xFe

P2=table[fen]

delay(5)//延时5毫秒

P1=0xFf

P2=table[miao]

delay(5)//延时5毫秒

}

void delay(uint z)

{

uint x,y

for(x=zx>0x--)

for(y=110y>0y--)

}

//1:用AT89C51单片机的定时/计数器T0产生一秒的

//定时时间,作为秒计数时间,当一秒产生时,秒

//计数加1,秒计数到60时,自动从0开始。单片机

//晶振频率为12MHZ

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,

0x6f}

void display(uchar fen,uchar miao)

uchar a,fen,miao,shu

void delay(uint z)

void init()

void main()

{

init()

while(1)

{

display(fen,miao)

}

}

void timer0() interrupt 1

{

TH0=(65536-50000)/256

TL0=(65536-50000)%256

a++

if(a==20)

{

a=0

shu++

fen=shu/10

miao=shu%10

if(shu==60)

shu=0

}

}

void init()

{

TMOD=0x01

TH0=(65536-50000)/256

TL0=(65536-50000)%256

EA=1

ET0=1

TR0=1

}

void display(uchar fen,uchar miao)

{

P1=0xFe

P2=table[fen]

delay(5)//延时5毫秒

P1=0xFf

P2=table[miao]

delay(5)//延时5毫秒

}

void delay(uint z)

{

uint x,y

for(x=zx>0x--)

for(y=110y>0y--)

}


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

原文地址:https://54852.com/yw/7732480.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存