1. 首页 > 科技

2022倒计时99天画在哪个程序里?(求一个99秒倒计时单片机程序和仿真,基于51单片机。)

2022倒计时99天画在哪个程序里?(求一个99秒倒计时单片机程序和仿真,基于51单片机。)

求一个99秒倒计时单片机程序和仿真,基于51单片机。

#include "reg51.h"

sbit start=P3^2; //外部中断0引脚 开始

sbit rst=P3^3; //外部中断1引脚 复位

sbit breakk=P3^4; //暂停倒计时

sbit led=P3^5; //Led灯

sbit beep=P3^7; //蜂鸣器控制引脚

sbit P30=P3^0; //数码管位选

sbit P31=P3^1;

void didi(void);

unsigned char code duanma[]=

{

0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff

};

char time=99; //倒计时缓存

char flag_t=0; // 1秒辅助计时

char now=0; // 0停止 1 计时 2报警 3复位

unsigned char g=0,s=3,i=0;

void delay(unsigned int n)

{

while(--n);

}

void t0_srv() interrupt 1 using 1

{

TH0=0X3C;

TL0=0XB0;

flag_t++;

if(flag_t>=20){ //20*50ms=1s

flag_t=0;

time--;

if(time<=0){

// beep=0;

didi();

didi();

didi();

led=0;

TR0=0;

now=2;

time=0;

}

}

}

void button_start() interrupt 0 using 1 //外部中断0

{

delay(1500);

if(start==0) {

now=1;

TR0=1;

}

else return;

while(start==0);

delay(1500);

}

void button_rst() interrupt 2 using 1

{

delay(1500);

if(rst==0) {

TR0=0;

time=99;// 3;

i=0;

led=1;

now=0;

}

else return;

while(rst==0);

delay(1500);

}

void disp()

{

g=time%10;

s=time/10;

g=duanma[g];

s=duanma[s];

P0=~g;

P31=0;

delay(250);

P31=1;

P0=~s;

P30=0;

delay(250);

P30=1;

}

void key()

{

if(breakk==0)delay(1500);

else return;

if(breakk==0) {

if(now==1){

i++;

if(i%2)TR0=0;

if(!(i%2))TR0=1;

}

}

else return;

while(breakk==0);

delay(1500);

}

/* 延时250us*k */

void delay250(unsigned int k)

{

unsigned int j,i;

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

{

for(j=0;j<25;j++);

}

}

void didi(void)

{

unsigned int j;

for (j=0;j<400;j++) //loop 400,响0.2s

{

beep=0;

delay250(2);

beep=1;

delay250(2);

}

delay250(800); //stop 0.2s

}

main()

{

TMOD=0X01;//定时器0工作在方式1,

EA=1;

IT0=1;

ET0=1;

TH0=0X3C;//在12M 晶振下,定时时间为50ms

TL0=0XB0;

EX0=1;

EX1=1;

//TR0=1;

while(1){

disp();

key();

}

}

单片机99秒倒计时

用定时器,很简单的,我这里有个程序你可以参考一下

#include "clock.h"

void delay(uint t)

{

uint i;

while(t--)

{

/* 对于12M时钟,约延时1ms */

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

{}

}

}

void main()

{

initial();

P0=0x00;

sec=min=hour=0;

flag=1;

while(1)

{

while(flag)

{

display(0,hour/10);

display(1,hour%10);

//display(2,3);

display(3,min/10);

display(4,min%10);

//display(5,6);

display(6,sec/10);

display(7,sec%10);

flag=0;

}

}

}

void display(uchar digit,uchar num)

{

P2=0x00;

P1=n[num];

P2=m[digit];

delay(1);

}

void initial(void)

{

//--INT0的配置----------

IT0=1; // INT0为0低电平触发(为1则为下降沿触发)

EX0=1; // INT0中断开,允许INT0中断

//--T0的配置:定时器------------

TMOD = 0x11; //定时器0,1 定时,工作方式1(16位装载方式)

TH0 = 0x3c;//定时50ms,12M晶体振荡器

TL0 = 0xb0;

TR0 = 1; //允许T0中断

ET0 = 1;

EA=1; // CPU所有中断开(IE最高位MSB)

}

void timer_0() interrupt 1 using 2

{

FT0++;

if(FT0==20)

{

sec++;

FT0=0;

}

if(sec>59)

{

min++;

sec=0;

}

if(min>59)

{

hour++;

min=0;

}

if(hour>24)hour=0;

TH0 = 0x3c;//定时50ms,12M晶体振荡器

TL0 = 0xb0;

flag=1;

}

//INT0中断 由P3.2引脚产生

void int_0() interrupt 0 using 0

{

if(key1==0)hour++;

if(key2==0)hour--;

if(key3==0)min++;

if(key4==0)min--;

if(hour<0)hour=0;

if(min<0)min=0;

}

#include <reg51.h>

#define uchar unsigned char

#define uint unsigned int

uchar n[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

uchar m[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

uchar FT0,sec,min,hour,flag;

sbit key1=P3^0;

sbit key2=P3^1;

sbit key3=P3^6;

sbit key4=P3^7;

void display(uchar,uchar);

void timer_0();

void initial(void);

void int_0(); //外部中断0

有没有什么可以在手机页面显示倒计时的软件

使用365days

打开365days

在主页面点击右上角的”+“添加项目

把具体的任务输入横线处

最下边一行选择一种样式作为倒计时插件的背景图

点击日期选择任务的最终截止日期,可以选择提前一天,

这样就不会太紧张了

点击右上角的对号就可以了

返回主屏幕,在空白处长按

选择【窗口小工具】

找到365days的倒计时工具

选择要显示的项目的倒计时

拖动到屏幕的空白处

这样我们就可以在桌面直接看到任务计划的倒计时了

时刻督促自己

可以同时放置多个项目的倒计时哦

基于51单片机的999倒计时C语言程序。

/*************************************

要求是能进行9999秒倒计时  

用C语言实现

*************************************/

#include<at89X51.h>

#define uchar unsigned char

#define uint unsigned int

uchar num_qian,num_bai,num_shi,num_ge;//定义千位,百位,十位,个位。

uint  time;//要显示的时间0~9999

uint  tcnt;//计时单元

//*****************//

//以下是端口定义

//*****************//

sbit key_qian=P1^0;//按键"千加1"

sbit key_bai =P1^2;//按键"百加1"

sbit key_shi =P1^4;//按键"十加1"

sbit key_ge  =P1^6;//按键"个加1"

sbit laba =P3^1;//喇叭

void delay(unsigned int z)//1毫秒延时子函数

{

unsigned int x,y;

for(x=z;x>0;x--)

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

}

//*****************//

//以下是七段数码管驱动程序

//*****************//

/**************************************************

** 功能描述: 中断接受字符串驱动程序

**占用引脚资源 P30

**占用系统资源 串口中断;中断向量4

***************************************************/

#define DUAN P0

#define WEI P2

unsigned char code dispcode[]=

{

        0x3F,/*0*/

        0x06,/*1*/

        0x5B,/*2*/

        0x4F,/*3*/

        0x66,/*4*/

        0x6D,/*5*/

        0x7D,/*6*/

        0x07,/*7*/

        0x7F,/*8*/

        0x6F,/*9*/

}; //共阴段码表

//0,1,2,3,4,5,6,7,8,9,A,b,C,c,d,E,F,NULL,-

uchar code dispbitcode[]=

{0xef,0xdf,0xbf,0x7f}; //共阴位码表  

 

uchar dispbuf[4],dispcount;//开辟四个显示缓冲区

void ledinit()/***初始化子函数,定时器0刷新显示内容***/

{

TMOD|=0x01;  //  定时器0方式1

TH0=(65536-5000)/256; //定时器16位模式

TL0=(65536-5000)%256; //溢出时间:5ms

TR0=1; //开启定时器0

ET0=1; //使能定时器0

EA=1;  //系统使能

}

void leddisp()//固定显示某些数字

{

dispbuf[0]=time/1000;

dispbuf[1]=time%1000/100;

dispbuf[2]=time%100/10;

dispbuf[3]=time%10;

}

void keytest()//按键检测程序

{

if(!key_qian)//如果千位按键

{

delay(5);//5毫秒延时去抖

if(!key_qian)//如果千位按键的确按下了

{

num_qian++;//千位数字加一

while(!key_qian);//等待按键松开

}

time+=num_qian*1000;//千位数字加1

}

if(!key_bai)//如果百位按键

{

delay(5);//5毫秒延时去抖

if(!key_bai)//如果百位按键的确按下了

{

num_bai++;//百位数字加一

while(!key_bai);//等待按键松开

}

time+=num_bai*100;//百位数字加1

}

if(!key_shi)//如果十位按键

{

delay(5);//5毫秒延时去抖

if(!key_shi)//如果十位按键的确按下了

{

num_shi++;//千位数字加一

while(!key_shi);//等待按键松开

}

time+=num_shi*10;//十位数字加1

}

if(!key_ge)//如果千位按键

{

delay(5);//5毫秒延时去抖

if(!key_ge)//如果个位按键的确按下了

{

num_qian++;//千位数字加一

while(!key_ge);//等待按键松开

}

time+=num_ge;//个位数字加1

}

}

void main()//主程序

{

ledinit();//数码管中断初始化,定时器0刷新显示内容

while(1)//大循环

{

if((!key_qian)||(!key_bai)||(!key_shi)||(!key_ge))//如果四个按键中的任何一个被按下

keytest();//执行按键检测程序

leddisp();//不断的刷新显示内容

}

}

//*************************************************

//以下是定时器0刷新数码管显示内容驱动程序

//*************************************************

/**************************************************

** 功能描述: 七段数码管驱动程序

**占用引脚资源: 数码管段选,数码管位选

**占用系统资源T0

***************************************************/

void t0(void) interrupt 1 //using 0 

TH0=(65536-5000)/256;  //5ms中断

TL0=(65536-5000)%256; //16位定时器模式

WEI=0xff;//关位选

DUAN=dispcode[dispbuf[dispcount]]; //段选

WEI=dispbitcode[dispcount]; //开位选

dispcount++; 

if(dispcount==5) 

  dispcount=0; 

tcnt++;  //计数个数加一

if(tcnt==5*200)//满足1S了

{

tcnt=0;//计数个数归零

time--;//时间减一

if(time==0)//时间

while(1);

}

if(time<10)//时间小于10

laba=~laba;//声音报警

}  

这是9999秒倒计时的