

下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、主整word版带温度显示的万年历数码管显示编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对 文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(完整word版,带温度显示的 万年历数码管显示)的内容能够给您的工作和学习带来便利。同时也真诚的希望收到您的建议和反 馈,这将是我们进步的源泉,前进的动力。本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以 下为完整word版,带温度显示的万年历数码管显示的全部内容。2设计报告万年历时钟的设计班级:09光电2班专业:光电子技术姓名:阮军峰学号:0
2、906010234完成日期:20年06月门日3一、 设计目的:1、 掌握C51程序用于实践并实现相应的功能;2、 掌握时钟程序的使用方法;3、 掌握时间函数的使用方法;4、 掌握键盘的程序使用方法;二、 设计任务:设计一个智能化万年历时钟电路,LED数码管作为电路的显示部分, 按钮开关作为调时部分,通过与单片机连接数码管动态显示年、月、日、时、分、秒、星期、温度。并能准确计算闰年闰月的显示。三、 设计要求=通过与单片机连接数码管动态显示年、月、日、时、分、秒、星期等 功能,并能准确计算闰年闰月的显示,三个个按钮连接P3。0、P3。1、P3o 2可以精确调整每一个时间数值, 通过对所设计的万年历
3、时钟电路进行实 验测试,达到了动态显示时间,随时调整时间等技术指标。四、 系统方案设计:1v系统总体设计:1)原理构成框图本设计用STC89C51作为核心控制部分, 外接晶振电路和74HC154, 74LS138作为位选扩展电路,P3.0、P3. 1、P3. 2接三个个按钮作为时间 调整部分,以两个17个数码管作为显示部分,P2口作为位选,P0口作为 数据输出部分。具体框图如图1所示:4图1原理框图56定时器计时2)主程序的设计系统程序采用C语言按模块化方式进行设计,然后通过KeilC51L软 件开发平台将程序转变成十六进制程序语言,得到HEX文件,接着使用Proteous进行仿真,其次,按照
4、Proteous的仿真电路图,在Protel99SE中完成电路板的逻辑布局及布线.if (P3_1=0)如果按键被按下73)时间调整电路的设计采用按键设计,独立式按键直接与单片机I/O口相连构成键盘,每个 按键不会相互影响,按下模式可以选择年 月 日时分秒星期。按下 (+)(-)进行调试,程序如下:whi le(1)P3_0=;jf(P3_0=0) delay (10);if(P3_0=0)如果按键被按下Kdelay ();if (P3_0=0)确定按键按下while(P3_0=0) ; /等待按键放开cursor+;if(cursor)=9)cursor=0; /如果cursor大于9则cu
5、rsor=0if (P1_0=0) cursor=0; P3 1=1;if(P3_1=0) delay (10);Kdelay ();8if( (P3_1=0)/确定按键按下if (cursor=1)sec+;如果cursor则按键按下秒数加一if (sec=60)sec=0; /如果秒数等于60秒则回到0开始if (cursor=2)min+;如果cursor=2则按键按下分数加一if (mi n=60)min=0;如果分数等于60分则回到0开始1if (cursor=3)hour+; /如果cursor=3则按键按下时数加一if (hour=24)hour=0;/如果时数等于24时则回到0
6、开始yearh+; 如果cursor=7则按键按下年数高位加一if (yearh=30)9if (cursor=4)day+;如果cursor=4则按键按下天数加一if (day=31)day=O;/如果天数等于31天则回到0开始if (cursor=5)month卄;/如果cursor=5则按键按下月数加一if (month=13)month=0;/如果月数等于13月则回到0开始if (cursor=6)year I+;/如果cursor=6则按键按下年数低位加一if (year 1=100)year I =0; /如果年数等于100则回到0开始if (cursor=7)sec;如果curs
7、or=1则按键按下秒数减一if (sec=0)10yearh=20;/如果年数大于30则回到0开始if (cursor=8)week卄;如果cursor=8则按键按下星期数加一if (week=8)week=1;/如果星期数等于8则回到0开始whi le(P3_1=0) ;P3_2h; 写入时先写1if (P3_2=0)/按键按下delay (10);/延时10个毫秒if (P3_2=0)确定按键按下Kdelay ();汗(P3_2=0)if (cursor=1)month;如果cursor=5则按键按下月数减一11sec=59;/如果秒数小于0则回到59开始if (cursor=2)min;
8、/如果cursor=2则按键按下分数减一if (mi n=0)min二59;/如果分数小于0则回到59开始if (cursor=3)hour; 如果cursor=3则按键按下时数减一if (hour=0)hour=23; /如果时数小于0则回到23开始if (cursor=4)day; 如果cursor=4则按键按下天数减一if (day=0)day=31;/如果天数小于0则回到31开始if (cursor=5)if (month=0)month=12;/如果月数小于0则回到42开始if (cursor=6)year I-;如果cursor=6则按键按下年的低位数减一if (yearl=0)y
9、ear I =99;/如果年数小于0则回到99开始if (cursor=7)yearh;/如果cursor=7则按键按下年的高位数减一if(yearh=20)yearh=30;/如果年数小于0则回到30开始if (cursor=8)week-; /如果cursor=8则按键按下秒星期减一if (week=0)week=7;如果星期数小于0则回到7开始while (P3_2=0);14i =ReadTemperature 0;所连线路和单片机接口仿真图如图3所示:图3仿真按键4)温度采集部分DS18B20温度传感器,测温范围一55C+125C,固有测温分辨率P3.7/RDP3.6/WRP3.5/
10、T1P3.4/T0P3.3/INTfP3.2/INT0P3.1/TXDP3.0/RXD150.5Co独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。DS18B20的采集数据通过DQ传入单片机,单片机读取数据后将数据输出!如图所示程序如下:ReadOneChar (void)uns i gned char i=0;/定义i用于循环unsigned char dat = 0;/读取的8位数据for (i=8;i 0;i)8次循环DQ = 0;/拉低DQ总线开始读时序dat =1;/ dat左移一位DQ = 1;释放DQ总线if (DQ)
11、 /如果DQh,执dat I =0 x80; (0 x80即第7位为1,如果DQ为1,即读取的数据为1,将dat的第7为置1,然后dat循环8次结束,dat即为读取的数据)/DQ二0,就跳过dat | =0 x80;16Tde I ay (4);/延时以完成此次读时序,之后再读下一数据return (dat);返回读取的dat写一个字节WriteOneChar (unsigned char dat)uns i gned char i=0;/for (i=8; i0; i) /DQ = 0;/DQ = dat&0 x01;/Tde I ay (5);/延时以完成此次读时序,之后再读下一数
12、据DQ = 1;/dat =1;/读取温度ReadTemperature (void)unsigned char a=0;unsigned char b=0;17unsigned i nt t=0;float tt=0;/lnit_DS18B20();WriteOneChar (OxCC); / 写指令,跳过ROM,Wr iteOneChar (0 x44) ; /启动温度转换lnitJS18B20();WriteOneChar (OxCC);/写指令跳过ROM,WriteOneChar (OxBE);/写指令,读暂存存储器a=ReadOneChar (); /读低8位b=ReadOneCha
13、r ();/读高8位t=b;/t二8;/t=t|a;/t= tt*10+0o 5;/return (t); 获得0.01 C的精度并返回5) LED数码管的选择LED数码管分为共阴和共阳两种,以利用STC89C51的P0口作为LED显示的数据部分,以P2口的七个口作为显示部分的位选,通过三八译码 器和4-16译码器扩展为17位的位选分别接在一个四位数码管和13个数 码管的位选部分。详细电路图如图45所示:P2=0 x1F | a;P0=L17;P2=0 xF0;P0=L1;delay (1); /yearhP2=0 xF1;P0=L2;delay (1); /yearhif (cursor=8
14、)程序如下:P2=0 xF3 I a;19delay (1);elseP2=0 x1F;P0=L17;delay(1); /weekif (cursor =6)P2=0 xF2 | a;P0=L3;de I ay (1);elseP2=0 xF2;P0=L3;delay (1); /year Iif (cursor=6)P0=L4;delay(1):P2=0 xF5|a;20elseP2=0 xF3;P0=L4;delay (1); /year Iif (cursor=5) P2=0 xF4 | a;P0=L5;delay (1);elseP2=0 xF4;P0=L5;de I ay (1);
15、 /monthif (cursor=5)P0=L6;de I ay (1);21elseP2=0 xF5;P0=L6;delay(1); /monthif (cursor=4)P2=0 xF6|a;P0=L7;delay (1);elseP2=0 xF6;P0=L7;delay(1); /dayif (cursor=4)P2=0 xF7|a;P0=L8;de I ay (1);22elseP2=0 xF7;P0=L8;delay(1); /dayP2=0 xFF;if (cursor=3)P2=0 xF8 | a;P0=L9;delay (1);elseP2=0 xF8;P0=L9;delay
16、(1); /hourif (cursor=3)P2=0 xF9 | a;23P0=L10;delay (1);elseP2=0 xF9;P0=L10;delay (1); /hourif (cursor=2)P2=0 xFA|a;P0=L11;delay(1);elseP2=0 xFA;P0=L11;delay (1); /minif (cursor=2) P2=0 xFB|a;24P0=L12;delay(1);elseP2=0 xFB;P0=L12;delay(1); /minif (cursor=1)P2=0 xFC I a;P0=L13;de I ay (1);elseP2=0 xFC
17、;P0=L13;25delay(1); /secif (cursor=1)P2=0 xFD I a;P0=L14;de I ay (1):elseP2=0 xFD;P0=L14;de I ay (1); /secP2=0 xFE;P0=L15;delay(1); /tempP2=0 x0F;P0=L16;delay(1) ; /tempP2=0 xFF;26图5日期显示6)仿真实验整个电路仿真图如下图6所示所示:图6仿真电路图7)实物的制作与调试(1)原理图的绘制与PCB的制作(2)原理图的绘制(3)在Protel99se中先新建一个工程,把所需要的元件载入到文档 里面。(4)按照所设计的电路
18、画原理图(5)通过电气检查是否有错,并修改完善。原理图如图7所示:SSKSJ:;:.SSKSJ:;:.C000000tlillrtlillrLOI2-oFs-o2-oFs-o2728将画好的原理图转为PCB图,设置好规则开始布线,由于边线比较的 ,采用手动布线的方式进行布线,PCB图如图8所示:图7原理图复杂AI4心8) PCB的绘制U U茁21J21J运空显示部分52图8 PCB图五、系统实现:1、方案设计、方案比较方案一:采用实时时钟芯片实时时钟芯片具备年、月、日、时、分、秒计时功能和多点定时功能, 计时数据的更新每秒自动进行一次, 不需程序干预.计算机可通过中断或 查询方式读取数据进行显
19、示,因此计时功能的实现无需占用CPU的时间,程序简单。此外,实时时钟芯片多数带有锂电池做后备电源,具备永不停 止的计时功能;具有可编程方波输出功能,可用做实时测控系统的采样信 号等;有的实时时钟芯片内部还带有非易失性RAM,可用来存放需长期保 存但有时也需变更的数据由于功能完美,精度高,软件程序设计相对简 单,且计时不占用CPU时间,因此,在工业实时测控系统中多采用这一类 专用芯片来实现实时时钟功能。方案二:软件控制利用单片机内部的定时/计数器进行中断定时,配合软件延时实现时、29分、秒的计时,该方案节省硬件成本,且能使设计者对单片机的指令系统 能有更深入的了解,从而掌握单片机应用技术MCS-
20、51汇编语言程序设计 方法,因此,本系统设计采用此种软件控制方法来实现时,STC89C51单 片机是低功耗的具有4KB在线可编程FLASH存储器的单片机。它与通用80C51系列单片机的指令第和引脚兼容。片内的FLASH集成在一个芯片上, 形成了功能强大、使用灵活和具有较高性能价格比的微控制器。它的功能 强大,而且也较容易购买.总结:所要实现的功能通过单片机编程就可以达到,不需要额外的时 钟芯片来增加成本,并使外围电路更加简单明了.3、实验步骤(1)、给电路通上电源,LED显示是否通电;(2)、电路板上分别选择模式、+和一按键,可以对时间和日期进 行任意的调整,数码管分别显示日期和时间;调整模式
21、按键按下表示对时 间开始进行调整,通过选位来确定所要调整的位置,分别可以加和减。(3)、用一个四位数码管和13个数码管,可显示时间和日期。实验实物图如图1112所示:30总结:经过测试,我所做的万年历相对稳定,并且能准确的计时以及 调整时间,经过这次试验懂得了仿真与实物是有差别的,也学会了很多。六、实验总结:1、这次我的设计的任务是万年历时钟的设计, 通过C51芯片程序控制显示 万年历。本次实验是设计一个智能化万年历时钟电路,LED数码管作为电 路的显示部分,按钮作为调整时间和日期部分,可任意的对时间进行所需 的调整,通过与单片机连接数码管动态显示年、月、日、时、分、秒、星 期、温度等功能,并
22、能准确计算闰年闰月的显示。2、我采用的是12MHZ的晶振,再通过一系列的计算从而实现万年历时钟 的基本功能。在实验调试过程中,出现了很多的问题,仿真时不需要数码 管驱动依然能够实现所需的功能, 但实验时出现了数码管亮度达不到要求 的情况。我采用了以下方案来驱动数码管:1)74LS138和74HC154作为位选驱动;2)在P0口接的上拉电阻,在这个过程中又涉及了上拉电阻的大小, 开始用10K的电阻,因为电阻过大,使电流不能达到要求,以至 于不a sRB BIBQ咆軀31能增加数码管的亮度最后我们换用1K的上拉电阻,成功的 实现了我们所要得到的结果,数码管的亮度达到了所需的要求。3、在做板过程中出
23、现的线断路问题;通过万用表的检测一一排除和焊接!4、 本次实验让自己对单片机的应用有了进一步的了解, 对程序也有了更深 的体会!七、参考文献1 proteus仿真论坛;2维纳单片机论坛;3单片机初级教程教科书八、元件清单兀件名称数量数码管17个74HC1381个74HC1541个STC89C51个排阻1个按钮3个电阻4个12M晶振1个DS18B201个30P电容2个附录源程序如下所示:#def i ne uchar uns i gned char#def i ne uint uns i gned irrt32#define DQ P3 7#includeuint sec;初始化秒uint mi
24、n二50;/初始化分钟uint hour =9;/初始化时uint day=10;/初始化天uint month=6;/初始化月uint year 1=11;/初始化年低位uint yearh=20;/初始化年高位uint week=6;/初始化星期uint tent;/ 定义tent变量uint cursor=0;/定义cursor变uchar a=0 xff;定义a变量uchar code Seg = 0 x3f, 0 x06, 0 x5b, 0 x4f, 0 x66, 0 x6df0 x6f;共阴数码显示码值void delay(uint t)uint i;while (t-)for (
25、i=0;i0;i)for (j=248;j 0;j); 延时lnit_DS18B20 (void)uns i gned char x=0;DQ = 1; /DQ复位Tdelay (8);稍做延时DQ = 0;/单片机将DQ拉低Tde I ay (80); /精确延时,大于480usDQ = 1;拉高总线Tdelay(14);Tde I ay (20);延时读一个字节ReadOneChar (void)uns i gned char i=0;/定义i用于循环34unsigned char dat = 0;/读取的8位数据for (i=8;i0;i) )/8次循环DQ = 0;/拉低DQ总线开始读
26、时序dat =1;/ dat左移一位DQ = 1;释放DQ总线if(DQ) /如果DQh,执dat|=0 x80; (0 x80即第7位为1,如果DQ为 即 读取的数据为将dat的第7为置1,然后dat循环8次结束,dat即为读 取的数据)/DQ=0,就跳过dat | =0 x80;Tdelay (4) ;/延时以完成此次读时序,之后再读下一数据return (dat);返回读取的dat写一个字节WriteOneChar (unsigned char dat)uns i gned char i=0;/for (i=8; i0;i-) /DQ = 0;/DQ = dat&OxO1;/35
27、Tde I ay (5) ;/延时以完成此次读时序,之后再读下一数据DQ = 1;/dat =1;/读取温度ReadTemperature (void)unsigned char a=0;uns i gned char b=0;unsigned int t=0;float tt=0;/lnit_DS18B20();Wr i teOneChar (OxCC);/写指令,跳过ROM,Wr i teOneChar (0 x44) ; /启动温度转换lnit_DS18B20 0;Wri teOneChar (OxCC) ;/写指令,跳过ROM,Wri teOneChar (OxBE);/写指令,读暂存
28、存储器a=ReadOneChar ();读低8位b=ReadOneChar ();读高8位t=b;/t=8;/36t二t|a;/tt=t*0o0625;/t二tt*10+0. 5;/return (t);获得0o01 C的精度并返回void display (uchar L1, uchar L2, uchar L3ruchar L4, uchar L5, uchar L6, uchar L7fuchar L8tuchar L9, uchar L10, uchar L11ruchar L12, uchar L13ruchar L14, uchar L15,uchar L16, uchar L17
29、)/* * * * *动态显示数码管的时间* * */P2=0 xF0;P0=L1;delay (1);/yearhP2=0 xF1;P0=L2;delay (1); /yearhif (cursor=8)P2=0 x1F I a;P0=L17;37delay (1);elseP2=0 x1F;P0=L17;delay (1); /weekif (cursor=6)P2=0 xF2|a;P0=L3;delay(1);elseP2=0 xF2;P0=L3;delay (1); /year Iif (cursor=6)P2=0 xF3 | a;P0=L4;delay (1);else38P2=0
30、xF3;P0=L4;delay (1); /year Iif (cursor=5)P2=0 xF4 I a;P0=L5;de I ay (1);elseP2=0 xF4;P0=L5;delay(1); /monthif (cursor=5) P2=0 xF5 | a;P0=L6;delay (1);else39P2=0 xF5;P0=L6;de I ay (1); /monthif (cursor=4)P2=0 xF6|a;P0=L7;delay (1);elseP2=0 xF6;P0=L7;delay (1);/dayif(cursor=4)P2=0 xF7|a;P0=L8;delay (1
31、);else40P2=0 xF7;P0=L8;delay (1); /dayP2=0 xFF;if (cursor=3)P2=0 xF8|a;P0=L9;delay(1);elseP2=0 xF8;P0=L9;delay (1); /hourif (cursor=3)P2=0 xF9|a;P0=L10;delay (1);elseP2=0 xF9;41P0=L10;delay (1); /hourif (cursor=2)IP2=0 xFA | a;P0=L11;delay (1);elseP2=0 xFA;P0=L11;delay (1); /minif (cursor=2)P2=0 xFB
32、|a;P0=L12;delay (1);elseP2=0 xFB;42P0=L12;delay (1): /minif (cursor=1)P2=0 xFC|a;P0=L13;delay (1 );elseP2=0 xFC;P0=L13;delay (1); /secif (cursor=1)P2=0 xFD I a;P0=L14;delay (1);elseP2=0 xFD;43P0=L14;delay (1); /secP2=0 xFE;P0=L15;delay (1);/tempP2=0 x0F;P0=L16;delay (1);/tempP2=0 xFF;main ()uint i:T
33、M0D=0 x02; 装计数初值的计数值)设置模式为定时器T0的模式2 (8位自动重TH0=0 x06;设置计数器初值,靠THO存储重装的计数值X0=256-250=6TL0=0 x06;TR0=1;启动TOET0=1;开启定时器TO中断允许EA=1;while (1) 开启中断总控制P3_0=1;44if (P3_0=0) delay (10);if (P3_0=0) /如果按键被按下Kde I ay 0;jf(P3_0=0)/确定按键按下while(P3_0=0); /等待按键放开cursor+;if(cursor=9) cursor=0;如果cursor大于9则cursor=0145if
34、 (P1_0=0) cursor=0; 1 P3J=1;if(P3_1=0) delay (10);if(P3_1=0)如果按键被按下KdeI ay 0;if(P3_1=0)/确定按键按下if (cursor=1)sec+;/如果cursor则按键按下秒数加一if (sec=60)sec=0; /如果秒数等于60秒则回到0开始if (cursor=2)min+;/iU果cursor=2则按键按下分数加一if (mi n=60)min=0;如果分数等于60分则回到0开始if (cursor=3)46hour+; /如果cursor=3则按键按下时数加一if (hour=24)hour=0;/如果
35、时数等于24时则回到0开始1if (cursor=4)day+;如果cursor=4则按键按下天数加一if (day=31)day=0;如果天数等于31天则回到0开始if (cursor=5)month+:/如果cursor=5则按键按下月数加一if (month=13)month=0; /如果月数等于13月则回到0开始if (cursor=6)year I卄;/如果cursor=6则按键按下年数低位加一if (year 1=100)year I =0; /如果年数等于100则回到0开始if (cursor=7)47yearh+;如果cursor=7则按键按下年数高位加一if(yearh=30
36、)yearh=20;/如果年数大于30则回到0开始if (cursor=8)week-H-; 如果cursor=8则按键按下星期数加一if (week=8)week=1; 如果星期数等于8则回到0开始while (P3_1=0);P3_2=;写入时先写1if(P3_2=0)/按键按下delay (10); 延时10个毫秒i f (P3_2二二0) /确定按键按下Kdelay();if (P3_2=0)if (cursor=1)sec; /如果cursor=1则按键按下秒数减一if (sec=O)48sec=59; /如果秒数小于0则回到59开始if (cursor=2)min-; 如果cursor=2则按键按下分数减一if (min=O)min=59;/如果分数小于0则回到59开始if (cursor=3)hour;/如果cursor=3则按键按下时数减一if (hour=0)hour =23;/如果时数小于0则回到23开始if (cursor=4)49if (day=O)day=31;/如果天数小于0则回到31开始if (cursor=5)month; /如果c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 沈阳市中石化2025秋招笔试性格测评专练题库及答案
- 中国广电营口市2025秋招笔试行测题库及答案通信技术类
- 江苏地区中储粮2025秋招仓储保管岗高频笔试题库含答案
- 中国移动通化市2025秋招笔试行测题库及答案市场与服务类
- 中国联通河北地区2025秋招心理测评常考题型与答题技巧
- 丹东市中石化2025秋招笔试综合知识专练题库及答案
- 临夏回族自治州中石油2025秋招笔试模拟题含答案市场营销与国际贸易岗
- 娄底市中石化2025秋招笔试综合知识专练题库及答案
- 国家能源濮阳市2025秋招面试专业追问及参考采矿工程岗位
- 中国广电阳江市2025秋招综合管理类专业追问清单及参考回答
- 2025年合肥市社会化工会工作者招聘34人笔试备考试题及答案解析
- 非婚生子女法律抚养权协议范本
- 2025年新版中层副职面试题及答案
- 蜂窝组织炎护理小讲课
- 智慧树知道网课《工业机器人技术基础》课后章节测试满分答案
- (一检)泉州市2026届高三高中毕业班质量监测(一)数学试卷(含标准答案)
- 纤维转盘滤布滤池运行维护技术说明
- 2025至2030中国无烟产品行业发展趋势分析与未来投资战略咨询研究报告
- 2021年全球工作场所状况报告 State of the Global Workplace 2021 Report
- 球墨铸铁管-施工方案(3篇)
- 2025年职业技能鉴定考试(考评员)经典试题及答案
评论
0/150
提交评论