导航:首页 > 操作系统 > 单片机秒表倒计时

单片机秒表倒计时

发布时间:2023-03-21 10:32:29

A. 汇编语言 51单片机 倒计时器程序

这是一个倒计时案例,你可以参考一下:

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 ET0
SETB EA
MOV R0,#9
MOV R1,#9
MOV R2,#0
MOV R3,#9
CLR 00H
CLR 01H
LOOP:
JB P1.0,LP01
JNB P1.0,$
SETB TR0
CLR 01H
SJMP LOOP0
LP01:
JB P1.1,LP02
JNB P1.1,$
SETB 01H
SJMP LOOP0
LP02:
JB P1.2,LOOP0
JNB P1.1,$
CLR TR0
MOV P3,#0FDH
MOV P2,#0
MOV P3,#0FEH
MOV P2,#0
SJMP MAIN
LOOP0:
JB 00H,LOOP1
MOV A,R0
SJMP LOOP2
LOOP1:
MOV A,R1
LOOP2:
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV R3,A
SJMP LOOP
T0ISR:
CLR TR0
MOV TH0,#HIGH(65536-10000)
MOV TL0,#LOW(65536-10000)
SETB TR0
JB 01H,T0C
INC R2
T0C:
CPL 00H
MOV A,R3
JB 00H,T001
MOV P3,#0FDH
MOV P2,A
SJMP T002
T001:
MOV P3,#0FEH
MOV P2,A
T002:
MOV A,R2
CJNE A,#100,T0E
MOV R2,#0
MOV A,R0
JZ T003
DEC R0
SJMP T0E
T003:
MOV A,R1
JZ T004
DEC R1
MOV R0,#9
T0E:
RETI
T004:
CLR TR0
RETI
TABLE: ; 共阴极数码管显示代码表
DB 3FH,06H,5BH,4FH,66H ;01234
DB 6DH,7DH,07H,7FH,6FH ;56789

B. 如何用单片机做一个简单的倒计时器

我已经完成了,下面是电路图和实际效果,你也试试,程序已经调试完成了!!!是使用秒表程序改编完成的,喜欢的话,点一个赞吧!希望能帮到你!!!

#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16; //对数据类型进行声明定义

typedef unsigned char u8;

sbit LSA=P2^2;

sbit LSB=P2^3;

sbit LSC=P2^4;

u8 code smgan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f};//显示0~F的值

u8 ssec=100,sec=60,min=04;

u8 DisplayData[8];

sbit beep=P1^5;

unsigned long counter=0;

unsigned int c=0;

sbit p15=P1^5;

bit p;

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

* 函 数 名 : delay

* 函数功能 : 延时函数,i=1时,大约延时10us

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

void delay(u16 i)

{

while(i--);

}

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

* 函 数 名 : Timer0Init

* 函数功能 : 定时器0初始化

* 输 入 : 无

* 输 出 : 无

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

void Timer0Init()

{

TMOD=0X11;//选择为定时器0模式,工作方式1,仅用TR0打开启动。

TH0=0Xd8; //给定时器赋初值,定时10ms

TL0=0Xf0;

ET0=1;//打开定时器0中断允许

EA=1;//打开总中断

TR0=1;//打开定时器 -->启动定时器中断!

ET1=1;

TR1=1;

TH1=(65536-250)/256; //FC

TL1=(65536-250)%256;

}

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

* 函 数 名 : DigDisplay

* 函数功能 : 数码管动态扫描函数,循环扫描8个数码管显示

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

void DigDisplay()

{

u8 i;

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

{

switch(i) //位选,选择点亮的数码管,

{

case(0):

LSA=0;LSB=0;LSC=0; break;//显示第0位

case(1):

LSA=1;LSB=0;LSC=0; break;//显示第1位

case(2):

LSA=0;LSB=1;LSC=0; break;//显示第2位

case(3):

LSA=1;LSB=1;LSC=0; break;//显示第3位

case(4):

LSA=0;LSB=0;LSC=1; break;//显示第4位

case(5):

LSA=1;LSB=0;LSC=1; break;//显示第5位

case(6):

LSA=0;LSB=1;LSC=1; break;//显示第6位

case(7):

LSA=1;LSB=1;LSC=1; break;//显示第7位

}

P0=DisplayData[i];//发送段码

delay(100); //间隔一段时间扫描

P0=0x00;//消隐-->撤销选中;

}

}

void datapros()

{

DisplayData[0]=smgan[ssec%10];

DisplayData[1]=smgan[ssec/10];

DisplayData[2]=0x40;

DisplayData[3]=smgan[sec%10];

DisplayData[4]=smgan[sec/10];

DisplayData[5]=0x40;

DisplayData[6]=smgan[min%10];

DisplayData[7]=smgan[min/10];

}

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

* 函 数 名 : main

* 函数功能 : 主函数

* 输 入 : 无

* 输 出 : 无

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

void main()

{

Timer0Init(); //定时器0初始化

while(1)

{

datapros();

DigDisplay();

}

}

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

* 函 数 名 : void Timer0() interrupt 1

* 函数功能 : 定时器0中断函数

* 输 入 : 无

* 输 出 : 无

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

void Timer0() interrupt 1

{

TH0=0Xd8; //给定时器赋初值,定时10ms

TL0=0Xf0;

ssec--;

if(ssec==00) //1s

{

ssec=100;

sec--;

if(sec==00)

{

sec=60;

min--;

if(min==-1)

{

P1=1;

ssec=0;sec=0;min=0;

TR0=0;

}

}

}

}

void Timer1() interrupt 3

{

TH1=(65536-250)/256; //FC

TL1=(65536-250)%256;

if(p!=1) p15=~p15;

if(p==1) p15=0;

c++;

if(c==250)

{

//c=0;

p=~p;

}

if(c>=250&&1695);

if(c==1696) c=0;

}

C. 单片机的倒计时器初始值是怎么算的,例如初始值是30分钟,30分钟是怎么设置的

那是由许多变量来保存的,如用定时器定时50ms 中断20次是1S 每60秒是1分钟 中断次数 秒数 分钟数都可由变量来表示
如 fen miao n 分别代表当前分钟数 秒数 中断次数
程序工作过程是这样的 :
定时器定时50ms(由于单片机定时器位数限制,不容易实现1秒定时)
定时时间到 (发生中断,进入中断程序),变量n加1如果n等于20将n清0同时将miao加1 如果miao等于60 秒清0
同时fen 加1 就可以实现计时
如果倒计时,可以设fen的初值为30 每次miao等于60时将分减1
就是这么简单的数学运算 高级语言编程就这么简单
但用汇编语言编程就要知道单片机的内部结构,并用一些很难记忆的指令来写程序,要繁琐很多

D. 单片机 C语言秒表程序 求修改!倒计时结束后又开始计时了怎么停下来

#include<reg51.h>

#defineucharunsignedchar

#defineuintunsignedint

ucharseg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示0-9段码

ucharcount,time;

sbitstart=P3^4;

sbitstop=P3^5;

sbitreset=P3^6;

/*****延时函数*****/

voiddelay(uchark)

{

uchari,j;

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

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

}

voidmain()

{

TMOD=0x01;//设置为定时器模式1

TH0=0x3c;//晶振6MHz,定时时间100ms

TL0=0xb0;

IE=0x82;//开全局中断和定时中断

time=24;

count=0;


while(1)

{

if(start==0)TR0=1;//启动开关

if(stop==0)TR0=0;//停止开关

含棚if(reset==0)time=24;//复位开关


P2=0xfe;//显示个位

谈高则P0=seg[time%10];//取计时值个位送P0口

delay(2);

P2=0xfd;//显示十位

P0=seg[time/10];//取计时值十位送P0口

delay(2);

}

}

voidtimer0()interrupt1

{

TH0=0x3c;

TL0=0xb0;

count++;

if(count==10)//中断10次即1s=10×100ms

{

count=0;//计数次数清0

time--;//计时值减1

if(time==0)

{

time=24;//计时值减到念巧0则回初值

TR0=0;

}

}

}

E. 编程实现倒计时的秒表,2位LED数码管显示,延时采用硬件延时的方法

编程实现倒计时的秒表,2位LED数码管显示,延时埋闭采用硬件延时的方法
用单片机的定时器T0定时,计时1秒,实现倒计时的秒表的功能。
程序如下
#include<reg51.h>
unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管段码表
unsigned char second;//秒倒计时变量
unsigned char t0n;//T0中断次数计数
sbit k1=P3^2;//定义按键
void delay()
{
unsigned int j;
for(j=400;j>0;j--);
}
void display()//显示子程序
{
P2=0x01;
P0=tab[second/10];//显示十位
delay();
P2=0x02;
P0=tab[second%10];//显示个位
delay();
}
void main()
{
TMOD=0x01;//用T0定时,中断方式
TH0 =0x3C;//晶振12M,定时50ms
TL0 =0xB0;
IE =0x82;
while(1)
{
display();//调显示子程序
if(k1==0)//按键按下
{
if(TR0==0)
{
TR0=1;//启动开始计时
second=60;//从60秒开始倒计时
}
else
TR0=0;
while(k1==0);/渗哗/等待按键释放
}
}
}
//T0中断程序
void T0_int() interrupt 1
{
TH0 =0x3C;
TL0 =0xB0;
t0n++;
if(t0n>=20)/弯喊裂/1秒到
{
t0n=0;
second--;//减1秒
if(second==0)TR0=0;
}
}

F. 采用AT89C51单片机设计一只电子秒表,倒计时(60~1每间隔1秒倒数)

硬件电路 有2位数码管可以显示秒表的时间 0~10秒

有3个按键 K1为开始计时 K2为停止计时 K3为清零

软件设计:

K1按下则启动定时器定时 每到1秒 显示器缓冲单元内容加1

K2按下则停止定时器定时

K3按下则将显示器缓冲单元内容清零。

G. 如何用C51单片机做出以下程序 “秒表是倒计时,从100秒开始倒计时 用数码管实时显示当前计时值”

假设P0 P2接数码管,静态驱动,程序如下:
include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar num=100;
uchar time=0;
//共阴数码管七段码
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77};
void Delay1ms(uint i) //1ms延时程序
{
uint j;
for(;i>0;i--)
{
for(j=0;j<164;j++)
{;}
}
}

void main(void )//主程序
{
TMOD=0X01;
ET0=1;
EA=1;
TH0=(65536-50000)/256;//定时50ms
TL0=(65536-50000)%256;
TR0=1;
while(1)
{
P0=table[num/10];
Delay1ms(2);
P2=table[num%10];
Delay1ms(2);
}
}
void TIMER0()interrupt 1//中断程序
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
time++;
if(time==20)
{
time=0;
num--;
}
if(num==0)
{
num=100;
}
}

H. 51单片机怎么用三个按键控制分别为时钟,秒表,倒计时

假如三个按键分别为k1,k2,k3。
用k1选择3个功能,按一下切换一个功能。
在时钟状态下,用k2选择调节位,用于调时,分别选小时的十位,个位,分的十位,个位,开始计时这5个状态。k3调节位加一,只能按加一调节了。
在秒表状态下,k2为计时和停止切换。k3为清0。
在倒计时状态下,k2和k3作用与秒表相同。倒计时初始值只好固定的。

I. 单片机设计的30秒倒计时器

看不清晶振是多大的。这也不难,不可能是毕设吧,自学就得自枝纤己搞,别人整出来了复制多没意思。真要是不想自己做猛仔仿,可以出钱戚郑找人设计。

J. 如何用单片机做一个简单的倒计时器

51单片机实现数码管99秒倒计时,其实很简单,就是使用定时器中断来实现。目的就是学习怎样用单片机实现倒计时,从而实现一些延时控制类的东西,99秒只是一个例子,你完全可以做出任意倒计时如10秒倒计时程序。定时器定时时间计算公式:初值X=M(最大计时)-计数值。
初值,换算成十六进制,高位给TH0,低位给TL0,如果用定时器0的话。
M(最大计时)如果是16位的,就是2的16次方,最大定时,65535 微秒,实现1秒定时,可以通过定时10毫秒,然后100次改变一次秒值即可。10*100毫秒=1S
计数值:你要定时多长时间,如果定时1毫秒,就是1000微秒,(单位为微秒),如果定时10毫秒,就是10000(微秒),当然,最大定时被定时器本身位数限制了,最大2的16次方(16位定时计数器),只能定时65.535毫秒。定时1S当然不可能1S定时器中断。
下面为实现99秒倒计时C语言源程序
/*了解定时器,这样的话,就可以做一些基本的实验了,如定时炸弹~~,10秒后打开关闭继电器*/
/*数码管,12M晶振*/
#include <reg52.h>
#define uchar unsigned char
sbit p11=P1^1; //连的是继电器。。
code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar shiwei;
uchar gewei;
void delay(unsigned int cnt)
{
while(--cnt);
}
void main()
{
TMOD|=0x01; /*定时器0 16位定时器 X=65535-10000(10毫秒)=55535=D8F0(十六进制)定时10ms
*/
TH0=0xd8;
TL0=0xf0;
IE=0x82; //这里是中断优先级控制EA=1(开总中断),ET0=1(定时器0允许中断),这里用定时器0来定时
TR0=1; //开定时器0
while(1)
{
P0=shiwei; //99的十位
P2=0; //99的个位,
delay(300); //动态扫描数码管延时
P0=gewei;
P2=1;
delay(300);
}
}
void tim(void) interrupt 1 using 1 //定时器0中断
{
static uchar second=99,count; //99只是一个数,可以任意改,因为这里只学习怎样实现倒计时
TH0=0xd8; //定时10毫秒
TL0=0xf0;
count++;
if(count==100) //10毫秒定时,10*100=1000(毫秒)=1秒
{
count=0;
second--;
if(second==0)
{
p11=0; //这里让继电器动作,当然动作之后,要复位才能等下次倒定时再动作。
second=99; //回到99再循环来,当然,可以做其他的控制,
}
shiwei=tab[second/10]; //数码管10位
gewei=tab[second%10]; //数码管个位
}

阅读全文

与单片机秒表倒计时相关的资料

热点内容
空调压缩机哪的厂家多 浏览:388
手指速算法24加7怎么算 浏览:137
如何用python写vlookup函数 浏览:796
社保加密狗厂商 浏览:214
php编译运行说法 浏览:955
程序员说喂 浏览:252
抖音直播云服务器 浏览:627
一加7pro文件夹data 浏览:424
程序员淋雨 浏览:959
python输出数字序列中的空格 浏览:78
怎么将pdf文件大小 浏览:734
氧原子相对分子量算法 浏览:988
加密机为什么是安全的 浏览:451
单片机拼音输入法 浏览:801
苹果笔记本t2加密芯片怎么打开 浏览:797
安卓如何把手机投屏至电视 浏览:751
方舟编译器现在可提速哪些软件 浏览:61
微信加密为什么是黑屏 浏览:473
android去电状态 浏览:614
苹果13如何加密视频 浏览:815