版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 基于单片机的多功能数字时钟的研究 付文宇 中国华电集团公司四川宝珠寺水力发电厂 628003 四川广元 摘 要 本文提出的多功能数字时钟是以单片机、时钟芯片为核心,辅以必要的电路完成的,本系统通过按键来实现数字时钟的实时显示、日历、闹钟等不同的功能。数字时钟在日常生活中,它以价格低廉、小巧、使用方便、走时精度高,而受到广大消费者的喜爱。 关键词 数字时钟 单片机 时钟芯片 单片机自发明以来,以其超高的性价比,很快就受到人们的关注,单片机的应用非常广、发展也很迅速,现已经广泛的应用于各个领域。在单片机领域中使用最多的是51系列,51系列单片机具有廉价,低功耗,稳定等优点,本系统采用的是STC8
2、9C52单片机。该系统还使用了时钟芯片DS1302,相比用单片机内部的可编程定时/计数器完成,具有占单片机资源小,耗时短,抗干扰能力强等优点。1 硬件研究本系统的电路主要有电源模块、主控芯片STC89C52模块、时钟芯片模块、显示模块、按键模块、复位电路模块等六大模块组成。1.1 电源模块 电源模块采用7805进行稳压,保证+5V电压的稳定输出1.2 主控模块STC89C52单片机能保证高性能状态运行的同时还能够具有较低的能耗,其承担了所有操作任务的调控与分配工作。1.3 时钟芯片模块 DS1302是美国Dallas公司推出的涓流充电时钟芯片。它能够对年、月、日、周、时、分、秒进行计时,并有对
3、月末日期、闰年天数自动补偿功能。DS1302内部含有实时时钟以及RAM,双电源管脚用于主电源和备用电源,其中Vcc2是主电源,在双电源系统中提供主电源,Vcc1是后备电源。在控制指令字输入后,数据将写入DS1302,读出数据时从低位0位到高位7,数据输入从位0开始。如下图所示。 时钟芯片DS1302一共含有12个寄存器,所有寄存器形式均为BCD码形式,其中DS1302D 的日历、时间寄存器如下表所示。 写寄存器读寄存器Bit7Bit6Bit5Bit7Bit3Bit2Bit1Bit080H81HCH10秒秒82H83H10分分84H85H12/010时时/PM86H87H0010 日日88H89
4、H00010月月8AH8BH00000星期8CH8DH 10年年8EH8FHWP00000001.4 显示模块本系统中使用的显示器是液晶显示器LCD1602,液晶显示器由一定数量的彩色或黑白像素组成,是平面超薄的显示设备。液晶显示器具有功耗低等优势,在单片机应用系统中的应用越来越广泛。1602芯片的功能是显示时间和定时时间。它是一种专门用来显示字母、数字、符号等的液晶模块。LCD1602显示模式设置如下表所示。指令码功能00111000设置16*2显示,5*7点阵,8位数据接口LCD1602显示开/关及光标设置如下表所示。 指令码功能00001DCBD=1开显示;D=0关显示C=1显示光标;C
5、=0不显示光标B=1光标闪烁;B=0光标不显示000001NSN=1当读或写一个字符后地址指针加一,且光标加一N=0当读或写一个字符后地址指针减一,且光标减一S=1当写一个字符,整屏显示左移(N=1)1.5按键模块设计 按键模块设计一共设计了5个按键,其中有4个是独立按键,分别与单片机的P3.4、P3.5、P3.6、P3.7接口相连,而另一个按键的功能是用来复位系统的,该种接法操作、查询、程序处理都不复杂,可以节省许多步骤。对以上4个按键作简要说明:S4SET 键,S3UP键,S2DOWN键,S5OUT/STOP键。SET 键:按下SET键能对时间进行调整,按键的次数决定修改的时间,分别是秒,
6、分,时,日,月,年,能依次修改; UP键:按下UP键能对SET键的操作进行选择,能任意选定秒,分,时,日,月,年进行修改;DOWN键:按下DOWN键能对SET键的操作进行减操作;OUT键:按下OUT键时就直接退出时间调整功能。1.6复位电路模块 据应用的要求,复位操作通常有两种形式:上电复位和手动复位。本系统采用上电且开关复位电路,上电复位在电源接通后会自动复位。2 软件研究多功能数字时钟的功能是在程序控制下实现的。该系统的软件设计方法与硬件设计相对应,按整体功能分成多个不同的程序模块,分别进行设计、编程和调试,最后通过主程序将各程序模块连接起来。本系统的软件部分主要要进行公历计算程序设计,按
7、键的扫描输入等。程序开始运行后首先要进行初始化,把单片机的各引脚的状态按程序里面的初始化命令进行初始化,初始化完成后运行公历计算程序,得到公历的时间、日期信息,再运行按键扫描程序,检测有无按键按下,如果没有按键按下则直接调用节日计算程序,根据得到的公历日期信息计算出节日,如果有按键按下则更新按键修改后的变量后送给节日计算程序,由节日计算程序根据修改后的变量计算出对应的节假日,计算完成后运行显示程序,显示程序将得到公历信息、节假日信息送给对应的数码管让其显示。2.1主程序流程开始DS1302初始化设置DS1302读年月日星期时分秒将读取的数据处理后送液晶屏显示返回2.2 程序设计本系统的时间读取
8、主要来源于单片机对DS1302的操作,在硬件上时钟芯片DS1302与单片机的连接需要三条线,即SCLK(7)、I/O(6)、RST(5),读取写程序设计如下:sbit clk = P13; /ds1302时钟线定义sbit io = P14; /数据线sbit rst = P15; /复位线/秒 分 时 日 月 年 星期 uchar code write_add=0x80,0x82,0x84,0x86,0x88,0x8c,0x8a; /写地址uchar code read_add =0x81,0x83,0x85,0x87,0x89,0x8d,0x8b; /读地址uchar code init_
9、ds =0x58,0x00,0x00,0x01,0x01,0x13,0x1; uchar miao,fen,shi,ri,yue,week,nian;uchar i;uchar fen1=0x11,shi1=0; /两个闹钟变量的定义bit open1;/*写一个数据到对应的地址里*/void write_ds1302(uchar add,uchar dat)rst = 1; /把复位线拿高for(i=0;i<8;i+) /低位在前clk = 0; /时钟线拿低开始写数据io = add & 0x01; add >>= 1; /把地址右移一位clk = 1; /时钟线
10、拿高for(i=0;i<8;i+)clk = 0; /时钟线拿低开始写数据io = dat & 0x01;dat >>= 1; /把数据右移一位clk = 1; /时钟线拿高rst = 0; /复位线合低clk = 0;io = 0;/*从对应的地址读一个数据出来*/uchar read_ds1302(uchar add)uchar value,i;rst = 1; /把复位线拿高for(i=0;i<8;i+) /低位在前clk = 0; /时钟线拿低开始写数据io = add & 0x01; add >>= 1; /把地址右移一位clk =
11、 1; /时钟线拿高for(i=0;i<8;i+)clk = 0; /时钟线拿低开始读数据value >>= 1;if(io = 1)value |= 0x80;clk = 1; /时钟线拿高rst = 0; /复位线合低clk = 0;io = 0;return value; /返回读出来的数据/*把要的时间 年月日 都读出来*/void read_time()miao = read_ds1302(read_add0);/读秒fen = read_ds1302(read_add1);/读分shi = read_ds1302(read_add2);/读时ri = read_d
12、s1302(read_add3);/读日yue = read_ds1302(read_add4);/读月nian = read_ds1302(read_add5);/读年week = read_ds1302(read_add6);/读星期Conversion(0,nian,yue,ri);/农历转换 n_nian = year_moon ;n_yue = month_moon ;n_ri = day_moon ;/*把要写的时间 年月日 都写入ds1302里*/void write_time()write_ds1302(0x8e,0x00);/打开写保护write_ds1302(write_a
13、dd0,miao);/写秒write_ds1302(write_add1,fen);/写分write_ds1302(write_add2,shi);/写时write_ds1302(write_add3,ri);/写日write_ds1302(write_add4,yue);/写月write_ds1302(write_add5,nian);/写星期write_ds1302(write_add6,week);/写年write_ds1302(0x8e,0x80);/关闭写保护/*把数据保存到ds1302 RAM中*0-31*/void write_ds1302ram(uchar add,uchar
14、dat)add <<= 1; /地址是从第二位开始的add &= 0xfe; /把最低位清零 是写的命令add |= 0xc0; /地址最高两位为 1 write_ds1302(0x8e,0x00);write_ds1302(add,dat);write_ds1302(0x8e,0x80);/*把数据从ds1302 RAM读出来*0-31*/uchar read_ds1302ram(uchar add)add <<= 1; /地址是从第二位开始的add |= 0x01; /把最高位置1 是读命令add |= 0xc0; /地址最高两位为 1 return(rea
15、d_ds1302(add);/*初始化ds1302时间*/void init_ds1302()uchar i;rst = 0;/第一次读写数据时要把IO品拿低clk = 0;io = 0;i = read_ds1302ram(30); if(i != 3)i = 3;write_ds1302ram(30,i); /4050 4100 3080write_ds1302(0x8e,0x00); /打开写保护for(i=0;i<7;i+)write_ds1302(write_addi,init_dsi);/把最高位值0 允许ds1302工作write_ds1302(0x8e,0x80);/关写保护DS1302与微处理器进行数据交换时,首先由微处理器向电路发送命令字节,命令字节最高位MSB(D7)必须为逻辑 1,如果D7=0,则禁止写DS1302,即写保护;D6=0,指定时钟数据,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年本溪市南芬区中小学编制教师招聘笔试模拟试题及答案详解
- 2026年巴彦淖尔市临河区中小学编制教师招聘笔试模拟试题及答案详解
- 2026安徽中烟再造烟叶科技有限责任公司招聘7人备考题库附答案详解(综合题)
- 2026年延安市招募大学生到政府机关见习(70人)参考题库及参考答案详解(培优A卷)
- 2026广东佛山市顺北智慧管理有限公司公开招聘2人笔试题库【名师系列】附答案详解
- 2026年福建厦门市发展和改革委员会招聘非在编辅助岗人员1人备考题库(考点提分)附答案详解
- 2026新疆四十七团昆仑幼儿园招聘(2人)参考题库含答案详解(培优B卷)
- 2026年西咸新区沣西新城就业见习人员招募(291人)笔试题库附完整答案详解(必刷)
- 2026辽宁沈阳农业大学招聘高层次人才48人备考题库(培优)附答案详解
- 2026四川凉山州急需紧缺专业大学生顶岗实习招募285人模拟试卷【培优B卷】附答案详解
- UL498标准中文版-2019插头插座UL标准中文版
- 八年级英语教研组工作总结
- 《电脑城里的鼠精灵》说课稿
- 部编版七年级下册历史期末复习知识点提纲
- 农民工 合同模板
- PiCCO-监测技术操作管理
- DL-T5153-2014火力发电厂厂用电设计技术规程
- TCEA 0050-2023 电梯导轨型钢
- 客户之声(VOC)收集与应用
- 突发性耳聋教学查房
- 2021新苏教版小学科学四年级下册教学与实验计划
评论
0/150
提交评论