历史上的今天
返回首页

历史上的今天

今天是:2024年09月21日(星期六)

2020年09月21日 | 单片机4位数字时钟仿真程序(定时器方式2, 按键连加)

2020-09-21 来源:51hei

学习单片机动态数码管显示,数字时钟是最好的案例,本仿真案例有以下特点。        
1.使用定时器0,方式2,可以减小定时器的误差;
2.调时、调分按键具有连加功能,与常见的按键松手检测有区别;
3.具有秒点显示功能,若制作实物案例,可购买带秒点的数码管。


参考程序:
#include
#define uint unsigned int
#define uchar unsigned char

sbit w1=P2^2;
sbit w2=P2^3;
sbit w3=P2^4;
sbit w4=P2^5;
sbit s1=P1^3;
sbit s2=P1^4;
sbit s3=P1^5;

uint shi,fen,sec;
uint num,s1num,keynum;
uchar m;
void delay(uint);
void keyscan();
void time_adj();
uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00}; //共阴代码

void display()                //数码管显示
{
           w1=1;w2=1;w3=1;w4=1;
      P0=~tab[shi/10%10];
          if((s1num==2)|(shi/10%10==0)){w1=1;}
          else{w1=0;}
          delay(5);
          w1=1;
         
          if(num<2000)
           {P0=~(tab[shi%10]|0x80);        }  //秒点显示
          else
           {P0=~tab[shi%10];}
           if(s1num==2){w2=1;}
          else{w2=0;}
          delay(5);
          w2=1;
         
          P0=~tab[fen/10%10];
          if(s1num==1){w3=1;}
          else{w3=0;}
          delay(5);
          w3=1;
           
          P0=~tab[fen%10];
          if(s1num==1){w4=1;}
          else{w4=0;}
          delay(5);
          w4=1;         
}

void keyscan()               //功能键函数
{
   if(s1==0)
           {
             delay(5);                 //消抖
                 if(s1==0)
                   {
                     while(!s1)display();
                         s1num++;
                         if(s1num==3)
                           {
                             s1num=0;
                           }
                   }
           }
}

void time_adj()        //加、减键时间调整函数
{
   if(s1num!=0)
     {
           if(s2==0)
             {
                   keynum++;
                   if(keynum>18)        //连加延时
                   {
                   switch(s1num)
                             {
                                   case 1:
                                          shi++;
                                              if(shi>23)
                                                    {shi=0;}
                                                  keynum=0;
                                                  break;
                                          
                                   case 2:
                                          fen++;
                                                  if(fen>59)
                                                    {fen=0;}
                                                  keynum=0;
                                                  break;
                                 }
                         }
                 }
           if(s3==0)
             {
                   keynum++;
                   if(keynum>18)
                   {
                   switch(s1num)
                             {
                                   case 1:
                                          shi--;
                                              if(shi<0)
                                                    {shi=23;}
                                                  keynum=0;
                                                  break;
                                          
                                   case 2:
                                          fen--;
                                                  if(fen<0)
                                                    {fen=59;}
                                                  keynum=0;
                                                  break;
                                 }
                          }
                   }
        }
}

void main()
{
    shi=12;fen=0;sec=0;num=0;
    TMOD=0x02;
    TH0=0x06;
         TL0=0x06;
    EA=1;
    ET0=1;
    TR0=1;

   while(1)
   {
    keyscan();
        time_adj();
        display();

                        if(sec>59)
                        {
                                sec=0;
                                fen++;
                                if(fen>59)
                                {
                                        fen=0;
                                        shi++;
                                        if(shi>23)
                                        {
                                           shi=0;
                                        }
                                }
                                
                        }
                }
   }


void delay(uint xms)
{
   uint i,j;
   for(i=xms;i>0;i--)
      for(j=110;j>0;j--);
}

void Timer0() interrupt 1    //定时器服务
{
        num++;
        if(num==4000){num=0;sec++;}
        
}

推荐阅读

史海拾趣

永源微电子(APM)公司的发展小趣事

随着国内外市场的不断开拓和技术实力的不断提升,永源微电子开始实施全球化战略。公司积极寻求与国际知名企业的合作机会,通过技术引进和合资合作等方式,不断提升自身的国际化水平。同时,永源微电子还注重内部管理和人才培养,通过建立完善的管理体系和激励机制,吸引和留住了一批优秀的技术人才和管理人才。在全球化战略的推动下,永源微电子实现了持续稳健的发展,成为了电子行业中一颗璀璨的明星。

以上五个故事分别从不同角度描绘了永源微电子(APM)公司的发展历程,包括创立与初步发展、技术突破与产品线拓展、市场拓展与品牌建设、A轮融资与战略合作以及全球化战略与持续发展等方面。这些故事基于事实性的描述,展现了永源微电子在电子行业中的成长轨迹和发展成就。

Econais公司的发展小趣事

作为一家在电子行业有影响力的企业,Econais深知自己的社会责任。公司积极参与各种公益活动,并致力于推动可持续发展。Econais的产品在设计时就考虑到了环保因素,采用低功耗技术减少能源消耗,并选用环保材料降低对环境的影响。此外,Econais还通过技术创新帮助其他企业实现节能减排的目标。

以上五个故事概述了Econais在电子行业发展中的一些重要里程碑和关键事件。这些故事不仅展示了Econais的技术实力和市场竞争力,也体现了公司的社会责任感和可持续发展的理念。

全鹏(CHAMPION)公司的发展小趣事

随着全鹏在巴西市场的稳固地位,公司决定在2006年创立C3 TECH品牌,以进一步提升其品牌影响力。C3 TECH品牌的创立不仅增强了全鹏在巴西市场的竞争力,还为公司带来了更多的商机。通过精心策划的市场营销活动和优质的产品质量,C3 TECH品牌迅速获得了当地消费者的认可,并在市场上树立了良好的口碑。

Corning Cable Systems公司的发展小趣事

在追求经济效益的同时,Corning Cable Systems公司也积极履行社会责任,致力于推动绿色环保理念的实践。公司注重环保材料的选择和使用,并在生产过程中采取多项环保措施,以降低对环境的影响。此外,公司还积极推广绿色通信解决方案,为全球通信行业的可持续发展做出了积极贡献。

通过以上五个故事,我们可以看到Corning Cable Systems公司在电子行业中的发展历程和取得的成就。作为光纤通信领域的领军企业,公司凭借其创新技术、扩大生产规模、技术合作和绿色环保理念等方面的努力,不断推动着整个行业的进步和发展。

AK-Nord_GmbH公司的发展小趣事

为了确保产品质量和客户满意度,AK-Nord_GmbH投入大量资源建设质量管理体系。公司引入了国际先进的质量管理标准和流程,对产品的研发、生产、测试等各个环节进行严格把控。同时,公司还建立了完善的客户服务体系,及时响应客户需求和处理问题。这些举措有效提升了公司的产品质量和客户满意度,为公司赢得了良好的口碑。

力芯微(ETEK)公司的发展小趣事

力芯微公司在数字信号处理器领域拥有丰富的经验和深厚的技术积累,是行业内领先的企业之一。公司拥有一支高素质的研发团队,不断推进技术创新和产品升级。通过持续的研发投入和技术创新,力芯微在数字信号处理器领域保持了领先地位,并赢得了客户的广泛认可。

问答坊 | AI 解惑

上海交大:我国汽车电子产业发展的技术障碍与攻关战略

演讲主题:我国汽车电子产业发展的技术障碍与攻关战略 演讲嘉宾:上海交通大学 许敏 主要议题: 1、我国汽车电子的产业发展与研发现状 2、我国汽车电子产业发展的技术障碍 3、我国汽车电子产业发展的攻关战略 重点论述了我国汽车电子产 ...…

查看全部问答>

Magma设计方法解决65纳米设计复杂性

在65纳米节点,单个芯片中可容纳数亿规模的门电路。其高复杂性使层次化设计流程变得极为耗时,同时要达到良率要求也很困难。要想及时解决这些问题,高水平的IC自动化设计技术以及对流程中功耗、良率、片上变异(OCV)和多种模式的优化和分析等功能的 ...…

查看全部问答>

请问如何用单片机模拟SPI来访问SD卡阿????????

我网上看了很多程序,都不可以,像看看怎么样能模拟访问,…

查看全部问答>

刚才看一网友做的频率计有句代码不解

if(flag_1s==1) { tmp=T0count*65536+TH0*256+TL0 } 一秒计数的脉冲为何是tmp=T0count*65536+TH0*256+TL0,不是每次中断都T0count++?…

查看全部问答>

请教隔离电源品牌

请教前辈, 哪个牌子的隔离电源的可靠性高一点? 现在需要用一块小功率的隔离电源, 24Vin 5Vout.…

查看全部问答>

请问各位大侠,我需要一些用C实现的关于Wi-Fi数据传输的指导。请赐教。

我是新手 ,请大侠们赐教,使用Wi-Fi传输到底是个什么样的过程,怎么用C实现啊?比如说,我现在电脑上有一些视频文件,需要传输到另外一个电脑上,怎么用C实现?谢谢。…

查看全部问答>

请教USB host 的问题

我的开发板起来之后,我插入U盘,它会认出来harddisk。但如果我插入它开机,系统就不会认出来有U盘。 请问这该怎么处理啊?怎么让系统一起来就识别U盘? 另外一个问题,如果我开发代码,我该怎么判断u盘有没有插入?createfile(harddisk...)?还 ...…

查看全部问答>

倒车雷达系统的改进

倒车雷达,现在已普遍应用,但往往在探测范围上存在一定的盲区。由于雷达探头安装位置的关系,当车后方的障碍物过低、过高或角度超过探头侦测的范围时,倒车雷达便会失效。像一些人行道台阶,大石头等低矮的障碍物,或是一些很高的箱式货车等较高的 ...…

查看全部问答>

我很纠结啊!大家说说我怎么办呢。。。。

 纠结死了,举办的征文活动大家都很积极,参加的人很多啊!大家写的也很好啊,可是奖项是一定的,按照投票的话,大家都差不多,这个活动真的很好啊,今天还有热心的朋友发征文,现在我就在纠结啊!这个到底怎么选择呢?六个奖品到底给谁啊?太 ...…

查看全部问答>

【北京】需要一名的硬件底层研发工程师,专注信息安全!

岗位职责: 1. 电路原理图、PCB设计,固件程序开发 任职资格: 1、大学本科及以上学历,1年以上工作经验,电子/通讯等相关硬件专业毕业; 2、能熟练阅读英文资料,能承受压力,为人正直,踏实; 3、有团队合作经验,熟悉电子产品开发 ...…

查看全部问答>