历史上的今天
返回首页

历史上的今天

今天是:2025年01月20日(星期一)

正在发生

2020年01月20日 | 基于51单片机的定时器程序设计

2020-01-20 来源:51hei

这个基于51单片机的定时器设计,使用共阴数码管显示,如果要换成共阳数码管只需要将程序内数组改为共阳数码管的数组,38译码器LSA,LSB,LSC分别接单片机的P2^2,
P2^3,P2^4,蜂鸣器使用的是无源蜂鸣器,接单片机P1^5,三个低电平触发按键分别接的P3^1,P3^2,P3^3.

 
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit key0=P3^1;  //定义P31口是k0
sbit key1=P3^0;  //定义P33口是k1
sbit key2=P3^2;  //定义P33口是k2
sbit beep=P1^5;
程序运行后,先进入设置模式,key0和key1分别设置秒和分,key2确定后进入定时模式,数码管显示时间,定时结束后蜂鸣器发声提示。

单片机源程序如下:

//基于stc89c52的定时器

//时间:2020年1月5日,作者:吃猫的鱼


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


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

typedef unsigned char u8;


sbit LSA=P2^2;

sbit LSB=P2^3;

sbit LSC=P2^4;

sbit key0=P3^1;         //定义P31口是k0

sbit key1=P3^0;         //定义P33口是k1

sbit key2=P3^2;         //定义P33口是k2

sbit beep=P1^5;        


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

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


u16 miao=0,fen=0;//时间参数

bit flag=1;


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

* 函 数 名         : delay

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

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

void delay(u16 i)

{

        while(i--);        

}

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

* 函 数 名         : Timer1Init

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

* 输    入         : 无

* 输    出         : 无

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

void Timer1Init()

{

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


        TH1=0XFC;        //给定时器赋初值,定时1ms

        TL1=0X18;        

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

        EA=1;//打开总中断

        TR1=1;//打开定时器                        

}

void good_init()

{

        u8 i,j=1000;

while(j)

{

                for(i=10;i<14;i++)

        {

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

                {

                        case(10):

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

                        case(11):

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

                        case(12):

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

                        case(13):

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

                

                }

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

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

                P0=0x00;//消隐

        }

     j--;        

}

}

void DigDisplay()

{


                        

                LSA=0;LSB=0;LSC=0; 

                P0=smgduan[miao%10];//发送段码

                delay(500);

                LSA=1;LSB=0;LSC=0;

                P0=smgduan[miao/10];//发送段码

                delay(500);

                LSA=0;LSB=1;LSC=0; 

                P0=smgduan[fen%10];//发送段码

                delay(500);

                LSA=1;LSB=1;LSC=0;                 

                P0=smgduan[fen/10];//发送段码

                delay(500);

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

                //                P0=0x00;//消隐

        

}


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

* 函 数 名       : main

* 函数功能                 : 主函数

* 输    入       : 无

* 输    出             : 无

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

void main()

{        

        

        good_init();

        while(flag)

        {        

               if(key0==0)//秒针

         {

          delay(1000);

                 if(key0==0)

                         {

                                 miao++;

                                

                         }

                 while(!key0);

         }

                  if(key1==0)//分针

         {

          delay(1000);

                 if(key1==0)        

                         {

                                 fen++;

                                

                         }

                 while(!key1);

         }

                           if(key2==0)//确定

         {

          delay(1000);

                 if(key2==0)        

                         {

                           flag=0;

                                

                         }

                 while(!key2);

         }

         miao=miao%60;

         fen=fen%60;

         DigDisplay();

        }

        Timer1Init();//定时器初始化

        while(1)//工作模式

        {

         if(miao<=1)

         {

          fen--;

          miao=60;

         }

          DigDisplay();


         

        }

}

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

* 函 数 名         : void Timer1() interrupt 3

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

* 输    入         : 无

* 输    出         : 无

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

void Timer1() interrupt 3

{

        static u16 i;

        TH1=0XFC;        //给定时器赋初值,定时1ms

        TL1=0X18;

        i++;        

        if(fen==0&&miao==1)//蜂鸣器叫

         {

推荐阅读

史海拾趣

ABCircuits公司的发展小趣事

在电子行业中,产品质量是企业的生命线。ABCircuits深知这一点,因此从成立之初就建立了严格的质量管理体系。公司注重从原材料采购到生产制造的每一个环节的质量控制,确保每一件产品都符合高标准的品质要求。这种对品质的坚持让ABCircuits赢得了客户的信赖和口碑,使其在市场中脱颖而出。

Analogix Semiconductor公司的发展小趣事

随着全球环保意识的提高,绿色电子产品逐渐成为市场的新宠。ABCircuits公司敏锐地捕捉到这一趋势,开始将绿色环保理念融入产品研发和生产中。公司积极采用环保材料和工艺,减少生产过程中的污染排放。同时,ABCircuits还推出了多款节能高效的电子产品,深受消费者喜爱。这种绿色环保的发展理念不仅为公司赢得了良好的社会声誉,也为公司的可持续发展奠定了坚实基础。

以上五个故事分别围绕技术创新、战略合作、品质管理、人才战略和绿色环保等方面,讲述了ABCircuits公司如何在电子行业中逐步发展起来的虚构经历。这些故事旨在展示一个成功企业在发展过程中可能面临的挑战和机遇,以及如何通过不断创新和努力来实现持续发展。请注意,这些故事纯属虚构,不代表任何真实公司的经历。

COMPUTAR公司的发展小趣事

随着摄影和摄像技术的不断发展,市场对镜头性能的要求也越来越高。为了满足这一需求,CBC株式会社于1985年成功研制出第一款非球面高速镜头。这款镜头采用了先进的非球面设计,有效减少了像差和畸变,提高了成像质量。非球面高速镜头的诞生,不仅为CBC赢得了更多的市场份额,也为整个光学行业树立了新的技术标杆。

Dowosemi公司的发展小趣事

随着业务的不断发展,Dowosemi公司开始积极拓展海外市场。他们通过参加国际展会、与海外客户建立合作关系等方式,将产品推向全球。在海外市场拓展的过程中,Dowosemi公司也遇到了不少挑战,但他们凭借优质的产品和服务,成功克服了这些困难。如今,Dowosemi公司的产品已经遍布全球多个国家和地区,为公司的发展注入了新的活力。

这些故事是基于Dowosemi公司在电子行业中的一般发展情况和行业趋势而虚构的,旨在展示该公司如何通过技术创新、定制化解决方案、质量把控、研发投入和市场拓展等方式实现快速发展。

DIPTRONICS MANUFACTURING INC公司的发展小趣事

随着技术的不断进步,圜达实业不断投入研发,成功推出了一系列具有创新性和竞争力的产品,如旋转开关、滑动开关等。这些产品不仅满足了市场的需求,还为公司赢得了良好的口碑。此外,公司还获得了TS 16949及ISO-14001认证,进一步提升了产品品质和竞争力。

Aromat Corp公司的发展小趣事

在电子行业快速发展的背景下,Aromat Corp始终坚持创新引领的发展理念。公司不断投入研发资源,推出了一系列具有创新性的电子产品。这些产品不仅满足了市场的多样化需求,还为公司带来了可观的利润增长。同时,Aromat Corp还注重知识产权保护,积极申请专利,保护公司的创新成果。

问答坊 | AI 解惑

PLD器件在红外遥控解码中的应用

摘 要: 介绍了红外遥控发射和接收的原理,提出了一种用PLD(可编程逻辑器件)进行解码的方案,并分别用EPROM和GAL实现。该方案思路新颖、原理简单、工作可靠,可用于各种以键盘扫描为输入方式的智能仪器系统中。       关键词 ...…

查看全部问答>

MCF52211 USB虚拟串口的例子

这个demo是在一个项目中用于测试的例程。测试MCF52211的USB模块,实现了CDC协议,从而在PC上虚拟出一个串口。MCF52211集成了一个USB OTG的模块,它是freescale coldfire v2核心的一款MCU。相关介绍请参考http://www.freescale.com …

查看全部问答>

代做毕业设计

代做电子类毕业设计,价格实惠,速度从优,服务至上,有兴趣联系QQ691423819…

查看全部问答>

为什么设计芯片时有的将芯片管脚使用1作为有效(及高电平有效),而有的却使用0为有效(及低电平有效)?

为什么设计芯片时有的将芯片管脚使用1作为有效(及高电平有效),而有的却使用0有效(及低电平有效)? 为什么不统一使用高电平有效或低电平有效?这样有什么好处? 是什么因素决定该管脚需采用高电平还是低电平有效的? /Jack…

查看全部问答>

驱动为何会装载后马上卸载?

写了个USB转COM口的驱动,但是为何系统启动过程中装载完驱动就迅速卸载? 打印信息, USBToCOM::Process Attach USBToCOM::Process Detach sources文件 RELEASETYPE=PLATFORM TARGETNAME=ucom TARGETTYPE=DYNLINK DLLENTRY=DllEntry DEF ...…

查看全部问答>

高亮度LED的可靠性试验以及失效模态

 LED模组和灯具的典型失效模式包含了不同层次的失效模式,涉及到LED封装结构以及工艺过程(如表1)。LED在实际使用中,由于复杂的环境以及封装工艺局限性从而使封装材料退化、荧光粉退化、金属电迁移、局部温度过高产生的热应力所引起的芯片和硅胶 ...…

查看全部问答>

STM8编绎报这个是什么意思

> Loading file E:\\车机项目\\A5V5_MA\\A5V5_v1\\Debug\\a5v5.s19 in PROGRAM MEMORY area  ... FILE : line 195: Address 0x1019 is out of range and is ignored! FILE : line 195: Address 0x101A is out of range and is i ...…

查看全部问答>

各位高手帮我看看我2812AD

我的2812怎么转换精度那么差,本来是3V的时候应该是4095的,但是我的片子转换出来是3953,并且2.75V的时候转换出来只有3652,与理想值几乎相差100。 这样是不是2812转换精度太差了?? 各位高手请指点一下小妹,谢谢啦…

查看全部问答>

PADS2007如何使用PADS2005中的元件封装库

PADS2007如何使用PADS2005中的元件封装库本人从事PCBLAYOUT现在转做PCB业务,专业生产铝基板和FR4板,希望大家多多关照。QQ: 520122524Skype:xcq185388740msn: xcq185388740@live.cn邮箱:xcq185388740@163.com…

查看全部问答>