基于单片机AT89C51的万年历,只需要显示时间就可以,不加其他的东西

里面还需要按键模块,显示模块,储存时间模块,
再要一份元件清单和电路图
发到877409174@qq.com
先发到我邮箱,求速度,求大神,可以的话一切ok

#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit LCD_RS=P2^0;
sbit LCD_RW=P2^1;
sbit LCD_EN=P2^2;
sbit SPK=P3^0;
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
uchar Display_Buffer[16]=" ";
uchar Count,hour=12,min=12,sec=12;
bit flag,H_or_M;
uchar display[]="This is colck";
void _delay_ms(uint x)
{
uchar i;
while(x--)
{
for(i=0;i<120;i++);
}
}
/**********************************************************************
*函数名称:LCD_Write_Command
*输 入:uchar cmd
*输 出:无
*功 能:向LCD1602写指令
**********************************************************************/
void LCD_Write_Command(uchar cmd)
{
LCD_RS=0;//根据规定,RS和R/W同时为低电平时,可以写入指令
LCD_RW=0;
LCD_EN=0;//EN置低电平
P0=cmd;//将数据送入P2口,即写入指令或地址
LCD_EN=1;//EN置高电平
_delay_ms(1);//稍延时,给硬件反应时间
LCD_EN=0;//当EN由高电平跳变成低电平时,液晶模块开始执行命令
}
/**********************************************************************
*函数名称:LCD_Write_Data
*输 入:uchar dat
*输 出:无
*功 能:向LCD1602写数据
**********************************************************************/
void LCD_Write_Data(uchar dat)
{
LCD_RS=1;//RS为高电平,RW为低电平时,可以写入数据
LCD_RW=0;
LCD_EN=0;//EN置低电平
P0=dat;//将数据送入P0口,即将数据写入液晶模块
LCD_EN=1;//EN置高电平
_delay_ms(1);//稍延时,给硬件反应时间
LCD_EN=0;//当EN由高电平跳变成低电平时,液晶模块开始执行命令
}
/**********************************************************************
*函数名称:Init_LCD
*输 入:无
*输 出:无
*功 能:初始化LCD1602
**********************************************************************/
void Init_LCD(void)
{
LCD_Write_Command(0x38);//显示模式设置:16×2显示,5×7点阵,8位数据接口
_delay_ms(1);
LCD_Write_Command(0x06);//显示模式设置:光标右移,字符不移
_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)
{
LCD_Write_Command(0x80|pos);//显示位置的确定方法规定为"80H+地址码x"
}
/**********************************************************************
*函数名称:Show_String
*输 入:uchar *str
*输 出:无
*功 能:LCD1602显示字符串处理函数
**********************************************************************/
void Show_String(uchar *str)
{
while(*str!='\0')//只要没有写到结束标志,就继续写
LCD_Write_Data(*str++);//将字符常量写入LCD,并指向下一个字符
}
void song(void)
{
uchar i,j,k;
for(i=0;i<200;i++)
{
SPK=~SPK;
for(k=0;k<50;k++);
for(j=0;j<50;j++);
}
}
/////lcd1602液晶显示//////
void Display_Time(uchar Hour,uchar Min,uchar Sec)
{
Display_Buffer[0]=Hour/10+'0';//小时十位
Display_Buffer[1]=Hour%10+'0';//小时个位
Display_Buffer[2]=':';//显示:号
Display_Buffer[3]=Min/10+'0';//显示分钟十位
Display_Buffer[4]=Min%10+'0';//显示分钟个位
Display_Buffer[5]=':';//显示:号
Display_Buffer[6]=Sec/10+'0';//显示秒十位
Display_Buffer[7]=Sec%10+'0';//显示秒个位
LCD_POS(0x40);//显示在液晶第1行第0列
Show_String(Display_Buffer);
}
/////按键处理//////
void Set_time(void)
{
flag=0;
if(key1==0||key2==0||key3==0)//若key1,key2,key3其中有键按下,则为真
{
TR0=0;//定时器0停止
flag=1;//按键标志位为真
}
while(flag)//判断那一个按键按下
{
if(key1==0)//判断key1是否按下
{
while(!key1);//等待释放
H_or_M=!H_or_M;//选择是修改时还是分钟
}
else if(key2==0)//判断key2是否被按下
{
while(!key2);//等待释放
if(H_or_M)//若H_OR_M为真,则修改小时
{
if(++hour==24)//若小时=24,则小时=0
hour=0;//小时加1
}
else//否则修改分钟
{
if(++min==60)//若分钟等于60,则分钟等于0
min=0;//分钟加1
}
}
else if(key3==0)//判断key3是否被按下
{
while(!key3);//等待释放
if(H_or_M)//若H_OR_M为真,则修改小时
{
if(--hour==0xff) //小时减1,若小时等于-1,则小时等于23
hour=23;
}
else//否则修改分钟
{
if(--min==0xff)//分钟减1,若分钟等于-1,则分钟等于59
min=59;
}
}
else if(key4==0)//判断key4是否被按下
{
while(!key4);//等待释放
flag=0;//按键标志清零
TR0=1;//定时器0启动
}
Display_Time(hour,min,sec);//传H,M,S值显示到液晶
}
}
void timer0_init(void)//定时器0初始化
{
TMOD=0x01;//定时器0,方式1
ET0=1;//
EA=1;//总中断允许
TR0=1;//启动定时器0
TH0=(65535-50000)/256;//装高8位初值
TL0=(65535-50000)%256;//装低8位初值
}
void main(void)//主函数
{
//P0=0xff;
P1=0xff;//端口初始化
P3=0xff;
Init_LCD();//液晶初始化
timer0_init();//定时器0初始化
LCD_POS(0);//显示在液晶第1行第0列
Show_String(display);
while(1)//无限循环
{
Display_Time(hour,min,sec);//液晶显示时间
//_delay_ms(500);//延时
Set_time();//时间调整
}
}
void timer0() interrupt 1//定时器0中断
{
TH0=(65535-50000)/256;//重装定时器0高8位
TL0=(65535-50000)%256;//重装定时器0低8位
Count++;//计数加1
if(Count==20)//如果COUNT等于20
{
Count=0;//计数清零
sec++;//秒加1
if(sec==60)//判断秒是否等于60
{
sec=0;//秒清零
min++;//分钟加1
if(min==60)//判断分钟是否等于60
{
min=0;//若等于60,则清零分钟
hour++;//小时加1
if(hour==24)//判断小时是否等于24
{
hour=0;//若小时等于24,则清零小时,分钟,秒
min=0;
sec=0;
}
song();
}
}
}
}追问

电路图发我邮箱看一下

追答

好的!

温馨提示:内容为网友见解,仅供参考
无其他回答

基于单片机AT89C51的万年历,只需要显示时间就可以,不加其他的东西
功 能:初始化LCD1602 \/ void Init_LCD(void){ LCD_Write_Command(0x38);\/\/显示模式设置:16×2显示,5×7点阵,8位数据接口 _delay_ms(1);LCD_Write_Command(0x06);\/\/显示模式设置:光标右移,字符不移 _delay_ms(1);LCD_Write_Command(0x0c);\/\/显示模式设置:显示开,无光标,光标不...

基于51单片机的数字电子钟万年历闰年判断闹钟整点报时设计
基于51单片机设计的电子钟万年历闹钟满足以下功能:显示年、月、日、时、分、秒、星期、农历,通过按键设置闹钟与报警,调整时间并判断平年或闰年,共有4个按键实现设置时间\/闹钟、时间加、时间减、设置切换,整点时有蜂鸣器提醒。系统主要由51单片机、DS1302时钟芯片、按键模块、LCD1602显示以及电源构成。...

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

数字电子钟可设报告
在此基础上,人们可以根据不同场合的要求,在时钟上加置其他功能,比如定时闹钟,万年历,环境温度,温度检测,环境空气质量检测,USB扩展功能等。本设计电子时钟主要功能为:具有时间显示和手动校对功能,24小时制。本设计任务“ 1:用4位LED数码管实时显示时钟计时功能;最小显示时间为00时00分,最大显示时间为23时59分;2:...

单片机数字钟毕业中期检查表中的一个问题
摘要:数字电子时钟电路设计系统,以AT89C51单片机为控制核心,由键盘显示、定时闹铃、LED共阴极数码管和LED灯显示等功能模块组成。基于题目基本要求,本系统对时间显示和定时报警进行了重点设计。本系统大部分功能由软件来实现,吸收了硬件软件化的思想,大部分功能通过软件来实现,使电路简单明了,系统稳定性大大提高。本系统...

74ls47与at89c51如何接线,最好能有程序
如果7段数码管是共阳显示电路,那就需要选用74LS47译码驱动集成电路。共阳就是把abcdefg的7个发光二极管的正极连接在一起并接到5V电源上,其余的7个负极接到74LS47相应的abcdefg输出端上。无论共阴共阳7段显示电路,都需要加限流电阻,否则通电后就把7段译码管烧坏了!限流电阻的选取是:5V电源电压减去...

关于D类放大器的毕业论文
要毕业了,现在正在搞毕业论文,题目--D类放大器;参数及依据--基于PWM调制和单片机技术设计一个D类放大器。请问各位路过的大虾们,有没有人搞过这个东西,或者有没有什么可以与在下分... 要毕业了,现在正在搞毕业论文,题目--D类放大器;参数及依据--基于PWM调制和单片机技术设计一个D类放大器。请问各位路过的大虾...

我想要一篇论文天下网的《基于单片机的鱼用投饵机自动控制系统的设计...
基于单片机的鱼用投饵机自动控制系统的设计摘要:为提高水产养殖投饵的自动化和精细化水平,满足现代水产养殖精确投饵的需要,研发了一种采用搅龙作为强制式排料机构的全自动饵料精量投喂装置.同时,介绍了装置的工作原理、结构特点、主要技术参数以及精量投喂控制方法.性能试验表明,该精量投喂装置各项性能均达到设计要求,...

单片机课程设计:交通灯控制!
116.基于单片微型计算机的语音播出的作息时间控制器 117.交通信号灯控制电路的设计 118.基于单片机步进电机控制系统设计 119.多路数据采集系统的设计 120.电子万年历 121.遥控式数控电源设计 122.110kV降压变电所一次系统设计 123.220kv变电站一次系统设计 124.智能数字频率计 125.信号发生器 126.基于虚拟仪器的电网...

相似回答
大家正在搜