"基于74LS161的多级多进制电子时钟设计"

版权申诉
5星 · 超过95%的资源 3 下载量 57 浏览量 更新于2024-03-02 4 收藏 273KB DOC 举报
2.2设计方案及其论证 在本设计中,我选择了使用74LS161同步加法计数器作为设计的核心元件。该计数器能够以二进制形式进行计数,且可以通过级联的方式实现多级多进制的计数。这种灵活的级联方式使得我们可以实现时、分、秒的计数,并将这些数据以合适的格式传递给数码管进行显示。 在设计中,我将74LS161计数器分为三部分,分别用于时、分、秒的计数。时计数器采用24小时制,分钟和秒钟采用60进制计数。通过级联连接这三个计数器,我们可以实现时分秒的连续计数,并通过合适的逻辑电路将计数结果转换为适合显示的格式。 2.3元器件的选择 在本设计中,除了主要的74LS161计数器外,还需要选购其他一些元器件来构建完整的电子时钟电路。主要的元器件包括: 1. 时钟信号发生器:用于提供脉冲输入信号,选择稳定性好、频率可调的信号源。 2. 数码管:用于显示时、分、秒的数字,需要选购合适的数码管来显示十进制数。 3. 逻辑门电路:用于将74LS161计数器的计数结果转换为适合数码管显示的格式。 4. 电源和接线元件:用于连接各个元器件,保证整个电路正常工作。 通过合理选择和搭配这些元器件,我们可以构建出一个稳定可靠的电子时钟电路。 第3章 电路设计 3.1输入 时钟信号发生器将提供的脉冲信号作为74LS161计数器的时钟输入,从而驱动计数器进行计数。通过适当的电路设计,可以让计数器按照我们预期的方式进行计数。 3.2计数器 时、分、秒的计数器分别连接并级联配置,使得时间信息可以顺利传递并计数。使用74LS161计数器的灵活级联方式,可以实现多级多进制的计数,并将计数结果传递给后续的显示电路。 3.3显示输出结果 经过计数器计数后,需要将计数结果转换为适合在数码管上显示的格式。这需要适当的逻辑门电路来处理计数器输出数据,并将其转换为数码管数字的信号,以便正确地显示出时、分、秒的时间信息。 3.4整体电路 将以上设计的各个部分进行适当的连接和调试后,构建出完整的电子时钟电路。通过合适的接线和电源连接,确保整个电路能够正常工作,并实现时、分、秒的准确计时和显示功能。 第4章 整体电路的仿真测试及性能 在设计完成后,我们需要对整个电子时钟电路进行仿真测试。通过Simulink等仿真软件,可以模拟电路的运行情况,检验是否符合设计要求,并进行必要的调整和改进。 4.1电路的安装调试(仿真) 在仿真测试中,需要逐步验证信号源、计数器、显示部分等各个部分的功能是否正常,以及各部分之间的连接是否正确。通过调试和确认,确保整个电子时钟电路能够稳定工作。 4.2性能指标测量及记录 在仿真测试中,还需要对电子时钟的性能指标进行测量和记录。包括准确性、稳定性、显示效果等各项指标。通过记录这些数据,可以对设计的电子时钟进行评估和改进。 总结 本文基于74LS161同步加法计数器,设计并实现了一个功能完善的电子时钟。通过合理选择元器件和灵活设计电路,实现了时、分、秒的准确显示功能。在整体电路的仿真测试中,对电子时钟的性能进行了详细测量和记录,并对设计过程进行了总结和改进。 通过本设计,我们不仅实现了一个实用性强的电子时钟,还加深了对数字电路设计及时序逻辑电路的理解。这对于学习数字电路及相关领域的同学具有一定的参考价值。通过不断学习和实践,我们能够不断提高自己的设计能力,为未来的工程实践打下坚实的基础。
242 浏览量
Dianzishizhongsheji 目 录 一、设计要求 1 二、设计目的 1 三、设计的具体实现 1 1、系统概述 1 2、单元电路设计 2 2.1、8255初始化: 3 2.2、8253初始化: 3 2.3、8259初始化: 4 3、软件程序设计和调试 5 3.1、主程序流程图: 5 3.2、电子时钟中断处理程序流程图: 6 3.3、显示模块流程图: 7 3.4、程序代码: 7 四、结论与展望 14 五、心得体会及建议 14 六、附录 15 七、参考文献 15 电子时钟的设计报告 一、设计要求 利用8259A中断控制器、8253定时/计数器、8255A接口芯片以及键盘和数码显示电路 ,设计一个电子时钟,由8253中断定时,小键盘控制电子时钟的启停及初始值的预置。 电子时钟的显示格式HH:MM:SS由左到右分别为时、分、秒,最大记时59:59:59超过 这个时间时分秒位都清零从00:00:00重新开始。 1. 电子时钟具有二十四小时循环记时功能,走时要准。 2. 显示格式,时:分:秒。 3. 利用8253作为定时器。 二、设计目的 通过本次课程设计学习和掌握计算机中常用接口电路的应用和设计技术,充分认识理 论知识对应用技术的指导性作用,进一步加强理论知识与应用相结合的实践和锻炼。通 过这次设计实践能够进一步加深对专业知识和理论知识学习的认识和理解,使设计者的 设计水平和对所学知识的应用能力以及分析问题解决问题的能力得到全面提高。 1. 熟练掌握8086/88教学系统的基本操作和调试程序的各种指令。 2. 掌握8259中断控制器的工作原理和应用编程方法,练习编写中断程序的方法。 3. 掌握8255的各种工作方式及其应用编程。 4. 掌握8253定时/计数器的工作原理、工作方式及其应用编程。 5. 熟悉编程及调试程序的方法。 6. 练习LED-KEYBOARD UNIT的使用方法和数码管的显示编程方法。 三、设计的具体实现 1、系统概述 基本工作原理:系统设计的电子时钟主要由显示模块、时钟控制模块和时钟运算模块 三大部分组成。以8086微处理器作CPU,用8253做定时器产生时钟频率提供一个频率为1 0kHz的时钟信号,要求每隔10ms完成一次扫描键盘的工作。在写入控制字与计数初值后, 每到10ms定时器就启动工作,即当计数器减到1时,输出端OUT0输出一个CLK周期的低电 平,向CPU申请中断,当达到100次时,则输出端OUT1输出1s,向CPU申请中断,由8255控制 一个数码管显示,当计数到60s时,则输出端OUT2向CPU申请中断,由另一数码管显示1min, 同理由数码管显示1h.CPU处理,使数码管的显示发生变化。 本设计由8259A中断控制器、8253定时/计数器、8255A接口芯片、LED数码显示管和两 个按键组成。主要用8259A的IRQ7的中断服务程序完成秒、分、时的运算即计时功能,I RQ6的中断服务程序完成调时、调分功能。8253用来产生50ms的脉冲信号作为IRQ7的中断 请求信号。按键KK1+和KK2+分别作为IRQ2和IRQ6的中断请求信号。按键KK1+启动/关闭对 时功能。它决定是否屏蔽IRQ7和IRQ6中断源。8255A负责将内存里的时位和分位值输出到 数码管。 电子时钟的显示格式HH:MM:SS由左到右分别为时、分、秒,每百分之一秒对百分之 一秒寄存器的内容加一,并依次对秒、分、小时寄存器的内容加一,六个数码管动态显 示时、分、秒的当前值。最大记时59:59:59超过这个时间时分秒位都清零从00:00: 00重新开始。 2、单元电路设计 8259A的主要功能: (1)每片8259A可管理8级优先级中断源,通过开关,最多可管理64级优先权的中断 源。 (2)对任何一个级别的中断源都可单独进行屏蔽,使该级中断请求暂时被挂起,直 到取消屏蔽时为止。 (3)能向CPU提供可编程的标识码。 (4)具有多种中断优先权管理方式。有完全嵌套方式、自动循环方式、特殊循环方 式、特殊屏蔽方式和查询方式五种。这些管理方式均可通过程序动态地进行变化。在本 设计中用到了这四种功能,电子时钟的灵活调时功能就是通过对级别的屏蔽或开启来实 现的。 8255A的主要功能: 可编程外设接口芯片可由程序改变其功能,通用性强、使用灵活。通过8255A,CPU可 直接同外设相连接,其负责CPU和外设之间的数据传送。 8253的主要功能: 可编程定时器/计数器,其定时与计数功能可由程序灵活地设定,设定后与CPU并行工 作,不占用CPU的时间。通道2工作在3方式下,提供计算一秒的中断请求信号。 该系统是一个简单的利用8253定时器、8255可并行通信接口和中断控制器8259设计的 电子时钟系统,在该系统中设有一个启动键,启动键未按下时,
2023-02-27 上传
#include<reg51.h> #define uint unsigned int //宏定义,将unsigned int 用uint代替,下同 #define uchar unsigned char sbit S1=P1^0; sbit S2=P1^1; sbit S3=P1^2; sbit S4=P1^3; char second; char minute; char hour; uchar T_time;//计数变量 int a=0; uchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0~9 void delay(uint k) { uint i; for(i=0;i<k;i++); } void keyscan(); void Displaysecond(uchar); void Displayminute(uchar); void Displayhour(uchar); void main() { TMOD=0x01; //定时器/计数器T0的工作方式1 EA=1; //总中断允许 ET0=1; //计时器T0中断允许位 TR0=1; //开始计数 TH0=(65536-46083)/256; TL0=(65536-46083)%256; minute=0; second=0; hour=0; T_time=0; while(1) { keyscan(); Displaysecond(second); delay(100); Displayminute(minute); delay(100); Displayhour(hour); delay(100); } } void Displaysecond(uchar s) { P2=0xbf; //"秒十位"位选端 P0=tab[s/10]; //刚开始显示数字0 delay(100); //延时一段时间 P0=0x00; //消隐 P2=0x7f; //"秒个位"位选端 P0=tab[s%10]; //显示段码 delay(100); //延时一段时间 P0=0x00; //消隐 } void Displayminute(uchar m) { P2=0xf7; //"分十位"位选端 P0=tab[m/10]; //刚开始显示数字0 delay(100); //延时一段时间 P0=0x00; //消隐 P2=0xef; //"分个位"位选端 P0=tab[m%10]; //显示段码 delay(100); //延时一段时间 P0=0x00; //消隐 P2=0xdf; //分隔符位选端 P0=0x40; //显示分隔符 delay(100); //延时一段时间 P0=0x00; //消隐 } void Displayhour(uchar h) { P2=0xfe; //"小时十位位选端" P0=tab[h/10]; //显示段码1 delay(100); P0=0x00; //消隐 P2=0xfd; //小时个位位选端 P0=tab[(h)%10]; //显示段码2 delay(100); P0=0x00;//消隐 P2=0xfb; P0=0x40; delay(100); P0=0x00;//消隐 } void keyscan() { if(S1==0) //S1的功能是秒加1 { delay(100); if(S1==0) { if(a==0) { second++; if(second>=60) { minute++; if(minute>=60) { minute=0; hour++; if(hour>=24) { hour=0; } } second=0; } } if(a==1) { minute++; if(minute>=60) { hour++; if(hour>=24) hour=0; minute=0; } } if(a==2) { hour++; if(hour>=24) hour=0; } while(!S1) { Displaysecond(second); delay(100); Displayminute(minute); delay(100); Displayhour(hour); delay(100); } } } if(S2==0) //S2的功能是秒减1 { delay(100); if(S2==0) { if(a==0) { second--; if(second<=-1) { minute--; if(minute<=-1) { hour--; if(hour<=-1) hour=23; minute=59; } second=59; } }
248 浏览量
电子时钟设计 简介 该设计主要由单片机AT89C51和液晶显示器组成,实现常用的实时电子钟功能。利用 可编程芯片AT89C51强大的功能,我们了实现日历功能、时钟功能。该时钟使用液晶显示 器作为显示模块,使用3个弹性小按键作为输入模块,调节年、月、日、星期、时、分、 秒。 一.方案比较与论证 根据设计要求,该时钟系统可分输入部分、处理部分和显示数据部分。其中输入部分是 键盘输入数据调整要显示的内容,处理部分单片机接收并通过算法处理键盘输入的信息 变成显示模块所能接受的信息,显示部分是用来实时显示处理部分处理后的数据。 输入模块我们选用三个独立弹性小按键来实现,选用矩阵式键盘则太浪费资 处理模块我们选用了STC公司的STC89C52芯片来,与Atmel公司生产的AT89S52一样,也是 40脚双列直插式封装,这里芯片对刚学单片机的人来说容易入手,其功能也很强大,用 来实现一个电子钟完全足够了。 显示部分我们可有两种选择:数码管和1602液晶显示器。实现一个电子钟若用数码管则 需6个,所占空间相对大了些,而且我们还要实现日历的功能,需要更多的数码管,所点 空间翻倍,而且还会造成单片机I/O引脚滥用甚至不够用,用液晶显示器来实现则方便得 多,界面也相对友好,但液晶显示器有个缺点就是价格比较贵。因此我们最终选择了16 02液晶显示器。另处独立弹性小按键具有价格便宜、容易获得、容易控制等特点。 二.系统理论分析、计算与电路仿真 1、定时器与中断原理 电子钟主要是利用单片机的定时器/计数器和中断来实现。定时器实际是加1计数器,单 片机每运行一个机器周期定时器就自动加1,当计到所定的数N时,单片机就产生一次中 断,停下所做的工作,转而去执行中断服务程序。单片机每个机器周期等于外部晶振的 12个振荡周期,当外部晶振是12MHz时,则每个机器周期的时间是 Tcy = 12×1/12=1µm (2-1) 定数器设为N时,即每计到N时产生一次中断,而一次中断的时间为: t = N×Tcyµm (2-2) 当产生X(x根据N来设置,两者之积为1000000)次中断后我就知道过了1s,再通过液晶 显示出来,这样就达到了让液晶每隔一秒跳一下的目的了。 2、proteus仿真结果 3、液晶部分 图4-3 液晶1、2端口分别是工作电源的负、正极,15、16是液晶背光灯电源正负极,R4起限流 作用,避免电流过大烧坏背光灯。第3端口还可接一电位器,调节液晶显示对比度。无标 号的8个端口是数据端,通过一上拉电阻接到单片机的 P0口。 三.系统的软件设计(如必要,含有流程图) 1、程序流程图 流程图中的X表示液晶中秒、分、时、星期、年、月、日中的任一个。 图5-1 主程序流程图 图5-2 扫描键盘的子程序流程 四.系统测试及结果 测试结果总的来说很满意,比预计的还要好。但由于中断函数中代码较长,故存在 一定程度的误差,用秒表测试大约为每5分钟慢了一秒,这个问题是用单片机定时器来数 时所无法解决的,中断函数必定会较长,处理这一函数会花费一定的时间这就无法做到 让时钟走得很精确。解决方法是用一时钟芯片来实现,由于时钟芯片不好买又比较贵( 新的20几块一片),暂时就不考虑了,有机会再尝试。 1. 源程序 //主函数放在最后面 #include <reg51.h> #define uchar unsigned char #define uint unsigned int sbit rs=P2^4;//定义液晶数据命令选择端 sbit lcden=P2^5;//液晶使能端 sbit s1=P2^0;//按键1 sbit s2=P2^1;//按键2 sbit s3=P2^2;//按键3 uchar count,s1num; char shi,fen,miao;//时、分、秒 char year,month,day,week;//年月日星期 void delay(uint x)//延时子程序 { uint j,k; for(j=x;j>0;j--) for(k=110;k>0;k--); } //----液晶写命令功能--- void write_com(uchar com) { rs=0; lcden=0; P0=com; delay(5); lcden=1; delay(5); lcden=0; } //---液晶写数据功能----- void write_date(uchar date) { rs=1; lcden=0; P0=date; delay(5); lcden=1; delay(5); lcden=0; } //----------写入时、分、秒--------? void write_sfm(uchar add,uchar date) { uchar shi,g