为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

24小时制时、分、秒计时器设计报告

2017-09-02 10页 doc 25KB 143阅读

用户头像

is_005190

暂无简介

举报
24小时制时、分、秒计时器设计报告24小时制时、分、秒计时器设计报告 时钟仿真实验报告 班级 电子0934 姓名(学 周志武(21) 雷维(19) 蒋志伟(28) 杨琼(22) 号) 方案总体设时钟中断计 显示模块函仿真电路设项目分工 计、程序集时模块函数 数设计 计及调试 成、报告撰写 设计 一、任务及要求 用51单片机设计时、分、秒计时器,具体要求如下。 1、 具有时、分、秒计时功能和8位数码管显示功能,显示格式为:“时,分,秒”; 2、 用Proteus设计仿真电路进行结果仿真; 3、 4人组成设计小组完成,小组成员有明确分工,1人负...
24小时制时、分、秒计时器设计报告
24小时制时、分、秒计时器设计 时钟仿真实验报告 班级 电子0934 姓名(学 周志武(21) 雷维(19) 蒋志伟(28) 杨琼(22) 号) 总体设时钟中断计 显示模块函仿真设项目分工 计、程序集时模块函数 数设计 计及调试 成、报告撰写 设计 一、任务及要求 用51单片机设计时、分、秒计时器,具体要求如下。 1、 具有时、分、秒计时功能和8位数码管显示功能,显示格式为:“时,分,秒”; 2、 用Proteus设计仿真电路进行结果仿真; 3、 4人组成设计小组完成,小组成员有明确分工,1人负责总体方案设计及报告撰写,2人负责功能模块函数设计,1人负责仿真电路设计及调试。 4、 完成程序设计、仿真电路设计、结果仿真,完成报告并上传空间课程栏目中的课程设计报告子栏目中。 二、设计方案: 1、总体方案构思:通过使用定时计数器以及中断溢出,50ms中断溢出一次,溢出20次为1S。所以当定时溢出计数变量temp自加20次时计数变量miao自加1,直到加到第60次时miao(秒)清零,并且计数变量fen自加1,直到fen加到第60次时,fen(分)清零且shi(时) 1 自加1,直到shi加到第24次时,shi(小时)清零。最后经译码后,通过扫描显示模块程序将得到的时钟结果以动态显示的方式显示在8位一体共阳数码管上。 2、程序功能模块说明:此时钟程序包括时钟中断计时、延时函数、显示函数等模块 3、仿真电路构成:此次时钟程序的仿真电路的设计较简单,硬件部分主要有AT89C52单片机芯片一块、八位一体LED共阳数码管一块、8个普通电阻以及8个逻辑非门。其中8个普通电阻用作P0口上拉电阻。另外,由于数码管是共阳的,而实际程序中的位码是以低电平有效的,所以八个逻辑非门用来取反单片机输出的位码。 4、时钟计时程序设计思想:采用定时计数器T0,工作方式1,定时50ms,再对定时溢出中断次数计数,若溢出了20次则时间为1秒~ 5、函数模块程序流程图: 文件包含 初始化定义 常量定义 变量定义 void timer0init(void) 数据表格定义 { TMOD=0x01; 设置定时器工作方式(TMOD) 定时计数器TH0=(65536-50000)/256; 定时器赋初值(THx、TLx) 及其中断初TL0=(65536-50000)%256; 开总中断(EA=1) 始化函数 开定时器计数中断(ETx=1) EA=1; 启动定时器(THx=1) ET0=1; TR0=1; } 2 void delay(uint n) { uint i,j; 延时函数 延时函数通式 for(i=n;i>0;i--) for(j=124;j>0;j--); } { 重装初值,开始计数 TH0=(65536-50000对溢出中断计数,并判断是否)/256; 为20次,若是则temp清零秒 TL0=(65536-50000)定时计数加1;判断秒是否加到59,若%256; 器中断函秒加到59,则秒清零分加1; if(temp==20) { 数 判断分是否分是否加到59,若 temp=0; 分加到了59,则分清零时加1; if(miao==59) 判断时是否加到23,若时加到 {miao=0; 23,则时清零。 if(fen==59) {fen=0; if(shi==23) shi=0; else shi++; 秒输出各位位码 } 显 秒输出各位段码 else fen++; 示 分输出十位位码 } 函 else miao++; 分输出十位段码 数 } 时输出十位位码 else temp++; 时输出十位段码 } P1=0x7f; P0=table[miao%10]; delay(5); //亮5ms P1=0xbf; 调用初始化函数对定时计P0=table[miao/10]; 数器进行初始化 delay(5); //亮5ms 主函数 调用显示函数显示时间 P1=0xdf; P0=0xbf; delay(5); P1=0xef; P0=table[fen%10]; delay(5); //亮5ms P1=0xf7; P0=table[fen/10]; void main(void) delay(5); //亮5ms { P1=0xfb; P0=0xbf; delay(5); timer0init(); while(1) P1=0xfd; P0=table[shi%10]; { delay(5); //亮5ms display(); P1=0xfe; P0=table[shi/10]; } delay(5); //亮5ms } 3 时钟中断计时模块流程图: 50ms定时时间到,产生中断溢出 定时时间累加值=1s (20次溢出,) no yes Temp=0 Temp+1 Miao=59? yes no Miao=0 Miao+1 Fen=59? no yes Fen=0 Fen+1 Shi=23? yes no Shi=0 Shi+1 4 6、仿真电路设计 R1R2R3R4R5R6R7R810k10k10k10k10k10k10k10k U1U61939NOTXTAL1P0.0/AD038P0.1/AD137P0.2/AD21836XTAL2P0.3/AD335P0.4/AD434P0.5/AD5U733P0.6/AD6932NOTRSTP0.7/AD7U221P2.0/A822P2.1/A923P2.2/A102924PSENP2.3/A11U8U33025NOTALEP2.4/A12NOT3126EAP2.5/A1327P2.6/A1428P2.7/A15U4NOT110P1.0/T2P3.0/RXD211P1.1/T2EXP3.1/TXDU9312P1.2P3.2/INT0U5NOTNOT413P1.3P3.3/INT1514P1.4P3.4/T0615P1.5P3.5/T1716P1.6P3.6/WRNOT817P1.7P3.7/RDAT89C52 三、程序代码汇集: /*时钟及显示程序,适用于寻迹小车实验板*/ #include//头文件 #define uchar unsigned char #define uint unsigned int uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82, 0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阳七段编码 uchar temp=0;//定义定时器溢出计数变量,每隔50ms产生1次溢出,temp加1 uchar miao=00; //定义时钟变量,当temp计数加20(20x50ms=1s)时,miao加1 uchar fen=00; //定义时钟变量,当miao计数加60(60x20x50ms=60s)时,fen加1 5 uchar shi=00; //定义时钟变量,当fen计数加60时,shi加1 sbit P0_6=P0^6 ;//定义P0端口 /*--定时计数器T0及其中断初始化函数--*/ void timer0init(void) { TMOD=0x01;//设置定时器0为工作方式1 TH0=(65536-50000)/256;//16位计数初值除以256得到高8位初值 TL0=(65536-50000)%256;//16位计数初值除以256的余数得到低8位初值 EA=1;//开总中断 ET0=1;//开定时器0中断 TR0=1;//启动定时器0 } /*----------延时函数---------------*/ void delay(uint n) { uint i,j; for(i=n;i>0;i--) 6 for(j=124;j>0;j--); } /*定时计数器中断程序,每当定时计数器溢出时触发中断,执行该程序*/ void time0() interrupt 1 { TH0=(65536-50000)/256;//重装初值 TL0=(65536-50000)%256; if(temp==20) { temp=0; if(miao==59) {miao=0; if(fen==59) {fen=0; if(shi==23) shi=0; else shi++; } else fen++; } else miao++; 7 } else temp++; } /*--------------显示函数------------*/ void display(void) { /*P1=0xfe;*/P1=0x7f;//输出秒的个位的位码 P0=table[miao%10]; //输出秒的个位的段码 delay(5); //亮5ms /*P1=0xfd;*/P1=0xbf;//输出秒的十位的位码 P0=table[miao/10]; //输出秒的十位的段码 delay(5); //亮5ms /*P1=0xfb;*/P1=0xdf; P0=0xbf; delay(5); /*P1=0xf7;*/ P1=0xef; //输出分的个位的位码 P0=table[fen%10]; //输出分的个位的段码 delay(5); /*P1=0xef;*/P1=0xf7; //输出分的十位的位码 8 P0=table[fen/10]; //输出分的十位的段码 delay(5); /*P1=0xdf;*/P1=0xfb; P0=0xbf; delay(5); /*P1=0xbf;*/P1=0xfd; //输出时的个位的位码 P0=table[shi%10]; //输出时的个位的段码 delay(5); /*P1=0x7f;*/P1=0xfe; //输出时的十位的位码 P0=table[shi/10]; //输出时的十位的段码 delay(5); } /*----------主函数-----------------*/ void main(void) { timer0init();//调用初始化函数对定时计数器进行初始化 while(1) { display();//调用显示函数显示时间 } 四、仿真调试: 9 在完成程序仿真调试过程中,出现了很多小问,这些问题虽然简单,但真正解决起来还是比较棘手的。例如,数码管显示时、分、秒的位置错乱,或者是某一位数码管不亮,这样的问题对于高手来说就是小菜一碟,一看就知道是哪出了问题,可我却找了半天才查到,原来是显示函数模块中送入位码时位码的编码出错,为了解决这个下问题,我将每一个数码管的位码都重新编写一次。这个问题解决后,再次仿真时钟并没有按要求显示出来,而是出现下图一样的错误显示,通过仔细观察发现,只是小时与分、分与秒之间的那两位数码管显示错误,于是直接检查那两个标志位数码管的段码,发现原来是输送段码时只是将g段送了个0,以致显示时标志位总是跟随前一位数码管显示。 通过我们的不断修改和调试,最终八位数码管能正确显示时钟如下(零时零二分二十三秒): R1R2R3R4R5R6R7R810k10k10k10k10k10k10k10k U1U61939NOTXTAL1P0.0/AD038P0.1/AD137P0.2/AD21836XTAL2P0.3/AD335P0.4/AD434P0.5/AD533U7P0.6/AD6932RSTP0.7/AD7NOT21P2.0/A822P2.1/A923P2.2/A102924PSENP2.3/A113025U8ALEP2.4/A123126EAP2.5/A13NOT27P2.6/A1428P2.7/A15110P1.0/T2P3.0/RXD211P1.1/T2EXP3.1/TXD312U9U2P1.2P3.2/INT0413P1.3P3.3/INT1NOT514P1.4P3.4/T0615P1.5P3.5/T1716P1.6P3.6/WRU3NOT817P1.7P3.7/RDAT89C52U4NOTU5NOT NOT 五、设计总结: 10 对于51单片机设计时、分、秒计时器程序的编写与结构的分析,我想这些都是我们从不懂到懂的慢慢转变的一个过程,记得在刚开始做这个实验报告的时候,我们遇到了很多的问题,首先的时候我们感觉连程序都读不懂,更不用去说写这些程序并分析它的逻辑了。但是困难总是伴随着我们的努力慢慢的解决。我们开始学会参照老师的原始的99秒计数的程序,根据其逆向的思维进行我们分秒时的程序编写。当我们慢慢的了解每个语句的意思所在时,我们再根据其逻辑思想,慢慢的我们了解到了这个程序我们应该怎么去写~怎么去分析它了。通过这次也让我对数字钟的设计与制作,了解了设计电路的程序,也让我了解了关于数字钟的原理与设计理念,要设计一个电路总要先用仿真仿真成功之后才实际接线的。但是最后的成品却不一定与仿真时完全一样,因为,在实际接线中有着各种各样的条件制约着。所以,在设计时应考虑两者的差异,从中找出最适合的设计方法。总的来说在这一次的实验报告中我们学到了很多,我们开始学会去分析程序,然后写出程序了。我感觉这是我们学习C语言的一次非常大的进步~ 11
/
本文档为【24小时制时、分、秒计时器设计报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索