单片机的倒计时程序

单片机的倒计时程序,第1张

//工程名称:99秒倒计时//功能描述:程序开始显示99秒等待开始倒计时,当再次按下开关后计时//停止,当再按下开关后计时//复位实际上是单片机复位,重新开始!//通过本程序新的认识: 1.BCD数码管的使用 2.十进制到BCD码转化  //3.C51的等待按键作用//2. temp=99i=temp/10j=temp%10i=(i<<4)dis=i+jP0=dis//3.while(sw==1){}// 判按下,下则出 while(sw==0){}//判松开// ,开则出#includesbit sw=P3^5//定义开关main(){ unsigned char temp,disunsigned int i,j,k,t// P0=0x88//初试时检测数码管是否正常// for(k=0k<40000k++)temp=99i=temp/10j=temp%10i=(i<<4)dis=i+jP0=dis//启动是显示99while(sw==1){}// 判按下,下则出while(sw==0){}//判松开 ,开则出 第一次按开关for(t=0t<5t++)//循环来减{for(k=0k<30000k++)temp--i=temp/10j=temp%10i=(i<<4)dis=i+jP0=disfor(k=0k<30000k++)if(sw==0) break// while(sw==1){}// while(sw==1){}// break}while(sw==1){}// 判按下,下则出while(sw==0){}//判松开 ,开则出 第一次按开关while(sw==1){}// 判按下,下则出while(sw==0){}//判松开 ,开则出 第一次按开关

C语言

#include

#define

uint

unsigned

int

#define

uchar

unsigned

char

sbit

p27=P2^7//数码管位选端定义

uchar

c,i

//数码管译码表

unsigned

char

code

NumDecode[]

=

{

0XC0,//0

0XF9,//1

0XA4,//2

0XB0,//3

0X99,//4

0X92,//5

0X82,//6

0XF8,//7

0X80,//8

0X90,//9

}

void

main()

{

i=0//10秒计时设置

c=0//中断次数计数

p27=1//数码管位选端关闭

TMOD=1//设置定时器0为工作方式1

TH0=(65536-46080)/256//定时50ms高8位求模

TL0=(65536-46080)%256//定时50ms低8位求余

EA=1//开总中断

ET0=1//定时器0中断

TR0=1//启动定时器0

while(1)

{

if(c==20)//50ms中断20次

{

c=0

i++//倒计时总数每秒减1

}

if(i<10)

{

p27=0//数码管位选选通

P0=NumDecode[i]//显示数据

}

else

//循环计时设置

{

i=0

}

}

}

void

timer0()

interrupt

1//定时器0中断入口

{

TH0=(65536-46080)/256//定时器重新赋初值

TL0=(65536-46080)%256

c++//中断次数

}

ORG 0000H

LJMP MAIN

ORG 000BH

LJMP T0ISR

ORG 0030H

MAIN:

MOV TMOD,#01H

MOV TH0,#HIGH(65536-10000)

MOV TL0,#LOW(65536-10000)

SETB TR0

SETB ET0

SETB EA

MOV R0,#99

MOV R1,#0

LOOP:

JB P1.0,LOOP1

JNB P1.0,$

INC R0

CJNE R0,#100,LOOP

MOV R0,#99

SJMP LOOP

LOOP1:

JB P1.1,LOOP

JNB P1.1,$

CJNE R0,#0,LOOP11

SJMP LOOP

LOOP11:

DEC R0

SJMP LOOP

T0ISR:

CLR TR0

MOV TH0,#HIGH(65536-10000)

MOV TL0,#LOW(65536-10000)

SETB TR0

INC R1

CJNE R1,#100,T0E

DEC R0

MOV R1,#0

DEC R0

CJNE R0,#0,T00

CLR P3.0

SJMP T0E

T00:

SETB P3.0

MOV A,R0

MOV B,#10

DIV AB

MOV DPTR,#TABLE

JB 00H,T001

MOV P2,#0FEH

MOVC A,@A+DPTR

MOV P0,A

SJMP T0E

T001:

MOV P2,#0FDH

MOV A,B

MOVC A,@A+DPTR

MOV P0,A

T0E:

RETI

---------------------------------------

TABLE: 共阴极数码管显示代码表

DB3FH,06H,5BH,4FH,66H 01234

DB6DH,7DH,07H,7FH,6fh 56789

END


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

原文地址: http://outofmemory.cn/yw/7769474.html

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

发表评论

登录后才能评论

评论列表(0条)

保存