收藏 分销(赏)

数字时钟52712.doc

上传人:xrp****65 文档编号:7457803 上传时间:2025-01-05 格式:DOC 页数:19 大小:383KB 下载积分:10 金币
下载 相关 举报
数字时钟52712.doc_第1页
第1页 / 共19页
数字时钟52712.doc_第2页
第2页 / 共19页


点击查看更多>>
资源描述
努力不一定成功,但成功必须努力! 目录 1、引言 2 2、时钟设计方案及其工作原理 2 2.1 时钟设计方案 2 2.2时钟工作原理 2 3、硬件设计与实现 3 3.1单片机简介及其最小系统原理图 3 3.2 LCD1602简介及其显示原理图 4 3.3调时电路及其原理图 5 4、程序设计 5 4.1程序设计流程图 5 4.2源程序:见附录 5 4.3 时钟原理的仿真 6 5、元器件选择、仿真与制作 6 5.1原器件详细清单 6 5.2 PCB板设计 7 5.3印制板制作 7 5.4组装及焊接 7 6、调试 8 7、操作说明 8 8、结束语 8 参考文献 9 附录 10 1、引言 时间是人类生活中不可或缺的重要元素。如果没有时间的概念,社会将不会有所发展和进步,从古代的沙漏、十二天干地支,到后来的机械以及当今的石英钟,都充分显示出了时间的重要性,同时也代表着科技的进步,致力于计时器的研究和充分发挥时钟作用,将有着重要的意义。 电子时钟主要是利用电子技术将时钟电子化、数字化、多功能化、体积小、LCD显示界面好、可扩展性强等特点,被广泛应用于生活和工作中。当今市场上电子时钟种类繁多,外形小巧别致。也有体积较大的,如公共场所的大型电子时钟等。电子时钟首先是数字化了时间显示等,在此基础上,人们可以根据不同场合的需求,在时钟加上其他功能,如万年历等。 2、时钟设计方案及工作原理 2.1时钟设计方案 电子时钟既可以通过纯硬件实现,也可以通过软硬件结合实现,通过多方面的考虑,本设计决定采用具有集成度高、体积小、控制功能强等特点的AT89S52单片机来实现时钟设计,另外采用16位LCD1602液晶显示器显示日期、星期和时间,用3个开关按钮构成调时电路, 5V直流供电,外加一复位电路。 本设计电路简单,成本低廉,在功能方面有待改进。 2.2时钟工作原理 本系统以AT89S52芯片为核心,通过液晶LCD1602作为显示模块。利用单片机AT89S52通过程序进行计算处理,最后送到液晶显示模块进行显示出日期、星期和时间。如果日期、时间和星期不正确,可以连接P1.1、P1.2、P1.3的开关S1、S2、S3对它们进行校准。 3、硬件设施及其实现 3.1单片机简介及其最小系统原理图:  简介:与MCS-51单片机产品兼容、8K字节在系统可编程Flash存储器、1000次擦写周期、全静态操作:0Hz~33Hz、三级加密程序存储器、32个可编程I/O口线、三个16位定时器/计数器、八个中断源、全双工UART串行通道、低功耗空闲和掉电模式、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符 。 AT89S52单片机最小系统电路原理图:本系统采用ATMEL公司的单片机AT89S52来实现,利用单片机软件编程灵活、自由度大的特点,力求用软件完善各种控制算法和逻辑控制。本系统选用的AT89S52芯片时钟可达12MHz,运算速度快,控制功能完善。其内部具有256字节RAM,而且内部含有8KB的flash ROM 不需要外扩展存储器,可使系统整体结构更为简单、实用。主控芯片AT89S52单片机最小系统电路原理图如下所示: 图1 AT89S52单片机系统原理图 3.2液晶LCD1602简介: 显示容量:16×2个字符; 芯片工作电压:4.5—5.5V; 工作电流:2.0mA(5.0V) 模块最佳工作电压:5.0V; 字符尺寸:2.95×4.35(W×H)mm 引脚功能说明:1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表1所示: 表1 编号 符号 引脚说明 编号 符号 引脚说明 1 VSS 电源地 9 D2 数据 2 VDD 电源正极 10 D3 数据 3 VL 液晶显示偏压 11 D4 数据 4 RS 数据/命令选择 12 D5 数据 5 R/W 读/写选择 13 D6 数据 6 E 使能信号 14 D7 数据 7 D0 数据 15 BLA 背光源正极 8 D1 数据 16 BLK 背光源负极 液晶显示模块电路原理图如下: 该模块有控制器HD44780、驱动器HD44100和液晶板组成。HD44780是典型的液晶显示控制器,它集控制和驱动于一体,本身就可以驱动单行16字符或2行8字符。对于2行16字符的显示要增加HD44100驱动器。HD44780由字符CGROM、自定义字符发生器CGRAM和显示缓冲区DDRAM组成。 图2 LCD1602液晶显示原理图 3.3调时电路: 调时电路由“P1.1/P1.2/P1.3—按键—接地”构成,按下S1按键,选择需要调整的项目,此时电子时钟停止走动,此时若再按下S2键则进行加时调整;若按下S3键则进行减时调整。时间调整从秒到 年均完毕后,电子时钟开始走动,从而实现了时间调整功能。 图3 调时电路原理图 4、程序设计结构框图 4.1程序设计流程图 开始 初始化 写时间、日期、星期 读时间、日期、星期 显示子程序 修改日期、时间和星期程序 返回 图4 程序设计结构框图 4.2源程序:见附录 4.3 时钟原理的仿真 制作PCB版之前先用proteus软件进行仿真,仿真成功后开始做板。其仿真图如下所示: 图5 时钟原理仿真图 5、元器件选择与制作 5.1元器件详细清单见下表: 表2 元件名称 数量 元件名称 数量 AT89S52 1 二极管Diode 1N4148 1 LCD1602 1 2根排针 2 12MHZ晶振 1 发光二极管(红) 1 10uF电解电容 1 10K、2.2K、1K、10电阻 各1 30pF普通电容 2 按钮 4 5.2 PCB板设计 使用DXP2004绘图软件,在13*8方厘米的区间布局、布线,注意元件的封装以及焊盘得到大小要根据实物元件的实际情况。线的宽度设为1毫米,地线为1.5毫米,电源线为1.2毫米;焊盘内径设为0.9毫米,外径分别为2毫米。根据需要对PCB进行补泪滴。最终的PCB板图如下所示: 图6 PCB板图 5.3 印刷板制作 印刷板设计合理与否关系到电路在焊接、装配、调试中是否方便。好的印刷板必须排列紧凑、使用方便。打印好PCB图后就可以印刷电路板了,印完之后就拿去腐蚀然后涂上松香防止被氧化。等到松香晾干之后就开始钻孔。 5.4 组装及焊接 首先用万用表测出各电阻的阻值以及各电容的大小。根据原理图把元器件放到电路板上(先放电阻再放电容然后放体积比较大的元件)焊好。焊接时要注意方法,电烙铁与电路板成九十度角,既要和焊盘接触又要和元件的引脚接触,接触时间不要过长(不然会烧坏元件的)大概十秒左右就行了。拿起电烙铁时要快,这样焊口才圆滑。把所有元件都焊好之后用剪刀把元件的长引脚剪掉。 7 专业课程设计论文 撰写人:许丽丽 努力不一定成功,但成功必须努力! 6、调试 用下载头将写好的程序烧录到单片机后,没有显示正确的日期、星期和时间,通过用万用表等工具仔细的检查,发现:首先是晶振损坏了,其次是电位器焊接不正确。随后更换晶振,将电位器拆卸重新焊接好后即可正确显示日期、星期和时间。 7、操作说明 根据下表的操作说明实现时间的调整: 表3 时 间 S1:秒 S2:加;S3减 S1:分 S2:加;S3减 S1:时 S2:加;S3减 星 期 S1:星期 S2:加;S3减 日 期 S1:日 S2:加;S3减 S1:月 S2:加;S3减 S1:年 S2:加;S3减 8、结束语 本设计以AT89S52单片机为核心部件,单片机系统完成显示日期、时间、星期等功能。通过对本设计的思考,更加加深了我对单片机的认识,熟练了对单片机的控制,本设计还有许多需要改进的地方,我会在接下来的日子里继续完善我的设计,在原来的基础上增加温度测量的设计、电子音乐盒、用DS1302芯片实现精确时间的设计等,努力将该设计做得更好,更实用。 参考文献: [1]谭浩强著.C语言程序设计.第三版.北京:清华大学出版社,2005.7 [2]郭天祥编著. 新概念51单片机C语言教程. 北京:电子工业出版社,2009.1 [3]杨素行主编.模拟电子技术简明教程.第三版.北京:高等教育出版社,2009.3 [4]李全利编著.单片机原理与接口技术.第2版.北京:高等教育出版社,2009.1 [5]江思敏、陈明.Protel电路设计教程.第2版.北京:清华大学出版社,2006.12 [6]朱清慧,Proteus教程:电子线路设计、制版与仿真,清华大学出版社,2008,9 [7]郭文川,单片机原理与接口技术,中国农业出版社,2007,1 附录 源程序如下所示: #include<reg52.h> #define uchar unsigned char #define uint unsigned int sbit rs=P2^0; sbit lcden=P2^2; sbit s1=P1^1; //选择要调整的项目,左移 sbit s2=P1^2;//加 sbit s3=P1^3;//减 uchar count,s1num; uchar shi,fen,miao,zhou,ri,yue,nian; uchar code table[]=" 2010-12-31 5"; uchar code table1[]=" 09:59:50"; void delay(uint z) { uint x,y; for(x=0;x<z;x++) for(y=0;y<110;y++); } void w_com(uchar com) { rs=0; lcden=0; P3=com; delay(5); lcden=1;//给高脉冲 delay(5); lcden=0; } /********************************* 写指令 *********************************/ void w_data(uchar date) { rs=1; lcden=0; P3=date; delay(5); lcden=1; delay(5); lcden=0; } /********************************* 写数据 *********************************/ /********************************* 初始化函数 *********************************/ void w_sfm(uchar add,uchar date)//时分秒 { uchar shi,ge; shi=date/10; ge=date%10; w_com(0x80+0x40+add); w_data(0x30+shi); w_data(0x30+ge); } void w_zhou(uchar add,uchar date)//周 { uchar z; z=date; w_com(0x80+add); w_data(0x30+z); } void w_ryn(uchar add,uchar date)//日 { uchar shi,ge; shi=date/10; ge=date%10; w_com(0x80+add); w_data(0x30+shi); w_data(0x30+ge); } void init() { uchar num; lcden=0;//初始化使能为0 fen=59; miao=50; shi=23; zhou=5; ri=31; yue=12; nian=10; w_com(0x38);//写入显示模式指令码 w_com(0x0c);//写入显示开/关及光标指令码 w_com(0x06);//当写一个字符后,地址指针加一,光标加一,不动光标不闪烁 w_com(0x01); //清零作 w_com(0x80);//代表第一行第一位 for(num=0;num<15;num++) { w_data(table[num]); delay(5); } w_com(0x80+0x40);//代表第二行第一位 for(num=0;num<12;num++) { w_data(table1[num]); delay(5); } w_sfm(4,shi); w_sfm(7,fen); w_sfm(10,miao); w_zhou(14,zhou); w_ryn(4,nian); w_ryn(7,yue); w_ryn(10,ri); TMOD=0x01; TH0=(65536-50000)/256;//50毫秒产生一次中断 TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; } void keyscan() { if(s1==0)//闪烁位置//选择要调整的项目,左移 { delay(10); if(s1==0) { s1num++; while(!s1); if(s1num==1)//s1键按一下依次从秒分周日月时向左移 { TR0=0; w_com(0x80+0x40+0x0b); w_com(0x0f);//左移光标开始闪烁 } if(s1num==2) { w_com(0x80+0x40+0x08); w_com(0x0f);//左移光标开始闪烁 } if(s1num==3) { w_com(0x80+0x40+0x05); w_com(0x0f);//左移光标开始闪烁 } if(s1num==4) { w_com(0x80+0x0e); w_com(0x0f);//左移光标开始闪烁 } if(s1num==5) { w_com(0x80+0x0b); w_com(0x0f);//左移光标开始闪烁 } if(s1num==6) { w_com(0x80+0x08); w_com(0x0f);//左移光标开始闪烁 } if(s1num==7) { w_com(0x80+0x05); w_com(0x0f);//左移光标开始闪烁 } if(s1num==8) { s1num=0; w_com(0x80+0x40+12); w_com(0x0c);//光标恢复原样,不闪烁 TR0=1; } } } if(s1num!=0)//用于调节年月日时分秒 { if(s2==0) { delay(10); if(s2==0) { while(!s2); if(s1num==1)//秒升调节 { miao++; if(miao==60) miao=0; w_sfm(10,miao); w_com(0x80+0x40+11); } if(s1num==2)//分升调节 { fen++; if(fen==60) fen=0; w_sfm(7,fen); w_com(0x80+0x40+8); } if(s1num==3)//时升调节 { shi++; if(shi==24) shi=0; w_sfm(4,shi); w_com(0x80+0x40+5); } if(s1num==4)//周升调节 { zhou++; if(zhou==8) zhou=1; w_zhou(14,zhou); w_com(0x80+14); } if(s1num==5)//日升调节 { ri++; if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12) { if(ri==32) ri=1; w_ryn(10,ri); w_com(0x80+11); } if(yue==2) { if(ri==30) ri=1; w_ryn(10,ri); w_com(0x80+11); } if(yue==4||yue==6||yue==9||yue==11) { if(ri==31) ri=1; w_ryn(10,ri); w_com(0x80+11); } } if(s1num==6)//月升调节 { yue++; if(yue==13) yue=1; w_ryn(7,yue); w_com(0x80+8); } if(s1num==7)//年升调节 { nian++; if(nian==99) nian=1; w_ryn(4,nian); w_com(0x80+5); } } } if(s3==0) { delay(5); if(s3==0) { while(!s3); if(s1num==1)//秒降调节 { miao--; if(miao==-1) miao=59; w_sfm(10,miao); w_com(0x80+0x40+11); } if(s1num==2)//分降调节 { fen--; if(fen==-1) fen=59; w_sfm(7,fen); w_com(0x80+0x40+8); } if(s1num==3)//时降调节 { shi--; if(shi==-1) shi=23; w_sfm(4,shi); w_com(0x80+0x40+5); } if(s1num==4)//周降调节 { zhou--; if(zhou==0) zhou=7; w_zhou(14,zhou); w_com(0x80+14); } if(s1num==5)//日降调节 { ri--; if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12) { if(ri==0) ri=31; w_ryn(10,ri); w_com(0x80+11); } if(yue==2) { if(ri==0) ri=29; w_ryn(10,ri); w_com(0x80+11); } if(yue==4||yue==6||yue==9||yue==11) { if(ri==0) ri=30; w_ryn(10,ri); w_com(0x80+11); } } if(s1num==6)//月降调节 { yue--; if(yue==0) yue=12; w_ryn(7,yue); w_com(0x80+8); } if(s1num==7)//年降调节 { nian--; if(nian==0) nian=99; w_ryn(4,nian); w_com(0x80+5); } } } } } void main() { init(); while(1) { keyscan(); if(count==20)//20*50毫秒=1000毫秒=1秒 { count=0; miao++; if(miao==60) { miao=0; fen++; if(fen==60) { fen=0; shi++; if(shi==24) { shi=0; zhou++; ri++; if(zhou==8) { zhou=1; } w_zhou(14,zhou); if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12) { if(ri==32) { ri=1; yue++; if(yue==13) { yue=1; nian++; if(nian==100) nian=1; w_ryn(4,nian); } w_ryn(7,yue); } w_ryn(10,ri); } if(yue==2) { if(ri==29) { ri=1; yue++; w_ryn(7,yue); } w_ryn(10,ri); } if(yue==4||yue==6||yue==9||yue==11) { if(ri==31) { ri=1; yue++; w_ryn(7,yue); } w_ryn(10,ri); } } w_sfm(4,shi); } w_sfm(7,fen); } w_sfm(10,miao); } } } void timer0() interrupt 1 { TH0=(65536-50000)/256;//50毫秒产生一次中断 TL0=(65536-50000)%256; count++; } 19 专业课程设计论文 撰写人:许丽丽
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 应用文书 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服