万年历_单片机万年历_LED1602_ds1302的代码

时间: 2023-06-14 21:08:21 浏览: 136
以下是基于单片机、LED1602和DS1302的万年历代码,你可以参考一下: ```c #include <reg52.h> //头文件,引用51单片机的寄存器定义 sbit SCL=P3^6; //定义DS1302通信引脚 sbit SDA=P3^4; sbit RST=P3^5; void delay_us(unsigned char i) //延时函数,i为延时时间 { while(i--); } void delay_ms(unsigned int i) { unsigned char j,k; for(k=0;k<i;k++) for(j=0;j<120;j++); } void ds1302_writebyte(unsigned char dat) //向DS1302写入一个字节 { unsigned char i; for(i=0;i<8;i++) { SDA=dat&0x01; //先送最低位 dat>>=1; //右移一位,将次低位变为最低位 SCL=0; //拉低时钟线 delay_us(1); //延时1us SCL=1; //拉高时钟线 delay_us(1); } } unsigned char ds1302_readbyte() //从DS1302读取一个字节 { unsigned char i,dat=0; for(i=0;i<8;i++) { dat>>=1; SCL=0; delay_us(1); if(SDA) //如果数据线为高电平,dat的最高位为1 dat|=0x80; SCL=1; delay_us(1); } return dat; } void ds1302_write(unsigned char addr,unsigned char dat) //向DS1302写入一个字节 { RST=0; delay_us(2); RST=1; ds1302_writebyte(addr); ds1302_writebyte(dat); RST=0; } unsigned char ds1302_read(unsigned char addr) //从DS1302读取一个字节 { unsigned char dat; RST=0; delay_us(2); RST=1; ds1302_writebyte(addr); dat=ds1302_readbyte(); RST=0; return dat; } void init_ds1302() //初始化DS1302 { ds1302_write(0x8e,0x00); //关闭写保护 ds1302_write(0x80,0x01); //控制寄存器,禁止写保护 ds1302_write(0x81,0x00); //秒归零 ds1302_write(0x84,0x00); //日归零 ds1302_write(0x8e,0x80); //打开写保护 } void lcd_write_cmd(unsigned char cmd) //向LCD发送指令 { P2=cmd; P1&=0xf8; P1|=0x04; delay_ms(1); P1&=0xfb; delay_ms(1); } void lcd_write_data(unsigned char dat) //向LCD发送数据 { P2=dat; P1&=0xf8; P1|=0x05; delay_ms(1); P1&=0xfb; delay_ms(1); } void lcd_init() //LCD初始化 { lcd_write_cmd(0x38); //设置8位数据总线,2行显示,5x7点阵字符 lcd_write_cmd(0x0c); //显示器开,光标关,光标移动关 lcd_write_cmd(0x06); //字符输入时,光标右移,整屏不移 lcd_write_cmd(0x01); //清屏 } void lcd_display(unsigned char *p) //显示字符函数 { unsigned char i; lcd_write_cmd(0x80); for(i=0;i<16;i++) { if(*p=='\0') break; lcd_write_data(*p++); } lcd_write_cmd(0x80+0x40); for(i=0;i<16;i++) { if(*p=='\0') break; lcd_write_data(*p++); } } void main() { unsigned char date[17]; unsigned char year,month,day,week,hour,minute,second; lcd_init(); init_ds1302(); while(1) { second=ds1302_read(0x81); //读取秒 minute=ds1302_read(0x83); //读取分 hour=ds1302_read(0x85); //读取时 week=ds1302_read(0x86); //读取星期 day=ds1302_read(0x87); //读取日 month=ds1302_read(0x88); //读取月 year=ds1302_read(0x89); //读取年 date[0]=(year/10)+'0'; //转换为字符 date[1]=(year%10)+'0'; date[2]='-'; date[3]=(month/10)+'0'; date[4]=(month%10)+'0'; date[5]='-'; date[6]=(day/10)+'0'; date[7]=(day%10)+'0'; date[8]=' '; date[9]=(week%10)+'0'; date[10]=' '; date[11]=(hour/10)+'0'; date[12]=(hour%10)+'0'; date[13]=':'; date[14]=(minute/10)+'0'; date[15]=(minute%10)+'0'; date[16]='\0'; lcd_display(date); //显示日期时间 } } ``` 注意:以上代码只是一个简单的示例,真实的万年历代码要根据需要进行修改和完善。

相关推荐

最新推荐

recommend-type

利用DS1302实现单片机控制的电子万年历

1. 采用单片机控制DS1302实现万年历功能; 2. 初始化时需要写入DS1302进行初始年月日时分秒校正; 3. DS1302外部晶振32.768KHz; 4. 采用5位LED或LCD1602显示; 5. 根据设计任务的要求编写程序,画出程序流程图,并...
recommend-type

基于单片机和DS1302电子万年历的设计

基于89C51,1602LCD,DS1302的万年历,有温度,闹钟,日期,时间可调等功能
recommend-type

数字万年历设计(80C51单片机、时钟芯片DS1320)

本系统的设计电路由实时时钟模块、环境温度检测模块、人机接口模块、报警模块等部分组成,采用 AT89C51单片机来实现系统的控制。其中时钟芯片采用DS1320,可实现年、月、日、时、分、秒等时间信息的采集和闹钟功能;...
recommend-type

基于AT89S52单片机的电子万年历设计

单片机万年历毕业设计, 本设计以AT89S52单片机为核心,构成单片机控制电路,结合DS1302时钟芯片和24C02FLASH存储器,显示阳历年、月、日、星期、时、分、秒和阴历年、月、日,在显示阴历时间时,能标明是否闰月,...
recommend-type

带温度的电子万年历的设计

美国DALLAS公司推出的具有涓细电流充电能的低功耗实时时钟电路DS1302。它可以对年、月、日、周日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。对于数字电子万年历采用直观的...
recommend-type

RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz

REALTEK 8188FTV 8188eus 8188etv linux驱动程序稳定版本, 支持AP,STA 以及AP+STA 共存模式。 稳定支持linux4.0以上内核。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

numpy数组索引与切片技巧

![numpy数组索引与切片技巧](https://img-blog.csdnimg.cn/f610d87ed50745d2b7052af887da2d0d.png) # 2.1 整数索引 整数索引是 NumPy 数组中索引元素的最简单方法。它允许您使用整数来访问数组中的特定元素或子数组。 ### 2.1.1 单个元素索引 单个元素索引使用一个整数来访问数组中的单个元素。语法为: ```python array[index] ``` 其中: * `array` 是要索引的 NumPy 数组。 * `index` 是要访问的元素的索引。 例如: ```python import
recommend-type

javaboolean类型怎么使用

Java中的boolean类型表示真或假,只有两个可能的值。在Java中,boolean类型的变量可以被初始化为false或true。可以使用以下语法来声明和初始化一个boolean类型的变量: ``` boolean myBoolean = true; ``` 在Java中,boolean类型的变量通常用于控制流程和条件测试,例如: ``` if (myBoolean) { // do something if myBoolean is true } else { // do something if myBoolean is false } ``` 除了if语句之外
recommend-type

c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf

校园超市商品信息管理系统课程设计旨在帮助学生深入理解程序设计的基础知识,同时锻炼他们的实际操作能力。通过设计和实现一个校园超市商品信息管理系统,学生掌握了如何利用计算机科学与技术知识解决实际问题的能力。在课程设计过程中,学生需要对超市商品和销售员的关系进行有效管理,使系统功能更全面、实用,从而提高用户体验和便利性。 学生在课程设计过程中展现了积极的学习态度和纪律,没有缺勤情况,演示过程流畅且作品具有很强的使用价值。设计报告完整详细,展现了对问题的深入思考和解决能力。在答辩环节中,学生能够自信地回答问题,展示出扎实的专业知识和逻辑思维能力。教师对学生的表现予以肯定,认为学生在课程设计中表现出色,值得称赞。 整个课程设计过程包括平时成绩、报告成绩和演示与答辩成绩三个部分,其中平时表现占比20%,报告成绩占比40%,演示与答辩成绩占比40%。通过这三个部分的综合评定,最终为学生总成绩提供参考。总评分以百分制计算,全面评估学生在课程设计中的各项表现,最终为学生提供综合评价和反馈意见。 通过校园超市商品信息管理系统课程设计,学生不仅提升了对程序设计基础知识的理解与应用能力,同时也增强了团队协作和沟通能力。这一过程旨在培养学生综合运用技术解决问题的能力,为其未来的专业发展打下坚实基础。学生在进行校园超市商品信息管理系统课程设计过程中,不仅获得了理论知识的提升,同时也锻炼了实践能力和创新思维,为其未来的职业发展奠定了坚实基础。 校园超市商品信息管理系统课程设计的目的在于促进学生对程序设计基础知识的深入理解与掌握,同时培养学生解决实际问题的能力。通过对系统功能和用户需求的全面考量,学生设计了一个实用、高效的校园超市商品信息管理系统,为用户提供了更便捷、更高效的管理和使用体验。 综上所述,校园超市商品信息管理系统课程设计是一项旨在提升学生综合能力和实践技能的重要教学活动。通过此次设计,学生不仅深化了对程序设计基础知识的理解,还培养了解决实际问题的能力和团队合作精神。这一过程将为学生未来的专业发展提供坚实基础,使其在实际工作中能够胜任更多挑战。