历史上的今天
返回首页

历史上的今天

今天是:2025年04月16日(星期三)

正在发生

2020年04月16日 | 51单片机(计时器+时钟应用)

2020-04-16 来源:eefocus

Ps:

使用的是51单片机, 晶振为11.0592M的, 时间选择5ms。

这篇博客好像是第一篇单片机博客诶~。


算法:

简单的计时器应用, 最开始 根据 2^16 - (t - f)/12 计算得到值, 将其转换为16进制 (注意:单位的改变, 例如晶振要乘上 10e6 时间 要转换为秒s 乘上 10e-3)

由此可以得到 TH0/TL0的值。

例如:

设计的是5ms, 则 算式为 2^16 - (5 * 10^-3 - 11.0592 * 10^6) / 12; 转换为16进制 为DC00; 所以 TH0 = 0XDC __ TL0 = 0X00;


显示:

拆字什么的 就不说了~~, 反正就是 分和秒 对 10取余 和 整除。

下面函数中的 counter 和 second 分别对应 秒和分。


Hint:

老师说, 最好在 tmp=counter%4; 前 加上 if(changed == 1)执行拆字显示, 然后再将执行空语句 如此循环。 但还是不怎么明白为什么。 好像是说 保护 IO 之类的~~~~


#include

#define uchar unsigned char

uchar counter=0,tmp,second=0,minute=0, changed = 1;

main()

{   //TMOD=0X21;                            //设置TMOD寄存器

    TMOD=0X01;                          //设置TMOD寄存器

    TH0=0xDc;              //装初值

    TL0=0x00;


    //TH1=0XFD;

    //TL1=0;

    //TR1=1;

    //SCON=0X50;


    EA=1;       //开 中断

    ET0=1;

    TR0=1;

    while(1)

    {

         char a[10] = {0xc0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};

    //拆字


    //显示


    tmp=counter%4;

    switch(tmp)

    {

    case 0:{

                P2 = 0x7f;

                P0 = a[second%10];

            }

        break;

    case 1:{

                P2 = 0xbf;

                P0 = a[second/10];

            }

        break;

    case 2: {

                P2 = 0xdf;

                P0 = a[minute%10];

            }

        break;

    case 3: {

                P2 = 0xef;

                P0 = a[minute/10];

            }

        break;


    }

    }




    /*

        if(j==2)

        {

            j=0;

            P2=~P2;


        } 

    */


}

void zhongduan()interrupt 1

{

    TH0=0xee;              //装初值

    TL0=0x00;

    TF0=0;

    TR0=1;


    /*

    i++;

    if(i>=5)

    { 

        i=0;    

        //SBUF=j;

        //while(!TI);

        //TI=0;

        j++;

    }

    */

    counter++;

    if(counter==200)

    {

       counter=0;

       second++;

       if(second==60)

       {

          second=0;

          minute++;

       }

     }

}   

推荐阅读

史海拾趣

Dean Technology公司的发展小趣事

为了进一步扩大市场份额,Dean Technology公司开始积极拓展国际市场。他们通过设立海外办事处、与当地企业建立合作关系等方式,将产品推向全球。在这个过程中,公司不断优化产品设计,提高生产效率,以满足不同国家和地区客户的需求。随着国际市场的不断拓展,Dean Technology的高压二极管产品逐渐在全球范围内获得了良好的口碑。

天钰(FITIPOWER)公司的发展小趣事

近年来,随着电子行业的快速发展和市场竞争的加剧,Dean Technology公司也面临着前所未有的挑战。为了应对这些挑战,公司积极调整战略方向,加强内部管理和团队建设。同时,他们还密切关注行业趋势和市场需求的变化,及时调整产品结构和市场策略。这些努力使得Dean Technology在应对行业变革和挑战时更加从容和自信。

请注意,以上故事是基于对Dean Technology公司一般情况的了解而编写的,可能不完全符合公司的实际发展历程。如需更详细的信息,请查阅相关资料或联系公司官方渠道。

Electroswitch公司的发展小趣事

Electroswitch Electronics Products(以下简称“Electroswitch”)成立于1986年,是Electro Switch Corp的一个子公司,后者早在1946年就已创立。在创立之初,Electroswitch就致力于设计和制造高品质的开关产品,以满足电子应用领域的各种需求。通过不断的技术创新和产品优化,Electroswitch逐渐在电子行业中树立了良好的声誉。

ANYSOLAR LTD.公司的发展小趣事

ANYSOLAR始终关注企业的社会责任和可持续发展。在生产过程中,公司严格遵守环保法规,采用先进的环保技术和设备,确保生产过程中的废弃物排放达到国家标准。同时,公司还积极参与社会公益活动,捐赠光伏产品支持贫困地区的能源建设。

此外,ANYSOLAR还致力于推动清洁能源的普及和应用,通过技术研发和市场推广等方式,降低清洁能源的使用成本,提高其在能源结构中的占比。这些举措不仅体现了ANYSOLAR的社会责任感,也为公司的可持续发展奠定了坚实的基础。

以上便是关于ANYSOLAR LTD.的五个发展故事。虽然这些故事是虚构的,但它们基于电子行业的常见趋势和企业发展的普遍规律,旨在展示一个企业在发展过程中可能面临的挑战和机遇。希望这些故事能够为您提供一些启发和参考。

协顺电子(Finecables)公司的发展小趣事

在品质和创新的支撑下,协顺电子开始积极拓展市场。公司通过参加各类展会、举办技术交流会等方式加强与客户的沟通和交流,同时也不断完善自己的销售网络和售后服务体系。此外,协顺电子还注重品牌建设,通过广告宣传、公关活动等方式提升品牌知名度和美誉度。这些努力使得公司的市场份额不断扩大,品牌影响力也逐渐增强。

Conditioning Semiconductor Devices Corp公司的发展小趣事

CSDC深知人才是企业发展的核心。因此,公司一直注重人才的引进和培养。通过校园招聘、社会招聘等多种渠道,CSDC吸引了一批优秀的半导体专业人才。同时,公司还建立了完善的培训体系,为员工提供持续的学习和发展机会。这些举措不仅提升了员工的技能水平,也增强了公司的凝聚力和竞争力。

问答坊 | AI 解惑

紧急求教一个电路 很茫然

我只知道是三轴位置传感器接口电路 也不知道是不是 高手来讲解一下哈 谢谢…

查看全部问答>

触摸屏驱动采样请教

DdsiTouchPanelGetPoint(         TOUCH_PANEL_SAMPLE_FLAGS        *pTipStateFlags,         INT                      ...…

查看全部问答>

求助:CodeWarrior for ADS 1.2中编译出错

工程中,用ADS编译,出现了Errors: Could not find or load the file 襐IC.a?for target 褼ebugRel?for project 襱est1.mcp? Could not find or load the file 褻omm.a?for target 褼ebugRel?for project 襱est1.mcp? The following access p ...…

查看全部问答>

请问下PCI PCIE在配置空间的区别

如何通过读取判断机器是PCIE为还是PCI呢???…

查看全部问答>

MSP430F435学习板 超低价格出售 仅售100元

请登陆淘宝进行详细的细节查询 淘宝地址:      http://auction1.taobao.com/auction/0/item_detail-0db2-a975eaf6e989403d6987eeb2fde3c9d9.jhtml    欢迎购买. …

查看全部问答>

跪求 :用VB.Net 在Wince 平台下画一个点

小弟刚入道,就遇到棘手的问题,希望大家帮忙啊,谢谢! 问题如下 在Wince下 我在Form1中添加了一个PictureBox1,想在上面画个点,或者圆 结果发现连Paint()函数都没 ,郁闷;还有 CreatGraphic函数也没,该怎么办啊? 使用VB.net2005 谁能发个 ...…

查看全部问答>

实用型应急灯

    [ 本帖最后由 ddllxxrr 于 2010-8-24 10:49 编辑 ]…

查看全部问答>

《匠人手记》之新手三忌

1.第一忌 自己不动脑筋,一遇到问题就问别人有句话说的好“吃别人咀嚼过的馍不香”。对于新手来说,做每一件事都是一次学习的好机会。有时候,探索的过程比最终的结果更重要。当你经过自己的努力,解决问题时,成就感和自信心会随之逐渐建立。如果 ...…

查看全部问答>

wanghongyang我还惦记着那个3.5液晶

不知道准备的怎么样了?准备随时出手了:D…

查看全部问答>

今早用altium designer6.9画原理图时突然出现了这么一个问题··不得其解啊

就是我放置导线时··本来把我想要连接上的两个引脚端连上就可以了··可是呢··导线的终点却与多个引脚连到一起了··自动产生了很多我不想要连接上的节点··这是怎么回事呢?之前放导线的时候貌似没出现这情况··…

查看全部问答>