/*********************************************************************************************
程序名 基于LCD12864+DS1302+DS18B20万年历
作者 黄日才 huangricai
日期 2011-04-17
参数 C52(MCS-51) 11.0592MHZ
/*********************************************************************************************
//更新日志
12864 Timer Calender Version1.0 2011-04-17 硬件制作完成。
2011-04-17 软件编写完成。
/*********************************************************************************************
//程序说明
本程序是12864中文液晶显示屏模块的应用程序
/*********************************************************************************************/
//程序部分开始//
/****************************************************************************/
//头文件
#include <REG52.h>
#include <string.h>
/*****************************************************************************/
//扬声器定义
//扬声器(V2.1程序中将V1.1程序中的蜂鸣器改为扬声器)
/*****************************************************************************/
//温度传感器定义
sbit DQ = P2^0;//ds18B20
/*****************************************************************************/
//键盘引脚定义
sbit KEY_1 = P1^7; //左上
sbit KEY_2 = P1^6; //左下
sbit KEY_3 = P1^5; //右上
sbit KEY_4 = P1^4; //右下
/****************************************************************************/
//LCD接口定义
sbit RS = P1^5;//模式位,为0输入指令,为1输入数据
sbit RW = P1^6;//读写位,为0读,为1写
sbit E = P1^7;//使能位
#define Lcd_Bus P0 //数据总线
/*****************************************************************************/
//定义DS1302时钟接口
sbit clock_clk = P2^1;//ds1302_clk(时钟线)
sbit clock_dat = P2^2;//ds1302_dat(数据线)
sbit clock_Rst = P2^3;//ds1302_Rst(复位线)
/*****************************************************************************/
//定义累加器A中的各位
sbit a0 = ACC^0;
sbit a1 = ACC^1;
sbit a2 = ACC^2;
sbit a3 = ACC^3;
sbit a4 = ACC^4;
sbit a5 = ACC^5;
sbit a6 = ACC^6;
sbit a7 = ACC^7;
/****************************************************************************/
//定义全局变量
unsigned char yy,mo,dd,xq,hh,mm,ss;//定义时间映射全局变量(专用寄存器)
bit w = 0; //调时标志位
static unsigned char menu = 0;//定义静态小时更新用数据变量
static unsigned char keys = 0;//定义静态小时更新用数据变量
static unsigned char timecount = 0;//定义静态软件计数器变量
/****************************************************************************/
void DelayM(unsigned int a){//延时函数 1MS/次
unsigned char i;
while( --a != 0){
for(i = 0; i < 125; i++); //一个 ; 表示空语句,CPU空转。
} //i 从0加到125,CPU大概就耗时1毫秒
}
/****************************************************************************/
/******************************************************************************/
//LCD驱动(DY12864CBL液晶显示屏并口驱动程序)
/******************************************************************************/
void chk_busy(){ //检查忙位(底层)
RS=0;
RW=1;
E=1;
Lcd_Bus=0xff;
while((Lcd_Bus&0x80)==0x80);
E=0;
}
/***************************************************************************
***/
void write_com(unsigned char cmdcode){//写命令到LCD(底层)
chk_busy();
RS=0;
RW=0;
E=1;
Lcd_Bus=cmdcode;
E=0;
}
/******************************************************************************/
void write_data(unsigned char Dispdata){ //写数据到LCD(底层)
chk_busy();
RS=1;
RW=0;
E=1;
Lcd_Bus=Dispdata;
E=0;
}
/******************************************************************************/
void lcm_init(){//初始化LCD屏(被调用层)
write_com(0x30); //选择8bit数据流
write_com(0x0c); //开显示(无游标、不反白)
write_com(0x01); //清除显示,并且设定地址指针为00H
}
/*****************************************************************************/
void lcm_w_word(unsigned char *s){//向LCM发送一个字符串,长度64字符之内。(被调用层)
while(*s>0){ //应用:lcm_w_word("您好!");
write_data(*s);
s++;
}
}
/******************************************************************************/
void lcm_w_test(bit i,unsigned char word){//写指令或数据(被调用层)
if(i == 0){
write_com(word);//写指令或数据(0,指令)
}else{
write_data(word);//写指令或数据(1,数据)
}
}
/******************************************************************************/
void lcm_clr(void){//清屏函数
lcm_w_test(0,0x01);
}
/******************************************************************************/
/***************************************************************************
***/
//公历节日数据库表
/******************************************************************************/
void days (viod) {
unsigned int d=0,m=0;
//公历节日数据库
lcm_w_test(0,0x80);//在屏幕第一行
lcm_w_word("[SET] [DIS]");//显示菜单操作注释
if ( yy>0x10&&mo == 0x09 && dd ==0x06 ){ lcm_w_test(0,0x98);
lcm_w_word("在一起");
lcm_w_test(0,0x9b);
lcm_w_test(1,((yy/16)*10+yy%16-10)/10+0x30);
lcm_w_test(1,((yy/16)*10+yy%16-10)%10+0x30);
lcm_w_test(0,0x9c);
lcm_w_word("周年纪念"); } //lcm_w_test(1,mo%16+0x30);
else if( yy>0x10&&dd ==0x06){
m=((((yy-0x11)/16)*10+(yy-0x11)%16)*12+(mo/16)*10+mo%16+3);
lcm_w_test(0,0x98);
lcm_w_word("同你一起");
lcm_w_test(0,0x9c);
lcm_w_test(1,0x03);
lcm_w_test(1,(m/100)%10+0x30);
lcm_w_test(0,0x9d);
lcm_w_test(1,(m/10)%10+0x30);
lcm_w_test(1,m%10+0x30);
lcm_w_test(0,0x9e);
lcm_w_word("个月过"); } //lcm_w_test(1,mo%16+0x30);
else if( yy==0x10&&mo>0x09&&dd==0x06){
m=((mo/16)*10+(mo%16)-9)%10;
lcm_w_test(0,0x98);
lcm_w_word("同你一起");
lcm_w_test(0,0x9c);
lcm_w_test(1,0x03);
lcm_w_test(1,(m/100)%10+0x30);
lcm_w_test(0,0x9d);
lcm_w_test(1,(m/10)%10+0x30);
lcm_w_test(1,m%10+0x30);
lcm_w_test(0,0x9e);
lcm_w_word("个月过"); } //lcm_w_test(1,mo%16+0x30);
else {
if ( mo == 0x01 && dd == 0x01 ){lcm_w_test(0,0x98); lcm_w_word("Happy New Year!!"); }//1月 //在屏幕第四行
else if ( mo == 0x02 && dd == 0x02 ){ lcm_w_test(0,0x98);lcm_w_word(" 世界湿地日 "); }//2月
else if ( mo == 0x02 && dd == 0x13 ){ lcm_w_test(0,0x98);lcm_w_word(" 明天情人节了 "); }
else if ( mo == 0x02 && dd == 0x14 ){lcm_w_test(0,0x98); lcm_w_word(" 今天是情人节 "); }
else if ( mo == 0x03 && dd == 0x01 ){lcm_w_test(0,0x98); lcm_w_word(" 国际海豹日 "); }//3月
else if ( mo == 0x03 && dd == 0x03 ){ lcm_w_test(0,0x98);lcm_w_word(" 全国爱耳日 "); }
else if ( mo == 0x03 && dd == 0x08 ){ lcm_w_test(0,0x98);lcm_w_word(" 3.8妇女节 "); }
else if ( mo == 0x03 && dd == 0x12 ){ lcm_w_test(0,0x98);lcm_w_word(" 植树节 "); }
else if ( mo == 0x03 && dd == 0x14 ){lcm_w_test(0,0x98); lcm_w_word(" 国际警察日 "); }
else if ( mo == 0x03 && dd == 0x15 ){ lcm_w_test(0,0x98);lcm_w_word(" 消费者权益日 "); }
else if ( mo == 0x03 && dd == 0x17 ){ lcm_w_test(0,0x98);lcm_w_word(" 国际航海日 "); }
else if ( mo == 0x03 && dd == 0x21 ){ lcm_w_test(0,0x98);lcm_w_word(" 世界森林日 "); }
else if ( mo == 0x03 && dd == 0x22 ){ lcm_w_test(0,0x98);lcm_w_word(" 世界水日 "); }
else if ( mo == 0x03 && dd == 0x23 ){ lcm_w_test(0,0x98);lcm_w_word(" 世界气象日 "); }
else if ( mo == 0x03 && dd == 0x24 ){lcm_w_test(0,0x98); lcm_w_word("世界防治结核病日"); }
else if ( mo == 0x04 && dd == 0x01 ){lcm_w_test(0,0x98); lcm_w_word("愚人
没有合适的资源?快使用搜索试试~ 我知道了~
基于C51单片机+DS1302实时时钟+LCD12864屏显示万年历AD09设计硬件(原理图+PCB)+软件程序源代码.zip
共43个文件
log:14个
htm:2个
bak:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 91 浏览量
2024-05-09
08:58:51
上传
评论 1
收藏 976KB ZIP 举报
温馨提示
基于C51单片机+DS1302实时时钟+LCD12864屏显示万年历AD09设计硬件(原理图+PCB)+软件程序源代码,硬件2层板设计,大小为91*68mm,包括AD设计的原理图PCB+单片机软件程序,可供学习设计参考。 软件源码: main() { unsigned char e=0; KEY_1 = 1;KEY_2 = 1;KEY_3 = 1;KEY_4 = 1;//初始键盘 yy=0xff;mo=0xff;dd=0xff;xq=0xff;hh=0xff;mm=0xff;ss=0xff; //各数据刷新 Init_1302(); lcm_init();//初始化液晶显示器 lcm_clr();//清屏 welcome();//显示欢迎信息 DelayM(3000); //显示等留3秒 /*****************************************************************************/ while(1){//主循环 if (w == 0){ //正常走时 lcm_w_ss();//刷新 秒 }
资源推荐
资源详情
资源评论
收起资源包目录
基于C51单片机+DS1302实时时钟+LCD12864屏显示万年历AD09设计硬件(原理图+PCB)+软件程序源代码.zip (43个子文件)
硬件
Calender.PcbDoc 939KB
Calender.SchDoc 172KB
Calender.PcbDoc.htm 7KB
Project Outputs for Calender
Design Rule Check - Calender.html 10KB
Design Rule Check - Calender.drc 1KB
Calender.pdf 460KB
Calender.PcbLib 74KB
Calender.PrjPcbStructure 50B
Calender.OutJob 3KB
Calender.SchLib 5KB
Calender.PrjPcb 42KB
Calender.PcbDocPreview 57KB
Calender.Dat 3KB
Calender.SchDocPreview 57KB
Project Logs for Calender
Calender SCH ECO 2011-5-4 12-04-23.LOG 2KB
Calender PCB ECO 2011-5-4 12-17-39.LOG 7KB
Calender PCB ECO 2011-5-4 13-37-06.LOG 27B
Calender PCB ECO 2011-5-4 13-31-07.LOG 27B
Calender PCB ECO 2011-5-4 12-54-27.LOG 82B
Calender PCB ECO 2011-5-6 12-12-24.LOG 1KB
Calender PCB ECO 2011-5-6 12-13-12.LOG 27B
Calender PCB ECO 2011-5-4 12-51-09.LOG 364B
Calender SCH ECO 2011-5-4 13-35-07.LOG 66B
Calender PCB ECO 2011-5-6 12-13-55.LOG 227B
Calender PCB ECO 2011-5-4 12-34-17.LOG 2KB
Calender PCB ECO 2011-5-6 12-23-16.LOG 7KB
Calender SCH ECO 2011-5-4 12-05-07.LOG 990B
Calender PCB ECO 2011-5-4 13-10-34.LOG 113B
M-560.LIB 84KB
M-560.LIB.htm 4KB
程序
Timer_Calender_Version1.0
Timer_calender_Version1.0.LST 49KB
Timer_calender_Version1.0.OBJ 54KB
Timer_calender_Version1.hex 19KB
Timer_calender_Version1.0.uvgui.HUANGRICAI 67KB
Timer_calender_Version1.0_uvopt.bak 54KB
Timer_calender_Version1.lnp 82B
Timer_calender_Version1.M51 41KB
Timer_calender_Version1.0.uvopt 6KB
Timer_calender_Version1.0.plg 2KB
Timer_calender_Version1.0.uvproj 13KB
Timer_calender_Version1.0.c 26KB
Timer_calender_Version1.0 43KB
Timer_calender_Version1.0_uvproj.bak 13KB
共 43 条
- 1
资源评论
GJZGRB
- 粉丝: 1554
- 资源: 6281
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Java实现的pagerank算法.zip
- 基于C++实现的pagerank算法.zip
- 基于Python实现的pagerank算法.zip
- java面试题-leetcode题解之第14题最长公共前缀.zip
- java面试题-leetcode题解之第28题找出字符串中第一个匹配项的下标.zip
- java面试题-leetcode题解之第31题下一个排列.zip
- java面试题-leetcode题解之第6题Z字形变换.zip
- java面试题-leetcode题解之第8题字符串转换整数atoi.zip
- java面试题-leetcode题解之第13题罗马数字转整数.zip
- 夏总-2405232148.awb
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功