基于51单片机电子闹钟或万年历的设计课程设计精内容摘要:
调时功能 、 闹铃功能。 其精确度完全可以满足日常生活显示时间的需要;调时功能,方便快捷;校时功能保证了时钟准确和可靠性。 硬件设施合乎要求,软件设计可以配合硬件实现要求的功能。 但是由于时间比较短,前期设计出现部分不足:如位选闪烁功能不能实现、闹钟的开启与关闭、间断蜂鸣声等。 这些只是软件设计时相应功能部分还不完善造成。 不过经仔细思考和程序的完善,最终将软件设计改进,并完全可以很好实现所有要求的功能。 可见技术在不断进步,机械式时钟已经被淘汰,取而代之的是具有高度准确性和直观性且无机械装置,具有 更长的使用寿命等优点的数字时钟。 数字时钟更具人性化,更能提高人们的生活质量,更受人们欢迎。 无可否认机械时代已经过去,电子时代已经到来。 做为新时代的我们,更应该提高自身能力,适应新时代的发展。 知识来自实践,多去生活中探询所需要的。 对于上述所提到的研究课题,我们应尽量考虑到人的因素,增强时钟的实用性和操作性,为使用者提供切实的方便,营造一种舒适的生活氛围。 所以,在设计的时候,应该从多方面、多角度去考虑问题,而且应该进一步提高时钟的质量。 另外,在本次设计的过程中,我发现很多的问题,虽然以前没有做过这样的设计但通过这次设计我学会了很多东西,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,比如写一个程序看其功能很少认为编写程序简单,但到编程的时候才发现一些细微的知识或低级错误经常犯做不到最后常常失败,所以有些东西只有学精弄懂并且要细心才行,只学习理论有些东西是很难理解的,更谈不上掌握。 从这次的课程设计中,我们真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的 练习的过程中才能提高,我想这就是我在这次课程设计中的最大收获。 武汉理工大学《单片机原理与应用课程设计》 21 参考文献 [1] 张友德,赵志英,涂时亮 .《单片微型机原理、应用与实验》 [M].上海:复旦大学出版社, 2020. [2] 赵亮,侯国锐 .《单片机 C 语言编程与实例》 [M].北京:人民邮电出版社, 2020. [3] 高鹏,安涛,寇怀成 .《电路设计与制版 ——protel99 入门与提高》 [M].北京:人民邮电出版社, 2020. [4] 谭浩强 .《 C 程序设计 (第三版)》 [M].北京:清华大学出版社 ,2020. [5] 李朝青 .《单片机原理及接口技术》 [M].北京:北京航空航天大学出版社, 2020. [6] 康光华,《电子技术基础 — 模拟部分(第五版)》 [M].北京:高等教育出版社, 2020. 武汉理工大学《单片机原理与应用课程设计》 22 附录一 系统原理图 武汉理工大学《单片机原理与应用课程设计》 23 附录二 系统程序 include //包含单片机寄存器的头文件 include //包含 _nop_()函数定义的头文件 unsigned char code digit[10]={0123456789}。 //定义字符数 组显示数字 sbit SCLK=P1^0。 //位定义 1302 芯片的接口,时钟输出端口定义在 引脚 sbit DATA=P1^1。 //位定义 1302 芯片的接口,数据输出端定义在 引脚 sbit RST=P1^2。 //位定义 1302 芯片的接口,复位端口定义在 引脚 sbit K1=P3^2。 //定义按键 1 触发中断 0,调整时间按钮 sbit K4=P3^3。 //定义按键 1 触发中断 1,设置闹钟按钮 sbit K2=P1^4。 //定义按键 2, + sbit K3=P1^5。 //定义按键 3, sbit BEEP=P3^6。 //蜂鸣器 unsigned char miao,fen,shi,tian,yue,nian。 //分别储存苗、分、小时,日,月,年 unsigned char settime=0。 unsigned char setclock=0。 unsigned char clock_hour,clock_min,clock_sec。 /***************************************************** 函数功能:延 时若干微秒 入口参数: n ***************************************************/ void delaynus(unsigned char n) { unsigned char i。 for(i=0。 in。 i++)。 } /***************************************************** 函数功能:向 1302 写一个字节数据 入口参数: x ***************************************************/ void Write1302(unsigned char dat) { unsigned char i。 SCLK=0。 //拉低 SCLK,为脉冲上升沿写入数据做好准备 delaynus(10)。 //稍微等待,使硬件做好准备 for(i=0。 i8。 i++) //连续写 8 个二进制位数据 { DATA=datamp。 0x01。 //取出 dat 的第 0 位数据写入 1302 低位在前,高位在后 delaynus(10)。 //稍微等待,使硬件做好准备 SCLK=1。 //上升沿写入数据 delaynus(10)。 //稍微等待,使硬件做好准备 SCLK=0。 //重新拉低 SCLK,形成脉冲 dat=1。 //将 dat 的各数据位右移 1 位,准备写入下一个数据位 } } /***************************************************** 函 数功能:根据命令字,向 1302 写一个字节数据 入口参数: Cmd,储存命令字; dat,储存待写的数据 ***************************************************/ 武汉理工大学《单片机原理与应用课程设计》 24 void WriteSet1302(unsigned char Cmd,unsigned char dat) { RST=0。 //禁止数据传递 SCLK=0。 //确保写数居前 SCLK 被拉低 RST=1。 //启动数据传输 delaynus(10)。 //稍微等待,使硬件做好准备 Write1302(Cmd)。 //写入命令字 Write1302(dat)。 //写数据 SCLK=1。 //将时钟电平置于高电平状态 RST=0。 //禁止数据传递 } /***************************************************** 函数功能:从 1302 读一个字节数据 入 口参数: x ***************************************************/ unsigned char Read1302(void) { unsigned char i,dat。 delaynus(10)。 //稍微等待,使硬件做好准备 for(i=0。 i8。 i++) //连续读 8 个二进制位数据 { dat=1。 if(DATA==1) //如果读出的数据是 1 dat|=0x80。 //将 1 取出, 写在 dat 的最高位 SCLK=1。 //将 SCLK 置于高电平,为下降沿读出 delaynus(10)。 //稍微等待 SCLK=0。 //拉低 SCLK,形成脉冲下降沿 delaynus(10)。 //稍微等待 } return dat。 //将读出的数据返回 } /***************************************************** 函数功能:根据命令字,从 1302 读取一个字节数据 入口 参数: Cmd ***************************************************/ unsigned char ReadSet1302(unsigned char Cmd) { unsigned char dat。 RST=0。 //拉低 RST SCLK=0。 //确保写数居前 SCLK 被拉低 RST=1。 //启动数据传输 Write1302(Cmd)。 //写入命令字 dat=Read1302()。 //读出数据 SCLK=1。 //将时钟电平置于已知状态 RST=0。 //禁止数据传递 return dat。 //将读出的数据返回 } /***************************************************** 函数功能: 1302 进行初始化设置 ***************************************************/ void Init_DS1302(unsigned char year,unsigned char mon,unsigned char dt, unsigned char hour,unsigned char min,unsigned char sec) { /* unsigned char flag。 武汉理工大学《单片机原理与应用课程设计》 25 flag= ReadSet1302(0x81)。 if(flagamp。 0x80) { //判断时钟芯片是否关闭 WriteSet1302(0x8E,0x00)。 //根据写状态寄存器命令字,写入不保护指令 WriteSet1302(0x80,((55/10)4|(55%10)))。 //根据写秒寄存器命令字,写入秒的初始值 WriteSet1302(0x82,((59/10)4|(59%10)))。 //根据写分寄存器命令字,写入分的初始值 WriteSet1302(0x84,((23/10)4|(23%10)))。 //根据写小时寄存器命令字,写入小时的初 始值 WriteSet1302(0x86,((18/10)4|(18%10)))。 //根据写日寄存器命令字,写入日的初始值 WriteSet1302(0x88,((6/10)4|(6%10)))。 //根据写月寄存器命令字,写入月的初始值 WriteSet1302(0x8c,((14/10)4|(9%10)))。 //根据写年寄存器命令字,写入年的初始值 WriteSet1302(0x90,0xa5)。 //打开充电功能 选择 2K 电阻充电方式 WriteSet1302(0x8E,0x80)。 //根据写状态寄存器命令字,写入保护指令 } }*/ //如果不想每次都初始化时间,也就是掉电后还想让时钟继续走时的话 就用上面的语句 /*这是每次都初始化的语句 */ //2020017 Tue 22:36:55 WriteSet1302(0x8E,0x00)。 //根据写状态寄存器命令字,写入不保护指令 WriteSet1302(0x80,((sec/10)4|(sec%10)))。 //根据写秒寄存器命令字,写入秒的初始值 WriteSet1302(0x82,((min/10)4|(min%10)))。 //根据写分寄。基于51单片机电子闹钟或万年历的设计课程设计精
相关推荐
CH0引脚的信号, LTC1865采样的范围为 Vref到 Vcc,其中 Vref的电压由引脚 Vref决定,可以通过硬件配置为 1V~Vcc。 表 32 通道配置字选择 引脚功能: CONV:转换开始输入端。 CH0: 模拟输入通道 0。 CH1: 模拟输入通道 1。 GND:接 地 端。 SDI:串行 数据输入。 SDO:串行 数据输出。 SCK 串行时钟输入端。 VCC: 电源输入 端。
计是基于 Keil C和 Proteus软件联合调试实现的。 首先在 Keil C 软件环境下写入源程序然后建立工程文件编译运行无误后使其生成相应的 .HEX 文件,接着在 Proteus 软件环境中将生成的 .HEX 文件加载进入 51单片机中 ,在电路连接无误的情况下进行调试运行即可 【 6】。 软件工具简介 Proteus 简介 英国 Labcenter 公司推出的 Proteus
)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿 (Princeton)结构。 INTEL 的 MCS51 系列单片机采用的是哈佛结构的形式,而后续产品 16 位的 MCS96 系列单片机则采用普林斯顿结构。 2. 8051 引脚图 单片机的 40个引脚大致可分为 4 类:电源、时钟、控制和 I/O 引脚。 电源 : ⑴ VCC 芯片电源,接 +5V; ⑵
使能端,当 E端由高电平跳变成低电平时,液晶模块执行命令。 第 7~ 14脚: D0~ D7为 8位双向数据线。 第 15脚:背光源正极。 第 16脚:背光源负极。 图 6 对射式光电开关 光电开关 E18的技术参 数 : DSJKFHJKDH FJDHJKFH KDSJH JKDHF JKDS HKJ HGFDSJHF JHFJK HFKSD JKFJDSKJF DSJF。 DS 输出电流
43 DS1302 管脚图 如果在传送过程中置 RST 为低电平,则会终止本次数据传送,并且 I/O 引脚变为高阻态。 上电运行时,在 VCC = 之前, RST 脚必须保持低电平。 只有在SCLK 为低电平时,才能将 RST 置为高电平。 DS1302 的管脚图如图 43 所示,表42 为各引脚的功能。 表 42 DS1302 引脚功能表 引脚号 引脚名称 功能 1 VCC2 主电源 2, 3
灵活使用指令运算、存放数据,中断响应速度快。 AVR 像 8051 一样,有多个固定中断向量入口地址,可快速响应中断。 高级 C 语言编程效率高。 从高级语言 C 代码完成同一任务实例来比较, 8 MHz AVR 单片机的速度相当于 224 MHz 的 80C51 单片机, AVR 比 80C51 快 28 倍。 AVR 是低功耗单片机,具有休眠省电功能 (Power Down)及闲置