万年历单片机课程设计
Ⅰ 单片机课程设计万年历用C语言编写的keil程序以及proteus的仿真
额,这个你都问题是什么,这个可以做的!也可以实现,实现的方法一般有两种1、纯软件回 采用软件答计时;2 、采用硬件 使用硬件时钟芯片,单片机读取数据即可;
有不懂的 ,我们可以交流交流!
满意的话记得赞一个,呵呵
Ⅱ 用单片机制作电子万年历
STC89C52+LCD12864+DS1302+DS18B20
Ⅲ 基于51单片机的万年历课程设计
你好:
这是我用定时器的方式写出来的万年历程序,LCD1602显示,51单片机控制,能显示日期和时间,并可通过按键调整时间。
参考参考吧,希望我的回答能帮助到你。
Ⅳ 基于单片机的电子万年历设计,能够显示日期,时间,温度。
已发,[email protected]
电路图我是protues画的,管脚和程序有点不对应,你如果需要就追问。只要修改一下前面的define就可以了。追加点分吧,1000多行都是我自己写的
我的蜂鸣器是闹钟,两个闹钟,可以调时间,有背光延时
解压密码321123
Ⅳ 怎样制作万年历单片机
今天碰到了N个白痴问题。
万年历是能够显示年月日、二十四节气、农历之类的东西,单片机是一块芯片。万年历可以用单片机来做,但是我真不知道“万年历单片机”怎么做。我想你应该想问的是怎么用单片机来做万年历,我提供思路。
1、单片机最小系统一块。可以用STC89C52芯片+外围电路。可以烧入用户编写的程序,实现万年历所需的逻辑。
2、实时时钟电路一块,可以用DS1302芯片。提供年月日、时分秒数据给单片机。
3、显示器电路一块。用来显示这些数据。
4、一些必要的按键,用来调整数据。
Ⅵ 设计一个基于单片机的万年历程序
#include<reg51.h>
#include"lcd.h"
#include"ds1302.h"
sbitK1=P3^1;
sbitK2=P3^0;
sbitK3=P3^2;
sbitK4=P3^3; //管脚接线
unsignedcharcharacter0[24]={0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02 ,
0x0F,0x09,0x0F,0x09,0x0F,0x09,0x13,0x00,//"月"代码0x01
0x0F,0x09,0x09,0x0F,0x09,0x09,0x0F,0x00,//"日"代码0x02
};//年
voidInt0Configuration();
voidLcdDisplay();
unsignedcharSetState,SetPlace;
voidDelay10ms(void);//误差0us
/*******************************************************************************
*函数名:main
*函数功能 :主函数
*输入:无
*输出 :无
*******************************************************************************/
voidmain()
{
unsignedchari,h;
Int0Configuration();
LcdInit();
LcdWriteCom(0x40);
for(h=0;h<24;h++)
{
LcdWriteData(character0[h]);
}
LcdWriteCom(0x80);
// Ds1302Init();
while(1)
{
if(SetState==0)
{
Ds1302ReadTime();
}
else
{
if(K1==0) //检测按键K1是否按下
{
Delay10ms(); //消除抖动
if(K1==0)
{
SetPlace++;
if(SetPlace>=7)
SetPlace=0;
}
while((i<50)&&(K1==0)) //检测按键是否松开
{
Delay10ms();
i++;
}
i=0;
}
if(K2==0) //检测按键K2是否按下
{
Delay10ms(); //消除抖动
if(K2==0)
{
TIME[SetPlace]++;
if((TIME[SetPlace]&0x0f)>9) //换成BCD码。
{
TIME[SetPlace]=TIME[SetPlace]+6;
}
if((TIME[SetPlace]>=0x60)&&(SetPlace<2)) //分秒只能到59
{
TIME[SetPlace]=0;
}
if((TIME[SetPlace]>=0x24)&&(SetPlace==2)) //小时只能到23
{
TIME[SetPlace]=0;
}
if((TIME[SetPlace]>=0x32)&&(SetPlace==3)) //日只能到31
{
TIME[SetPlace]=0;
}
if((TIME[SetPlace]>=0x13)&&(SetPlace==4)) //月只能到12
{
TIME[SetPlace]=0;
}
if((TIME[SetPlace]>=0x7)&&(SetPlace==5)) //周只能到7
{
TIME[SetPlace]=1;
}
// if(SetPlace==5) //月只能到12
// {
// TIME[SetPlace]=;
// }
}
while((i<50)&&(K2==0)) //检测按键是否松开
{
Delay10ms();
i++;
}
i=0;
}
}
LcdDisplay();
}
}
/*******************************************************************************
*函数名:LcdDisplay()
*函数功能 :显示函数
*输入:无
*输出 :无
*******************************************************************************/
voidLcdDisplay()
{
LcdWriteCom(0x80+0X40);
LcdWriteCom(0x0f);
LcdWriteCom(0xc0|(2-0x40));
LcdWriteCom(0x0c);
Delay10ms();
LcdWriteData('0'+TIME[2]/16); //时
LcdWriteData('0'+(TIME[2]&0x0f));
LcdWriteData(':');
LcdWriteData('0'+TIME[1]/16); //分
LcdWriteData('0'+(TIME[1]&0x0f));
LcdWriteData(':');
LcdWriteData('0'+TIME[0]/16); //秒
LcdWriteData('0'+(TIME[0]&0x0f));
LcdWriteCom(0x80);
LcdWriteData('2');
LcdWriteData('0');
LcdWriteData('0'+TIME[6]/16); //年
LcdWriteData('0'+(TIME[6]&0x0f));
LcdWriteData(0x00);
LcdWriteData('0'+TIME[4]/16); //月
LcdWriteData('0'+(TIME[4]&0x0f));
LcdWriteData(0x01);
LcdWriteData('0'+TIME[3]/16); //日
LcdWriteData('0'+(TIME[3]&0x0f));
LcdWriteData(0x02);
LcdWriteCom(0x8D);
LcdWriteData('0'+(TIME[5]&0x07)-1); //星期
}
/*******************************************************************************
*函数名:Int0Configuration()
*函数功能 :配置外部中断0
*输入:无
*输出 :无
*******************************************************************************/
voidInt0Configuration()
{
//设置INT0
IT0=1;//跳变沿出发方式(下降沿)
EX0=1;//打开INT0的中断允许。
EA=1;//打开总中断
}
/*******************************************************************************
*函数名:Int0()
*函数功能 :外部中断0中断函数
*输入:无
*输出 :无
*******************************************************************************/
voidInt0()interrupt0
{
Delay10ms();
if(K3==0)
{
SetState=~SetState;
SetPlace=0;
Ds1302Init();
}
}
/*******************************************************************************
*函数名:Delay10ms
*函数功能 :延时函数,延时10ms
*输入:无
*输出 :无
*******************************************************************************/
voidDelay10ms(void)//误差0us
{
unsignedchara,b,c;
for(c=1;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}
Ⅶ 用单片机做个万年历
如果你用液晶的话,加个1602,再加上4个按键就可以了。
如果你用数码管的话,还要买一片154.
最好加上蜂鸣器,和几个LED做指示灯
硬件很容易做出来,软件就麻烦点了,需要看一下1602的用法(用数码管就可略此步了)1302的用法。
之后,做电路板估计要厂家做,自己设计到厂家做好至少2周吧,硬件焊接加测试几天完活,软件设计很漫长,如果只用业余时间做,至少2周。
祝你成功