万年历与LCD时间显示

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

> ds1302+LCD1602.rar > 万年历.C

/******************************************************************** * 标题: xl 系列单片机实验仪1602 液晶万年历演示程序*

* 文件: XLLCDWNL.c *

* 日期: 2006-1-5 *

* 版本: 3.0 (试验通过版)可用xl600-xl1000 单片机综合试验仪试验*

* 作者: 部分程序参考网上修改而成,本站最终改编测试,特别对原作致敬!* * 邮箱: sxj1974@ *

* 网站: *

********************************************************************* *日历时钟*

*按K1,进入设置状态*

*按k2, 停止闹钟声音*

*按k3, 依次进入闹钟功能是否启用,闹钟时,分秒,年,月,日及时间时,分,秒的设置,*

*直到退出设置状态*

*按k4, 调整是否起用闹钟和调节闹钟时,分,秒,年,月,日,时间的时,分,秒的

数字*

*LCD 第二排中间显示小喇叭,表示启用闹钟功能,无则禁止闹钟功能* 8888

*(可在调整状态进行设置)*

*正常状态,LCD 上排最前面显示自定义字符,LCD 下排最前面闪动"XUELIN" * *设置状态,LCD 上排最前面显示"P", 下排最前面在设置闹钟时间时显示"alarm:", *

*其它状态显示"time" *

*年代变化2000--2099, 星期自动转换*

*程序中有自定义字符写入*

********************************************************************* * 【版权】Copyright(C) 深圳市学林电子有限公司 *

* 【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! *

* 【技术支持】请访问/bbs/index.asp 官方论坛*

********************************************************************* #include

#include

unsigned char code dis_week[]={"SUN,MON,TUE,WED,THU,FRI,SAT"}; unsigned char code para_month[13]={0,0,3,3,6,1,4,6,2,5,0,3,5}; // 星期月参变数

unsigned char data dis_buf1[16]; //lcd 上排显示缓冲区

unsigned char data dis_buf2[16]; //lcd 下排显示缓冲区

unsigned char data year,month,date,week;// 年、月、日、星期

unsigned char data armhour,armmin,armsec;// 闹钟时、分、秒

unsigned char data hour,min,sec,sec100;// 时、分、秒、百分之一秒unsigned char data flag,vkey,skey;// 设置状态计数标志、按键先前值、按键当前值

bit alarm; //标识是否启用闹钟,1--启用,0--关闭

sbit rs = P2^0; //LCD 数据/命令选择端(H/L)

sbit rw = P2^1; //LCD 读/写选择端(H/L)

sbit ep = P2^2; //LCD 使能控制

sbit PRE = P1^0; //调整键(k3)

sbit SET = P1^1; //调整键(k4)

sbit SPK = P2^3;

void delayms(unsigned char ms); // 延时程序

bit lcd_busy(); //测试LCD 忙碌状态程序

void lcd_wcmd(char cmd); //写入指令到LCD 程序

void lcd_wdat(char dat); //写入数据到LCD 程序

void lcd_pos(char pos); //LCD 数据指针位置程序

void lcd_init(); //LCD 初始化设定程序

void pro_timedate(); //时间日期处理程序

void pro_display(); //显示处理程序

void pro_key(); //按键处理程序

void time_alarm(); //定时报警功能(闹钟)

unsigned char scan_key(); //按键扫描程序

unsigned char week_proc(); //星期自动计算与显示函数

bit leap_year(); //判断是否为闰年

void lcd_sef_chr(); //LCD 自定义字符程序

void update_disbuf(unsigned char t1,unsigned char t2[],unsigned char dis_h,unsigned char dis_m,unsigned char dis_s); //更新显示缓冲区函数

// 延时程序

void delay(unsigned char ms)

{ while(ms--)

{ unsigned char i;

for(i = 0; i< 250; i++)

{

_nop_(); //执行一条_nop_() 指令为一个机器周期

_nop_();

_nop_();

_nop_();

}

}

}

//测试LCD 忙碌状态

bit lcd_busy()

{

bit result;

rs = 0;

rw = 1;

ep = 1;

_nop_();

_nop_();

_nop_();

_nop_();

result =(bit)(P0&amt;0x80); //LCD 的D0--D7 中,D7=1 为忙碌,D7=0 为空闲ep = 0;

return result;

}

//写入指令到LCD

void lcd_wcmd(char cmd)

相关文档
最新文档