求一份单片机万年历程序,带原理图 ,里面功能越多越好 参考用的。
#include<reg51.h>
#include"lcd.h"
#include"ds1302.h"
**it k1=p3^1;
**it k2=p3^0;
**it k3=p3^2;
**it k4=p3^3; //管脚接线
unsigned char character0[32] = {
0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02, //"年"代码 0x01
0x0f,0x09,0x0f,0x09,0x0f,0x09,0x13,0x00, //"月"代码 0x02
0x0f,0x09,0x09,0x0f,0x09,0x09,0x0f,0x00, //日
0x1e,0x15,0x1f,0x15,0x1f,0x1b,0x15,0x13, //周
};
void int0configuration();
void lcdd**play();
unsigned char setstate,setplace;
void delay10ms(void); //误差 0us
/*******************************************************************************
* 函数名 : main
* 函数功能 : 主函数
* 输入 : 无
* 输出 : 无
*******************************************************************************/
void main()
{
unsigned char i,h;
int0configuration();
lcdinit();
lcdwritecom(0x40);
for (h=0;h<32;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;
}
}
switch(setplace)
{
case 1:lcdwritecom(0xc9);lcdwritecom(0x0f);break;
case 2:lcdwritecom(0xc6);lcdwritecom(0x0f);break;
case 3:lcdwritecom(0xc3);lcdwritecom(0x0f);break;
case 4:lcdwritecom(0x89);lcdwritecom(0x0f);break;
case 5:lcdwritecom(0x86);lcdwritecom(0x0f);break;
case 6:lcdwritecom(0x83);lcdwritecom(0x0f);break;
default:lcdwritecom(0x0c);break;
}
delay10ms();
lcdwritecom(0x0c);
lcdd**play();
}
}
/*******************************************************************************
* 函数名 : lcdd**play()
* 函数功能 : 显示函数
* 输入 : 无
* 输出 : 无
*******************************************************************************/
void lcdd**play()
{
lcdwritecom(0xc2);
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);
lcdwritedata(' ');
lcdwritedata(0x03);
lcdwritedata('0'+(time[5]&0x07)-1); //星期
}
/*******************************************************************************
* 函数名 : int0configuration()
* 函数功能 : 配置外部中断0
* 输入 : 无
* 输出 : 无
*******************************************************************************/
void int0configuration()
{
//设置int0
it0=1;//跳变沿出发方式(下降沿)
ex0=1;//打开int0的中断允许。
ea=1;//打开总中断
}
/*******************************************************************************
* 函数名 : int0()
* 函数功能 : 外部中断0 中断函数
* 输入 : 无
* 输出 : 无
*******************************************************************************/
void int0() interrupt 0
{
delay10ms();
if(k3==0)
{
setstate=~setstate;
setplace=0;
ds1302init();
}
}
/*******************************************************************************
* 函数名 : delay10ms
* 函数功能 : 延时函数,延时10ms
* 输入 : 无
* 输出 : 无
*******************************************************************************/
void delay10ms(void) //误差 0us
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}
佚名
2024-11-16 06:34:13
类似问题(10)
-
佚名2024-11-16 18:04:20
问求 多啦a梦的意境图片 越多越好 谢~
答昵图网里的多啦a梦图片 都是大图 比较清晰 不知道是不是你想要的!http://soso.nipic.com/show/b1/b6/8e/8fcd4c2ee**...
-
佚名2024-11-16 14:26:11
问j**a编写一个多功能万年历程序
答import j**a.io.*;class putout{public void putout(int f,int x,int y){int i;int a[...
-
佚名2024-11-16 08:14:10
问求一个vb万年历的程序
答给你一个~~应该可以了~~http:///d/60c9aa2f31cdad4de37a5b0fa89038cb**6e310000
-
佚名2024-11-16 23:52:18
问at89c52+ds1302单片机万年历程序
答参考程序,可以调节时间,设置闹钟,音乐闹铃#include<reg52.h>#include<intrins.h>/****************...
-
佚名2024-11-16 04:20:30
问求电子万年历的mcs51单片机程序!急!在线等!
答闰年 闰年: 1.为了弥补人为的年份规定与地球实际绕日公转的时间差,2.而人为把时间差补上了的年份,该年即为闰年. 遵循的规律为: 四年一闰,百年不润,四百年再...
-
佚名2024-11-16 08:00:00
问急求一个电子万年历的电路图和程序。要求单片机实现,系统具备显示温度,年,月,日,星期,闰年,阴历功能
答我也刚做了一个,就是没做温度显示的,用的是ds1307,1602,stc12c5a.需要的话说一声。
-
佚名2024-11-16 08:00:00
问51单片机芯片型号at89c52,想用定时器做一个万年历,求程序,不用时钟芯片的
答劝你还是别做了,跑的很不准,你想如果单用单片机就能跑准的话,那些时钟芯片还卖啥。
-
佚名2024-11-16 08:00:00
问可以对单片机万年历赋予什么功能
答没分啊 那也给你发一个吧 ds1302+ds18b20 用1602显示 我在protues**上做的 你可以根据程序画电路图 很简单 程序 采用模块化方式 /*...
-
佚名2024-11-16 08:00:00
问求基于51单片机的万年历的c语言程序代码,
答百度网页或百度文库多的是,找找也不费事的。
-
佚名2024-11-16 08:00:00
风水
起名
网名
- 1 傲气的网名
- 2 二个字诗意古典网名大全
- 3 qq炫舞基友网名大全
- 4 关于tizzy的网名
- 5 淘宝昵称怎么显示昵称必填项
- 6 云外镜昵称
- 7 道聚城修改昵称在哪
- 8 大气的微信昵称男人
- 9 简洁的快手昵称
- 10 关于沙漏的微信昵称
说说
- 1 说说卫士通
- 2 说说png的那点事儿
- 3 男朋友说说分手了还能挽回吗
- 4 瘦脸针后吃辣的出来说说效果怎样
- 5 我最近很烦恼的说说
- 6 队家庭烦躁的说说
- 7 明天六一儿童节说说
- 8 关于傲气的说说大全
- 9 一百天纪念日说说 情侣
- 10 女人对我说说买一送一