单片机数码管电子钟(C语言)

发布者:BlossomBeauty最新更新时间:2016-10-20 来源: eefocus关键字:单片机  数码管  电子钟 手机看文章 扫描二维码
随时随地手机看文章
//***********************************

// 软件名:   LED数码 电子钟
//***********************************
//
// 软件版本:V1.0.3
//
//
//***********************************

#include
#include
#define uchar unsigned char


void delay (void);
start_time ();
key_adjust ();
void alarm (void);
time_end (void);
// k1调秒 k2调分 K3调时
sbit k0=P1^0; // 电子时钟 START/STOP 键
sbit k1=P1^1; //调时
sbit k2=P1^2;  //调分
sbit k3=P1^3;  //调秒
sbit beep=P2^1;  //蜂鸣器
bit on_off;

uchar code LOAD[8]={0xff,0xff,0xc7,0xc0,0x88,0xa1,0xff,0xff};//显示LOAD字样数据
uchar code LED_DATA[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0~9数字数据
uchar data DATA_TEMP[8]; //显示缓存区
uchar data digit; //移位变量(动态扫描时选通)
static uchar data t,k,i;
static char data sec,min,hour;
int f,h,j;
char d;

main ()
{    

 TMOD=0X01;  //定时器0
 ET0=1;   //开定时器0中断
 EA=1;   //开总中断
 TH0=0XFC; //定时器0 定时1ms
 TL0=0X18;
 TR0=1;    //启动定时器
 RCAP2H=0X3C; //定时器2 定时50ms
 RCAP2L=0XAD;
 ET2=1;
 digit=0xfe;
 P3=0XFF;  //关闭显示
 d=0;
 on_off=1;

//***************开机显示 LOAD *************
while (d<8)
{
  DATA_TEMP[d]=LOAD[d];
  d++;
}
for (h=600;h>0;h--)   //开机后显示LOAD延时
 {
   for (j=500;j>0;j--);
 }

TR2=1;//开始倒时时
//*****************************************
 
 //******对时钟进行初始化赋值*******
 hour=12;   
 min=0;
 sec=0;
 //********时间:00-00-00 *****************
 
 start_time ();  //调用调时间函数,使之对时钟进行初始化赋值
 DATA_TEMP[2]=0XBF;  //使之LED显示格式为xx-xx-xx
 DATA_TEMP[5]=0XBF;
 
 while (1) // 总循环
  {
   key_adjust ();
    //*********************时钟走时部分******************
  if (k0==0) 
   {
   delay ();
    while (k0==0);//等待按键释放
     on_off=~on_off; //做标记,用于判断K0键状态(是继续还是暂停计数器)
  if (on_off==0) TR2=0;
    else TR2=1;
  }
 while (t==20) //到1 秒了吗?
  {
  t=0;
  sec++;
  
  if (sec>59)  //到1 分钟了吗?
    {
      sec=0;
   min++;
   
   if (min>59)  //到1 小时了吗?
   {
   min=0;
   hour++;
   
     if (hour>23) hour=0;
      
   DATA_TEMP[1]=LED_DATA[hour%10];
                   if (LED_DATA[hour%10]==0) DATA_TEMP[1]=0xFF;   
    DATA_TEMP[0]=LED_DATA[hour/10];
   }

  DATA_TEMP[4]=LED_DATA[min%10];
                  if (LED_DATA[min%10]==0) DATA_TEMP[1]=0xFF;
   DATA_TEMP[3]=LED_DATA[min/10];
    }

 DATA_TEMP[7]=LED_DATA[sec%10];
         if (LED_DATA[sec%10]==0) DATA_TEMP[1]=0XFF;
  DATA_TEMP[6]=LED_DATA[sec/10]; 
   }
    while ((hour==8)&&(min==0)&&(sec==0))  //设置闹钟
   {
   time_end();
    }
  }
//**************************************************
  
}

void displayscanf (void) interrupt 1  //定时器0中断服务程序,用于数码管动态显示扫描
{    
  
  TH0=0XFC;
  TL0=0X18;
     P0=DATA_TEMP[i];
  i++;
  P3=digit;
  digit=_crol_(digit,1);  //动态显示时,依次选通数码管
  if (i>7)   //扫描完一圈后,回到第一位,准备下一次扫描
    {
      i=0;
   digit=0xfe;
    }
}

void timer_server (void) interrupt 5     //时钟走时定时
{

  TF2=0;
  t++;

}

start_time ()    //对时间初始化赋值,并更新DATA_TEMP数组里的数据
{
 DATA_TEMP[1]=LED_DATA[hour%10];   
 DATA_TEMP[0]=LED_DATA[hour/10];
 DATA_TEMP[4]=LED_DATA[min%10];
    DATA_TEMP[3]=LED_DATA[min/10];
   DATA_TEMP[7]=LED_DATA[sec%10];
   DATA_TEMP[6]=LED_DATA[sec/10];
}

key_adjust()    //调时函数
{
  if (k1==0)   //调时
   { 
      ET2=0;
      delay ();
   if (k1==0)
    {
      hour++;
   if (hour>23) hour=0;
   while (k1!=1); //等待按键释放,使每按一次,小时自动+1
    delay ();
    ET2=1; 
   start_time ();
     
    }
   }

   if (k2==0)    //调分
   { 
      ET2=0;
      delay ();
   if (k2==0)
    {
      min++;
   if (min>59) min=0;
   while (k2!=1); //等待按键释放,使每按一次,分钟自动+1
    delay ();
     ET2=1;
   start_time ();
      
    }
   }

   if (k3==0)   //调秒
   { 
      ET2=0;
      delay ();
   if (k3==0)
    {
      sec++;
   if (sec>59) sec=0;
   while (k3!=1);  //等待按键释放,使每按一次,秒数自动+1
    delay ();
    ET2=1; 
   start_time ();
      
    }
   }
}


void delay (void)   //延时,防止键抖动
{
 unsigned char data x,y;
 
 for (x=0;x<=30;x++)
  {
     for (y=0;y<=130;y++)
   {}
  }
  
}

void alarm (void)   //报警函数
{
   for (f=0;f<=3000;f++);
     beep=~beep;
 
 }

time_end (void)   //判断计时器是倒数是否数完(为0),如果是则停止计时,并报警
{
  
   
   alarm();
 
}

关键字:单片机  数码管  电子钟 引用地址:单片机数码管电子钟(C语言)

上一篇:1602液晶最新驱动程序
下一篇:数码管滚动显示数字...(C程序)

推荐阅读最新更新时间:2024-03-16 15:16

MCS-51单片机片内RAM的空间分配
简述MCS-51单片机片内RAM的空间分配。内部RAM低128字节分为哪几个主要部分?各部分主要功能是什么? 片内数据存储器按照寻址方式,可以分为三个部分:低128字节数据区,高128字节数据区间,特殊功能寄存器区。低128字节数据区分为三个区域:工作寄存器区,位寻找区和通用数据区。工作寄存器区4组工作寄存器;位寻找区既可以做位操作,也可以字节操作;通用数据区用于堆栈和存放程序运行时的数据和中间结果。
[单片机]
AVR单片机用于车载空调控制器的实用电路
简介:汽车空调控制系统框图如图1所示。系统由按键扫描、电压检测、温度检测、风机控制、压缩机控制、LED数码管显示、蜂鸣器报警电路和单片机组成。 汽车空调控制系统框图如图1所示。系统由按键扫描、电压检测、温度检测、风机控制、压缩机控制、LED数码管显示、蜂鸣器报警电路和单片机组成。 图1 汽车空调控制系统框图 单片机工作的主要原理为:扫描键盘,当制冷键按下,同时无故障报警时系统将ADC采样的车内温度与预先设定的制冷温度比较,如车内温度高于设定温度则打开冷凝风机、压缩机制冷;当车内温度低于设定温度2℃时关闭压缩机、冷凝风机,若此时强制冷键按下,系统将忽略预设温度直接启动制冷。其中单片机PB0、PB1口输出高低信号控制MOS
[单片机]
AVR<font color='red'>单片机</font>用于车载空调控制器的实用电路
德州仪器推出首款量产超低功耗双频无线MCU
2016年9月13日,北京讯 为了扩展物联网(IoT)的功能性,德州仪器(TI)今日宣布推出业界功耗最低的双频无线微控制器(MCU),这款已量产的MCU可以在单芯片上支持Sub-1 GHz和Bluetooth 低功耗连通性。作为TI引脚和软件兼容的SimpleLink 超低功耗平台的一员,这款全新的SimpleLink双频CC1350无线MCU能够帮助开发人员利用一个微型单芯片取代以往的三芯片解决方案,同时降低设计的复杂度、节省功耗、成本和电路板空间。CC1350无线MCU在由一颗纽扣电池供电的情况下能够覆盖高达20km的范围,满足了楼宇和工厂自动化、警报和安防、智能电网、资产跟踪和无线传感器网络等应用的需求。 针对低功耗
[物联网]
基于51单片机实现无源蜂鸣器控制
前言 前篇教程我们已经介绍了如何控制51 单片机的IO 口输出高低电平,本章我们通过另外一个实验来讲述51单片机IO口的输出。通过单片机的一个IO口控制板载无源蜂鸣器,实现蜂鸣器控制。学习可以参考前面LED实验教程内容。 一、蜂鸣器介绍 蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。 压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。多谐振荡器由晶体管或集成电路构成,当接通电源后(1.5~15V 直流工作电压),多谐振荡器起振,输出1.5~
[单片机]
基于51<font color='red'>单片机</font>实现无源蜂鸣器控制
基于AT89C51单片机设计的简易智能机器人的设计
简介:随着微电子技术的不断发展,微处理器芯片的集成程度越来越高,单片机已可以在一块芯片上同时集成CPU、存储器、定时器/计数器、并行和串行接口、看门狗、前置放大器、A/D转换器、D/A转换器等多种电路,这就很容易将计算机技术与测量控制技术结合,组成智能化测量控制系统。这种技术促使机器人技术也有了突飞猛进的发展,目前人们已经完全可以设计并制造出具有某些特殊功能的简易智能机器人。 1 设计思想与总体方案 1.1 简易智能机器人的设计思想 本机器人能在任意区域内沿引导线行走,自动绕障,在有光源引导的条件下能沿光源行走。同时,能检测埋在地下的金属片,发出声光指示信息,并能实时存储、显示检测到的断点数目以及各断点至起跑线间的距离
[单片机]
基于AT89C51<font color='red'>单片机</font>设计的简易智能机器人的设计
在P87LPC764单片机I2C总线系统中扩展LCD显示器
1 引言    I2C总线是Philips公司推出的芯片间串行传输总线。它仅用串行数据线(SDA)和串行时钟线(SCL)两根连线便实现了完善的全双工同步数据传送,并可很方便地构成多机系统和外围器件扩展系统。    本文介绍在P87LPC764单片机中利用I2C总线系统中典型的LCD驱动控制器件PCF8577C来扩展256段静态LCD的电路设计方法。 2 硬件电路设计 2.1 P87LPC764单片机的I2C总线接口    P87LPC764是Philips公司生产的一种小封装、低成本、高性能的单片机(具体内容见参考文献2)。它采用80C51加速处理器结构,片内带有支持I2C总线的硬件接口。当激活I2C总线时,P87L
[应用]
单片机程序设计当中的“分层屏蔽”思想原理和应用
分层的思想,并不是什么神秘的东西,事实上很多做项目的工程师本身自己也会在用。看了不少帖子都发现没有提及这个东西,然而分层结构确是很有用的东西,参透后会有一种恍然大悟的感觉。如果说我不懂LCD怎么驱动,那好办,看一下datasheet,参考一下别人的程序,很快就可以做出来。但是如果不懂程序设计的思想的话,会给你做项目的过程中带来很多很多的困惑。 参考了市面上各种各样的嵌入式书籍,MCS-51,AVR,ARM等都有看过,但是没有发现有哪本是介绍设计思想的,就算有也是凤毛麟角。写程序不难,但是程序怎么样才能写的好,写的快,那是需要点经验积累的。结构化模块化的程序设计的思想,使最基本的要求。然而这么将这个抽象的概念运用到工程实践当中
[单片机]
利用CY7C68013单片机实现全数字图像的实时采集
引言 传统的方法是用视频采集卡(如1394)对视频信号进行采集,利用相应的软件传给PC机,既不方便,也不经济。本文介绍一种利用Cypress公司2002年发布的世界上第一块带 有USB2.0接口的芯片CY7C68013与PC机(主板为支持USB2.0的华硕主板PB533)实现了高分辨率(640×480点阵以上)、快速(24帧/s以上)、全数字图像的实时采集系统。 1 数字图像的实时采集原理   数字图像的实时采集原理如图1所示。在图1中,以Omnivision technologies公司的OV7620/7120芯片作为图像采集芯片,其主要特点是该芯片可提供0.5~30帧/s,640×480像素点阵CMOS的彩色
[单片机]
利用CY7C68013<font color='red'>单片机</font>实现全数字图像的实时采集
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved