c51单片机万年历的c程序

可以显示阳历的年、月、日、星期、小时.分.秒。阴历也能显示,标明是否为闰年。 用LCD液晶显示,可以调整时间。。。。。

请高手帮忙,,,,

我这有个数码管显示的程序
以前做的,。。
你可以在我这个程序上修改修改
包括键盘扫描,还有动态显示
。
。

【。。。】
#include <REG51.H>
//常量参数
#define TMODW 0x01;
#define SCONW 0x00;
#define xplay 0x04;//显示分频系数
//显示位选
unsigned char data stb;
//键值缓存,0xFF无键命令
unsigned char data keynum;
//显示字型变量
unsigned char data play[8];
//工作参数
unsigned char data l,m;
//字型码
unsigned char code BCDPC[10]=
{0x3F,0x06,0x5B,0x4F,0x66,
0x6D,0x7D,0x07,0x7F,0x6F};
//字位码
unsigned char code STBCODE[8]=
{0x01,0x02,0x04,0x08,
0x10,0x20,0x40,0x80 };
//400Hz xplay分频计数
unsigned char data cttime;
//时钟参数
unsigned char data hr,min,sec,sec100;
//调整时钟参数(时钟“走”)
void ct1()
{sec100++;
if (sec100==100)
{sec100=0;sec++;
if (sec==60)
{sec=0;min++;
if (min==60)
{min=0;hr++;
if (hr==24) hr=0;
}
}
}
}
//时钟参数→LED 显示缓存7段参数转换函数;
void xcplay()
{play[0]=BCDPC[hr/10];
play[1]=BCDPC[hr%10];
play[2]=BCDPC[min/10];
play[3]=BCDPC[min%10];
play[4]=BCDPC[sec/10];
play[5]=BCDPC[sec%10];
play[6]=BCDPC[sec100/10];
play[7]=BCDPC[sec100%10];
}
//显示扫描
void cplay()
{T0=1;//T0-高电平消隐
T1=0;//T1-低电平准备发脉冲前沿
TI=0;//?
P1=0;//?
SBUF=STBCODE[stb];
while (TI==0)
{
};
TI=0;
SBUF=play[stb];
while (TI==0)
{
};
T1=1;
T0=0;
stb=++stb&0x07;
}

extern void cthl0();
//定时器0中断处理程序
void ct0(void) interrupt 1 using 1
{cthl0();
cttime--;
if (cttime==0)
{cttime=xplay;
ct1();//调用时钟“走”函数
xcplay();//调用时钟参数→Led显示缓存转换函数
};
cplay();
}
void w20ms()
{for (l=0;l<41;l++)
{for (m=0;m<81;m++)
{
}
}
}
void tkey()
{P1=0xF0;
keynum=0xFF;
if (P1!=0xF0)
{w20ms();
P1=0xF0;
if (P1!=0xF0)
{P1=0xFE;
switch (P1)
{case 0xEE:keynum=0;break;
case 0xDE:keynum=1;break;
case 0xBE:keynum=2;break;
case 0x7E:keynum=3;break;
}
P1=0xFD;
switch (P1)
{case 0xED:keynum=4;break;
case 0xDD:keynum=5;break;
case 0xBD:keynum=6;break;
case 0x7B:keynum=7;break;
}
P1=0xFB;
switch (P1)
{
case 0xEB:keynum=8;break;
}
};
};
P1=0x00;
}
void command()
{switch (keynum)
{
case 0:{hr=hr+1;
if (hr==24)
hr=0;
}
break;

case 1:{min=min+1;
if (min==60)
min=0;
}
break;

case 2:{sec=sec+1;
if (sec==60)
sec=0;
}
break;

case 3:{sec100=0;
}
break;

case 4:{
while(!(P1=0xED))
{
hr=0;
min=0;
sec=0;
}
}
break;

case 5:{hr=hr-1;
if (hr==00)
hr=24;
}
break;
case 6:{min=min-1;
if (min==00)
min=59;
}
break;

case 7:{sec=sec-1;
if (sec==00)
sec=0;
}
break;

case 0xFF:break;
}
keynum=0xFF;
}
main ()
{ hr=8;
min=5;
sec=8;
sec100=0;
TMOD=TMODW;
SCON=SCONW;
ET0=1;
TR0=1;
EA=1;
cttime=xplay;
while (1)
{w20ms();
tkey();
command();

};
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-04-23
楼上的,阴历也能显示 这个算法还是又点难的 全部由单片机实现代码至少也得250来行

跪求51单片机+12864液晶+1302时钟制成的万年历c程序?
4.1日历程序设计 - 19 -4.2 时间调整程序设计 - 20 -4.3 闹钟设置程序设计 - 22 -4.4 闹钟蜂鸣程序设计 - 23 -4.5本章小结 - 23 -第五章 系统调试 - 24 -5.1系统的调试 - 24 -5.2系统的调试出现的问题及解决 - 24 -5.3本章小结 - 24 -第六章 结 论 - 25 -参考文献 - 26 -致谢- 27 -附...

我最近学习单片机C51,有段万年历源程序不知道怎么改,求各位大神帮小弟看...
这个就可以实现的,只不过是没有MAIN函数。include <reg52.h> include <intrins.h> include <string.h> define uint unsigned int define uchar unsigned char sbit IO = P1^0;sbit SCLK = P1^1;sbit RST = P1^2;sbit RS = P2^0;sbit RW = P2^1;sbit EN = P2^2;uchar *WEEK[]= ...

基于51单片机制作万年历,用数码管,定时器,不用时钟芯片,不用液晶,怎 ...
基于51单片机制作万年历,用两个8位一体的共阴数码管,显示日期和时间。数码管位选用两片74HC138,便于动态扫描显示,又节省引脚。用3个按键调时,K1为选择调时状态,K2为加1键,K3为减1键。仿真图如下:

跪求个利用51单片机1602显示屏DS1302做的万年历c编程序,带有公历,农历...
code uint day_code2[3]={0x111,0x130,0x14e};\/ 函数功能:输入BCD阳历数据,输出BCD阴历数据(只允许1901-2099年)调用函数示例:Conversion(c_sun,year_sun,month_sun,day_sun)如:计算2004年10月16日Conversion(0,0x4,0x10,0x16);c_sun,year_sun,month_sun,day_sun均为BCD数据,c_sun为世纪...

求大神解答下单片机80c51,下面程序中的一个能够让万年历调时间的代码...
1,我们可以通过这一位判断时钟在单片机系统掉电后是否还正常运行。剩下的7 位高 3 位是秒的十位,低 4 位是秒的个位,这里再提请注意一次,DS1302 内部是 BCD 码,而秒的十位最大是 5,所以 3 个二进制位就够了。second|0x80后面的这个数据使用 | 符号就是把最高位CH变成1.

基于51单片机的时钟万年历—可农历显示
基于51单片机的时钟万年历是一款功能强大的时间显示设备,它不仅能够显示年、月、日、时、分、秒、星期,还能显示农历,满足不同用户的需求。通过按键,用户可以设置闹钟和报警,调整时间,并了解当前年份是否为平年或闰年。硬件方面,该万年历采用STC89C52单片机为核心,配合其他必要的电子元件,如万用板、...

基于51单片机,DS1302,1602实现万年历(年月日时分秒)及闹钟功能的C程序...
[5]单片机多功能万年历电子表系统节日提醒温湿度显示 功能描述:1、按键调时间,设置闹钟 2、带备用电池(断电继续走时)3、阳历、农历节日提醒;可显示上午、中午、晚上、午夜、深夜等时间段 4、温湿度实时显示(可替换其他传感器数据显示)5、功能扩展:语音播报万年历、温湿度等。(此项功能为扩展功能...

c51写了个万年历,有个地方 疑惑好几天了 还是没有调试出来 新手 希望...
你建工程时,单片机是选择的AT89C51吧,因为它的FLASH容量只有4KB,而你程序超过了4KB了,所以,代码没有生成。改一下单片机,选择AT89C52,程序空间为8KB就够了。不过,有个提议。就是用at24c02实现掉电保护,是保护什么数据吗,还是保护掉电的时间,这时间保护也没有用啊,例如,是上午8点掉了,保护...

51单片机实现万年历
可以实现秒.MS都可以 时钟芯片用DS12887就可以了,15元左右,挺方便,不用外接其他东西.不过需要注意一下,好象DS12887的读引脚是高电平有效,和单片机连的饿时候要接反向器,或者用三极管也行.

基于单片机AT89C51的万年历,只需要显示时间就可以,不加其他的东西
_delay_ms(1);LCD_Write_Command(0x0c);\/\/显示模式设置:显示开,无光标,光标不闪烁 _delay_ms(1);LCD_Write_Command(0x01);\/\/清屏幕指令,将以前的显示内容清除 _delay_ms(1);} \/ 函数名称:LCD_POS 输 入:uchar pos 输 出:无 功 能:字符显示位置 \/ void LCD_POS(uchar pos)...

相似回答
大家正在搜