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

如何用单片机做一个简单的倒计时器,第1张

一般我们用定时器来做计时器,实现时间得加。每次中断发生,用一个变量自增来判断时间是否到1S,到了之后清零这个变量,另一个时间变量自增来作时间得增加。现在就是要把这个自增的时间变量改为自减,判断当小于0时,又赋初值,然后继续自减判断。

单片机是指一个集成在一块芯片上的完整计算机系统。单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。

② 单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。

③ 单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等 。

应用分类

单片机作为计算机发展的一个重要分支领域,根据目前发展情况,从不同角度单片机大致可以分为通用型/专用型、总线型/非总线型及工控型/家电型。

①通用型/专用型

这是按单片机适用范围来区分的。例如,80C51是通用型单片机,它不是为某种专用途设计的;专用型单片机是针对一类产品甚至某一个产品设计生产的,例如为了满足电子体温计的要求,在片内集成ADC接口等功能的温度测量控制电路。

②总线/非总线型

这是按单片机是否提供并行总线来区分的。总线型单片机单片机普遍设置有并行地址总线、 数据总线、控制总线,这些引脚用以扩展并行外围器件都可通过串行口与单片机连接,另外,许多单片机已把所需要的外围器件及外设接口集成一片内,因此在许多情况下可以不要并行扩展总线,大大减省封装成本和芯片体积,这类单片机称为非总线型单片机。

③控制型/家电型

这是按照单片机大致应用的领域进行区分的。一般而言,工控型寻址范围大,运算能力强;用于家电的单片机多为专用型,通常是小封装、低价格,外围器件和外设接口集成度高。 显然,上述分类并不是惟一的和严格的。例如,80C51类单片机既是通用型又是总线型,还可以作工控用。

#include <reg52h>

#include <mathh>

#define uint unsigned int

#define uchar unsigned char

sbit fm=P1^7;//蜂鸣器

uint aa=0,c;

void Delay1ms(unsigned int i) //1ms延时程序

{

unsigned int j;

for(;i>0;i--)

{

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

{;}

}

}

void init()//初始化设置

{

TMOD=0x01;//定时器0作为定时器用

TH0=965536-5000)/256;//定时50ms

TL0=965536-5000)%256;

EA=1;//开总中断

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

TR0=1;//启动定时器

}

void main()//主程序很简单

{

init();//初始化

c=36008;

while(1)//循环程序

{

while(c!=0);

c=36008;

fm=1;//报警

Delay1ms(5000) ;

fm=0;//报警停止

}

}

void timer0()interrupt 1//定时器0的中断序号为1

{

aa++;

TH0=965536-5000)/256;//定时50ms

TL0=965536-5000)%256;

if(aa==20)//中断10次,共1S

{

aa=0;

c--;

}

}

;假设单片机晶振fosc=6mhz,则t=2us;定时器计数器T0,方式1;60分钟之后干什么没有描述,故设定60分钟之后由p10口输出一高电平,并延时一段时间

org 0000h ljmp main org 000bh ljmp serve org 0100hmain:mov sp,#60h mov r0,#10 ;定时100ms10=1s mov r7,#60 ;1s60=1min,设1分钟计数初值 mov r6,#60 ;1min60=60min,设1小时计数初值 mov tmod,#01h mov th0,#3ch mov tl0,#0b0h clr p10 setb ea setb et0 setb tr0 sjmp $serve:mov th0,#3ch mov tl0,#0b0h djnz r0,loop mov r0,#10 djnz r7,loop mov r7,#60 djnz r6,loop mov r6,#60 setb p10 acall delay clr p10loop: retidelay:mov r1,#10lp1:mov r2,#0ffhlp2:nop nop djnz r2,lp2 djnz r1,lp1 retend

#include <AT89X51H>

unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,0x00};

unsigned char second;

unsigned char tcount;

void main(void)

{

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

TR0=1;

tcount=0;

second=0;

P0=dispcode[second/10];

P2=dispcode[second%10];

while(1)

{

if(TF0==1)

{

tcount--;

if(tcount==0)

{

tcount=15;

second--;

if(second==0)

{

second=15;

}

P0=dispcode[second/10];

P2=dispcode[second%10];

}

TF0=0;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

}

}

}

以上就是关于如何用单片机做一个简单的倒计时器全部的内容,包括:如何用单片机做一个简单的倒计时器、单片机程序,设计一个倒计时程序,每八个小时响一次,持续时间五秒,求大神帮忙。、求单片机60分倒计时程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存