历史上的今天
返回首页

历史上的今天

今天是:2025年04月17日(星期四)

正在发生

2020年04月17日 | 51单片机做一个计时器

2020-04-17 来源:eefocus

同样我们使用的仍然是STC的8051单片机,这段代码是用来做一个计时器,通过数码管实时显示出来,因为板子上数码管有6个,所以可以设置小时,分钟,秒三个单位,在Proteus上也是可以模拟的,计时结束可以用蜂鸣器,或者继电器接口连接


一个闹铃,闹铃用电磁式的就可以,当然简单来说蜂鸣器就是一个不错的选择。


程序中没有设置小时单位,想要加上的小伙伴可以用显示分钟,秒的方法同样显示出来,但添加后要注意延时的时间,时间设置不当可能会出现显示不清楚,数字抖动,或者未选中的数码管也隐隐发光(“鬼影”)。具体大小可以自己调试着来,也是很简单的。下边是源代码:


#include

#define uint unsigned int

#define uchar unsigned char

sbit we=P2^7;

sbit du=P2^6;

uchar code table[]={0x3f,0x06,0x5B,0x4F,0x66,

               0x6D,0x7D,0x07,0x7F,0x6F,

               0x77,0x7C,0x39,0x5E,0x79, 

               0x71,0x76,0x38,0x37,0x3E,

               0x73,0x5C,0x40,0x00,};

uchar num=0,aa,s,g,m,f,h;

void delay(uchar x);

void main()

{    

    TMOD=0x01;    //设置内部中断0,1的工作方式为方式1    

    EA=1;          //开总中断

    ET0=1;        //允许中断    

    TR0=1;          //开中断0          

    TH0=0x4c;

    TL0=0x00;

    while(1)

    {    

            du = 1;

            P0 = 0;

            du = 0;


            we = 1;

            P0 = 0x3e;

            we = 0;

            

            du = 1;

            P0 = table[s];      //十位

            du = 0;

                

            delay(10);


            du = 1;

            P0 = 0;

            du = 0;


            we = 1;

            P0 = 0x3d;

            we = 0;

            

            

            du = 1;

            P0 = table[g];         //个位

            du = 0;

            delay(10);


            du = 1;

            P0 = 0;

            du = 0;


            we = 1;

            P0 = 0x1f; //显示分钟

            we = 0;

            

            du = 1;

            P0 = table[m];

            du = 0;

                

            delay(10);


            du = 1;

            P0 = 0;

            du = 0;


            we = 1;

            P0 = 0x2f;

            we = 0;

            

            du = 1;

            P0 = table[h];       

            du = 0;

                

            delay(10);

        

        if(aa == 20)    

        {            

            aa = 0;

            if(num == 59)

            {

                num = 0;

                f++;

            }

            else

                num++;

            s = num/10;

            g = num%10;

            m = f%10;

            h = f/10;                

        }

        if(h == 6)

        f = 0;

    }

}

void timer0() interrupt 1 //内部中断0

{

    TH0=0x4c;

    TL0=0x00;

    aa++;

}

void delay(uchar x)

{

    uchar y,z;

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

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

}

推荐阅读

史海拾趣

Deutron Electronics Corp公司的发展小趣事

随着环保意识的日益提高,Deutron Electronics Corp也积极响应环保号召,致力于实现绿色生产和可持续发展。公司采用环保材料和生产工艺,减少了对环境的污染。同时,公司还加大了对节能减排的投入,提高了资源利用效率。这些努力使得Deutron Electronics Corp在行业内树立了良好的环保形象,也为公司的长期发展奠定了坚实基础。

Broadband公司的发展小趣事

在技术优势的基础上,Deutron Electronics Corp开始了积极的市场拓展和品牌建设工作。公司参加了多个国际电子展会,展示了其创新产品和技术实力,成功吸引了众多潜在客户的关注。同时,公司还加大了对品牌宣传的投入,通过广告、公关等手段提升了品牌知名度和美誉度。这些努力使得Deutron Electronics Corp的产品逐渐在市场上占据了一席之地。

Fractus公司的发展小趣事

为了加速技术的商业化进程,Fractus积极寻求与全球领先企业的合作。自2000年以来,公司陆续与多家知名手机厂商、电信运营商以及设备制造商建立了战略合作关系。这些合作不仅为Fractus带来了稳定的收入来源,也促进了其技术的广泛应用和持续改进。同时,Fractus还通过签订全球许可协议和建立战略伙伴关系,进一步拓展了其业务范围和市场影响力。

Global Power Technology Co., Ltd公司的发展小趣事
冰箱显示屏不亮、按键无反应等。
Baneasa SA公司的发展小趣事

Baneasa SA公司成立之初,便专注于电子元器件的研发与生产。公司凭借创始团队的技术积累和市场洞察力,成功开发出一款高性能的半导体芯片,迅速在行业内崭露头角。这款芯片以其出色的稳定性和可靠性赢得了市场的广泛认可,为Baneasa SA的发展奠定了坚实的基础。

ECI公司的发展小趣事

ECI公司深知人才是企业发展的关键因素。因此,公司高度重视人才的引进、培养和激励。公司建立了完善的人才选拔机制,选拔具有潜力和才华的员工进行重点培养。同时,公司还提供了丰富的培训和发展机会,帮助员工提升自身素质和能力。此外,ECI还建立了科学合理的薪酬制度和激励机制,让员工在为公司创造价值的同时也能获得相应的回报。这种对人才的重视和投入让ECI公司汇聚了一批优秀的员工队伍,为公司的发展提供了有力的保障。

问答坊 | AI 解惑

功放电路分享

本帖最后由 paulhyde 于 2014-9-15 09:28 编辑 大家看看a啊 呵呵 分享下  …

查看全部问答>

运放的温飘温飘

前级输入为4-20mA电流信号,在200偶的电阻上形成取样电压,R224后面就到AD了。 除R237电阻外,其余电阻均为1%,50PPM的电阻,加温到60度左右,AD变化非常大,大概有0.5%的变化,如何才能降低温漂?失调电流,失调电压,偏置电压如何补偿? 参考的 ...…

查看全部问答>

射频通信!nRF2401和nRF24L01功率调节无效过

大家好,遇到点问题,有点困惑,想在这上面看看有没有同志遇到类似问题。 最近设计的两款射频通信板,采用的射频芯片是nRF2401和nRF24L01,但是设置此两个芯片的发射功率时,发现基本上没有什么效果,通信距离基本都保持比较远的距离,很难将距离 ...…

查看全部问答>

无线传感器网络LEACH

      无线传感器网络中用LEACH协议进行分簇后,簇内想采用局部的TDMA机制,这样的话,相邻的各个簇之间会产生干扰。目前考虑到了两种解决方法:       一种是采用采用直接序列扩频技术,即各个簇采用不 ...…

查看全部问答>

嵌入式操作系统

现有一款简单开发板,cpu为ARM系列的S3C2410,板上有boot flash、SDRAM、串口、Intel 82559 PCI 网卡,其所需硬件设备驱动程序均已放在BSP相应目录下,请为这款开发板搭建一个完整的VxWorks交叉开发环境(包括使用到的软硬件设备、连接方式、启动代 ...…

查看全部问答>

学习arm,该看什么书呢?

搞wince驱动,想掌握下arm的体系结构,该看什么样的书呢,…

查看全部问答>

实时时钟M62X42B的计时过快问题

请问M62X42B计时过快过快是什么问题,我读M62X42B的寄存器的值,变换很快,理论上应该是1s变化一次,而我写的程序基本上都是小时级别的递增?请问高手,一般出现这种情况都什么什么原因引起的。…

查看全部问答>

流明学习笔记之三LM3S8962开发板的安装

有人会问这个简单,我看未必,有些心得我还是写出以免走弯路     这套开发板老好了,   大板是LM3S8962,且可以外接ULINK,JLINK调式. 小板是LM3S2110,且可以外接ULINK,JLINK调式 小板通过10针线跟大板连接,评估CAN总线时用 那 ...…

查看全部问答>

TI采用 MSP430 的带双电平输出的 3.6V 至 5.5V 输入LDO 参考设计

此参考实际旨在给输入电压范围为3.6V至5.5VMSP430器件及带有双电平输出LDO供电。…

查看全部问答>