51单片机做的数码管电子日历

发布者:技术旅人最新更新时间:2015-06-25 来源: 51hei关键字:51单片机  数码管  电子日历 手机看文章 扫描二维码
随时随地手机看文章



电路图及仿真文件下载:http://www.51hei.com/bbs/dpj-20404-1.html
下面是程序源码
#include
#define uchar unsigned char
#define uint unsigned int
sbit db=P2^7;
char i,sec,min,h,date,month,year,flag;
uchar j,k,m,n,o,p;
sbit dula=P2^0;
sbit wela1=P2^1;
sbit wela2=P2^2;
sbit key_ch=P3^5;
sbit key_add=P3^6;
sbit key_minus=P3^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void init();
void delay(uint);
void second_display();
void minute_display();
void hour_display();
void date_display();
void month_display();
void year_display();
void control();
void time();
void main()
{
 init();
 while(1)
 {
  second_display();
  minute_display();
  hour_display();
  date_display();
  month_display();
  year_display();
  control();
 }
}
void init()
{
 db=0;
 i=0;
 sec=0;
 min=0;
 h=0;
 date=1;
 month=1;
 year=1;
 flag=0;
 wela1=0;
 wela2=0;
 EA=1;
 ET0=1;
 TMOD=0x01;
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 TR0=1;
}
void delay(uint z)
{
 uint x,y;
 for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}
void second_display()
{
 int sec_shi,sec_ge;
 sec_shi=sec/10;
 sec_ge=sec%10;

 if(flag==1&&j!=1)
  j++; 
 else
 {
  j=0;
  dula=1;
  P0=~table[sec_ge];
  dula=0;
  wela1=1;
  P1=0x00;
  wela1=0;
  wela2=1;
  P1=0x20;
  wela2=0;
  delay(1);
  dula=1;
  P0=0xff;
  dula=0;
  
  dula=1;
  P0=~table[sec_shi];
  dula=0;
  wela1=1;
  P1=0x00;
  wela1=0; 
  wela2=1;
  P1=0x10;
  wela2=0;
  delay(1);
  dula=1;
  P0=0xff;
  dula=0; 
 }
}
void minute_display()
{
 int min_shi,min_ge;
 min_shi=min/10;
 min_ge=min%10;
 
 if(flag==2&&k!=1)
  k++; 
 else
 {
  k=0;
  dula=1;
  P0=~table[min_ge];
  dula=0;
  wela1=1;
  P1=0x00;
  wela1=0;
  wela2=1;
  P1=0x08;
  wela2=0;
  delay(1);
  dula=1;
  P0=0xff;
  dula=0;
  
  dula=1;
  P0=~table[min_shi];
  dula=0;
  wela1=1;
  P1=0x00;
  wela1=0;
  wela2=1;
  P1=0x04;
  wela2=0;
  delay(1);
  dula=1;
  P0=0xff;
  dula=0; 
 }
}
void hour_display()
{
 int h_shi,h_ge;
 h_shi=h/10;
 h_ge=h%10;
 
 if(flag==3&&m!=1)
  m++; 
 else
 {
  m=0;
  dula=1;
  P0=~table[h_ge];
  dula=0;
  wela1=1;
  P1=0x00;
  wela1=0;
  wela2=1;
  P1=0x02;
  wela2=0;
  delay(1);
  dula=1;
  P0=0xff;
  dula=0;
  delay(1);
  
  dula=1;
  P0=~table[h_shi];
  dula=0;
  wela1=1;
  P1=0x00;
  wela1=1;
  P1=0x00;
  wela1=0;
  wela2=1;
  P1=0x01;
  wela2=0;
  delay(1);
  dula=1;
  P0=0xff;
  dula=0;
  wela2=0;
  delay(1);
 }
  
}
void date_display()
{
 int date_shi,date_ge;
 date_shi=date/10;
 date_ge=date%10;

 if(flag==4&&n!=1)
  n++; 
 else
 {
  n=0;
  dula=1;
  P0=~table[date_ge];
  dula=0;
  wela2=1;
  P1=0x00;
  wela2=0;
  wela1=1;
  P1=0x80;
  wela1=0;
  delay(1);
  dula=1;
  P0=0xff;
  dula=0;
  
  dula=1;
  P0=~table[date_shi];
  dula=0;
  wela2=1;
  P1=0x00;
  wela2=0;
  wela1=1;
  P1=0x40;
  wela1=0;
  delay(1);
  dula=1;
  P0=0xff;
  dula=0; 
 }
}
void month_display()
{
 int month_shi,month_ge;
 month_shi=month/10;
 month_ge=month%10;

 if(flag==5&&o!=1)
  o++; 
 else
 {
  o=0;
  dula=1;
  P0=~table[month_ge];
  dula=0;
  wela2=1;
  P1=0x00;
  wela2=0;
  wela1=1;
  P1=0x20;
  wela1=0;
  delay(1);
  dula=1;
  P0=0xff;
  dula=0;
  
  dula=1;
  P0=~table[month_shi];
  dula=0;
  wela2=1;
  P1=0x00;
  wela2=0;
  wela1=1;
  P1=0x10;
  wela1=0;
  delay(1);
  dula=1;
  P0=0xff;
  dula=0; 
 }
}[page]
void year_display()
{
 int year_qian,year_bai,year_shi,year_ge;
 year_qian=year/1000;
 year_bai=year%1000/100;
 year_shi=year%1000%100/10;
 year_ge=year%10;

 if(flag==6&&p!=1)
  p++; 
 else
 {
  p=0;
  dula=1;
  P0=~table[year_ge];
  dula=0;
  wela2=1;
  P1=0x00;
  wela2=0;
  wela1=1;
  P1=0x08;
  wela1=0;
  delay(1);
  dula=1;
  P0=0xff;
  dula=0;
  
  dula=1;
  P0=~table[year_shi];
  dula=0;
  wela2=1;
  P1=0x00;
  wela2=0;
  wela1=1;
  P1=0x04;
  wela1=0;
  delay(1);
  dula=1;
  P0=0xff;
  dula=0; 
 
  dula=1;
  P0=~table[year_bai];
  dula=0;
  wela2=1;
  P1=0x00;
  wela2=0;
  wela1=1;
  P1=0x02;
  wela1=0;
  delay(1);
  dula=1;
  P0=0xff;
  dula=0;
 
  dula=1;
  P0=~table[2];
  dula=0;
  wela2=1;
  P1=0x00;
  wela2=0;
  wela1=1;
  P1=0x01;
  wela1=0;
  delay(1);
  dula=1;
  P0=0xff;
  dula=0;
  wela1=0;
 }
}
void control()
{
 if(!key_ch)
 {
  delay(5);
  if(!key_ch)
  {
   flag++;
   if(flag==7)
    flag=0;
  }
 }
 while(!key_ch);
 if(flag==1&&key_add==0)
 {
  while(!key_add);
  sec++;
  if(sec==60)
   sec=0;
 }
 if(flag==1&&key_minus==0)
 {
  while(!key_minus);
  sec--;
  if(sec==-1)
   sec=59;
 }

 if(flag==2&&key_add==0)
 {
  while(!key_add);
  min++;
  if(min==60)
   min=0;
 }
 if(flag==2&&key_minus==0)
 {
  while(!key_minus);
   min--;
  if(min==-1)
   min=59;
 }

 if(flag==3&&key_add==0)
 {
  while(!key_add);
  h++;
  if(h==24)
   h=0;
 }
 if(flag==3&&key_minus==0)
 {
  while(!key_minus);
  h--;
  if(h==-1)
   h=23;
 }

 if(flag==4&&key_add==0)
 {
  while(!key_add);
  date++;
  if(date==29)
   if((year%4!=0)&&(month==2))
    date=1;
  if(date==30)
   if((year%4==0)&&(month==2))
    date=1;
  if(date==31)
   if((month==4)||(month==6)||(month==9)||(month==11))
    date=1;
  if(date==32)
   if((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10)||(month==12))
    date=1;  
 }

 if(flag==5&&key_add==0)
 {
  while(!key_add);
  month++;
  if(month==13)
   month=1;
 }
 if(flag==5&&key_minus==0)
 {
  while(!key_minus);
  month--;
  if(month==0)
   month=12;
 }

 if(flag==6&&key_add==0)
 {
  while(!key_add);
  year++;
  if(year==99)
   year=1;
 }
 if(flag==6&&key_minus==0)
 {
  while(!key_minus);
  year--;
  if(year==0)
   year=99;
 } 
}

void T0_rpt() interrupt 1
{
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 i++;
 time();
}

void time()
{
 if(i==20)
 {
  i=0;
  sec++;
  if(sec==60)
  {
   sec=0;
   min++;
   if(min==60)
   {
    min=0;
    h++;
    if(h==24)
    {
     h=0;
     min=0;
     sec=0;
     date++;
     if(date==29)
      if((year%4!=0)&&(month==2))
      {
       date=1;
       month++;
       if(month==13)
       {
        month=1;
        year++;
       }
      }
     if(date==30)
      if((year%4==0)&&(month==2))
      {
       date=1;
       month++;
       if(month==13)
       {
        month=1;
        year++;
       }
      }
     if(date==31)
      if((month==4)||(month==6)||(month==9)||(month==11))
      {
       date=1;
       month++;
       if(month==13)
       {
        month=1;
        year++;
       }
      }
     if(date==32)
      if((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10)||(month==12))
      {
       date=1;
       month++;
       if(month==13)
       {
        month=1;
        year++;
       }
      }
    }
   }
  }
 } 
}

关键字:51单片机  数码管  电子日历 引用地址:51单片机做的数码管电子日历

上一篇:51单片机数码管显示的数字钟
下一篇:ds1302带闹钟功能的单片机控制的时钟程序

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

51单片机之232串口实现
任务要求 Fosc为6MHz,定时器T1为工作模式2,串口工作模式1,波特率为4800。 1、通过波特率计算定时器T1时间常数初值。 2、编写甲机发送程序,工作于查询或者中断方式,传送30H——3FH中的十六个字节。 3、编写乙机接收程序,接受十六字节数据放在40H——4FH中。 发送机(甲机) /***************************************************** *任务要求 *Fosc为6MHz,定时器T1为工作模式2,串口工作模式1,波特率为4800。 *1、通过波特率计算定时器T1时间常数初值。 *2、编写甲机发送程序,工作于查询或者中断方式,传送30H——3FH中的十六个字节。
[单片机]
51单片机+1602+DS18B20的温度报警程序
51单片机做的温度显示,温度显示在LCD1602液晶屏上。 然后按键可以调整温度阈值,温度高于或低于所设温度,蜂鸣器就会响…… 单片机源程序如下: /************************************************************************************** * 基于单片机的实时温度报警系统设计 * (1)DS18b20采集到的温度可以实时地在数码管或者在液晶上显示出来; (2)用三个独立键盘设置阀值,包括设置键,加键
[单片机]
<font color='red'>51单片机</font>+1602+DS18B20的温度报警程序
51单片机项目 模拟智能传送装置
/** * 项目名:模拟智能传送装置 * 文件名:main.h */ #ifndef _MAIN_H #define _MAIN_H typedef enum WorkingState { STOP, START, TRANSFER } eWorkingState_t; sbit RELAY = P0^4; sbit BUZZER = P0^6; void samplingPCF8591(); void tryToRecord(uint8_t digitalVal); void flowingLight(); void turnOffFlowingLight(); void controlBuzzer()
[单片机]
51单片机入门基础教程
第一节、基础知识 一、单片机概念 1、单片机:在一片集成电路芯片上集成微处理器(CPU)、存储器(ROM和RAM)、I/O接口电路,从而构成了单芯片微型计算机,即单片机(single chip Microcomputer)也叫微控制器(MCU)。 CPU( Central Processing Unit ):由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器; RAM( Random-Access Memory ):用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据; ROM (Read-Only Memory):用以存放程序、一些原始数据和表格; I/O(input/output)口:四个8位并
[单片机]
<font color='red'>51单片机</font>入门基础教程
基于51单片机数码管的万年历程序
可实现功能: 启动程序数码管按照××-××-××格式显示时分秒并走时 按下C1按钮后按照××-××-××格式显示年月日 按下C3调时模式按钮时分秒/年月日静止,指示灯亮起,进入调时模式 先按C2选位按钮再按下C0加一按钮,对应的位置改变 再次按下C3按钮退出调时模式,继续走时 #include reg51.h #define uChar unsigned char #define uInt unsigned int uChar a ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uChar b ={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,
[单片机]
51单片机 基于方式1的单工通信
本实验主要是U1通过串口线TXD端将流水灯控制码以方式1发送到单片机U2的RXD,U2再利用接受的控制码控制流水灯点亮其P1口的8个发光二极管 单片机U1发送端 首先建立建立一个文件夹send,之后建立工作send,再添加一个send.c源文件,代码如下 #include reg51.h unsigned char code Tab ={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; void Send(unsigned char dat) { SBUF=dat; while(TI==0) //若发送中断标志位没有置 1 ,就等待 {
[单片机]
基于51单片机和FPGA的简易数字存储示波器设计
l 引言   与传统模拟示波器相比.数字存储示波器不仅具有可存储波形、体积小、功耗低,使用方便等优点,而且还具有强大的信号实时处理分析功能。在电子测量领域,数字存储示波器正在逐渐取代模拟示波器。但目前我国使用高性能数字存储示波器主要依靠国外产品,而且价格昂贵。因此研究数字存储示波器具有重要价值。借于此,提出了一种简易数字存储示波器的设计方案,经测试,性能优良。 2 数字存储示波器基本工作原理   数字存储示波器与模拟示波器不同在于信号进入示波器后立刻通过高速A/D转换器将模拟信号前端快速采样,存储其数字化信号。并利用数字信号处理技术对所存储的数据进行实时快速处理,得到信号的波形及其参数,并由示波器显示,从而实现模拟示波器功能
[单片机]
基于<font color='red'>51单片机</font>和FPGA的简易数字存储示波器设计
51单片机笔记
对于C语言编写的单片机程序,寄存器的声明包含在头文件 reg52.h 中 特殊的声明: sfr——特殊功能寄存器的数据声明,声明一个8位的寄存器。 sfr16——16位特殊功能寄存器的数据声明。 sbit——特殊功能位声明,也就是声明某一个特殊功能寄存器中的某一位。 bit——位变量声明,当定义一个位变量时可以使用此符号。 单片机最小系统运行的必要条件: 电源,晶振(时钟电路),复位电路 发光二极管通过5mA左右的电流就会发光,一般工作电流控制在3mA~20mA之间,两端电压在1.7V左右,这个电压又叫做导通压降。直插式发光二极管长脚为阳极,短脚为阴极。 延时函数:两层循环,可控制延时在x毫秒!
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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