实验二 简易计数器设计
简易计数器的设计与制作

简易计数器的设计与制作该计数器可实现按键计数、增减控制、手/自动清零等功能。
需要准备下列元件:共阴极7段数码管、按键开关、4511(BCD锁存/7段译码/驱动器)、4516(可预置4位二进制加/减计数器)、40106(或7414,六反相施密特触发器)、4001(或7400,四2输入与非门)、4093(或74132,四与非施密特触发器)以及面包板、电阻、电容若干。
另外还需要准备+5V稳压电源一台,或自制电源模块.本电路以计数器集成块为核心,其输人为:计数、清零、增减切换三个按键,其输出经译码驱动器处理后,由数码管显示。
原理框图如下图所示。
一、计数器根据设计要求能增减计数,应选用可逆计数器,本设计选用可预置4位二进制加/减计数器4516,如下图。
计数脉冲从CP输入,每到来1个脉冲上升沿,二进制输出数据改变1。
如果U/D端为高电平,就增加1;反之减少l。
RD为异步清零端,RD为高电平时、计数器清零。
本设计就是要对这三个输入端进行控制。
此外,其他控制端也应合理设定:LD为异步数据预置控制端,当LD高电平时,DO~D3上的数据置入计数器中,为计数控制端,控制计数器的计数操作,CI=O时、允许计数,CI=1时、保持。
至于究竟设置为高电平还是为低电平,请自行考虑。
二、按键控制按键开关一般有两种接法,一种是平时为低电平,按下变成高电平,如下图(a)所示,图中A点为控制信号输入端子;另一种相反,平时高,按下后变低,如下图(b)所示。
读者可自行选择脉冲按键的接法,但清零键必须按(a)图接,读者可自行分析其原因。
三、译码驱动计数器输出的4位二进制数据不能直接送至数码管进行显示,并且4516也无法驱动点亮发光二极管。
本设计选用7段译码/驱动器4511,引脚排列下如图所示。
其中Al、A2、A3、A4为BCD码输入,A1为最低位。
LT为灯测试端,加高电平时,显示器正常显示,加低电平时,显示器一直显示数码'8',各笔段都被点亮以检查显示器是否有故障。
计数器设计实验报告

计数器设计实验报告《计数器设计实验报告》一、实验的开始:充满好奇与期待“哇,计数器设计实验听起来就超酷的!”我兴奋地对同桌说。
就像要去探索一个神秘的宝藏,我心里充满了好奇。
那天,阳光透过窗户洒在实验桌上,好像也在为我们的实验加油助威。
老师把实验器材一一摆出来的时候,我眼睛都放光了,感觉像是打开了一个装满魔法道具的盒子。
比如那些五颜六色的导线,就像彩虹的碎片落在桌上。
同桌也很激动,他搓着手说:“这肯定很有趣,就像搭积木一样。
”这让我更加迫不及待地想要开始了。
这时候,我就想啊,生活中的很多事情不就像这个实验吗?充满未知,只要我们带着好奇和期待去探索,就会有不一样的收获。
二、遇到困难:有点沮丧但不放弃“哎呀,这怎么弄啊?”我皱着眉头嘟囔着。
按照图纸接线的时候,我老是接错,计数器就是不工作。
旁边的小组已经有进展了,我心里那叫一个着急啊,就像热锅上的蚂蚁。
我对小组成员说:“我感觉我像个迷路的小蚂蚁,完全找不到方向了。
”这时组长拍了拍我的肩膀说:“别灰心,我们再仔细看看。
”他的话就像一阵小风吹散了我心头的乌云。
就像爬山的时候突然遇到陡峭的路段,虽然难走,但只要有人鼓励,就有勇气继续。
于是我们重新检查线路,一个一个接口地核对,每检查一个接口,都像是在黑暗中摸索着寻找那把能打开成功之门的钥匙。
三、小组合作:团结的力量真伟大“我发现问题了!”小组里的一个同学大喊一声。
就像黑暗中突然出现了一道亮光。
原来是有个小零件的连接松动了。
我们都围了过去,你一言我一语地讨论起来。
“看,就是这里,差点就被我们忽略了。
”另一个同学说道。
我笑着说:“还好我们是一个小组,人多力量大啊。
”这就像一群小蜜蜂一起建造蜂巢,每个小蜜蜂都有自己的任务,缺了谁都不行。
大家齐心协力把零件重新接好,计数器开始有反应了,那一瞬间,我们都欢呼起来,那种喜悦就像在一场比赛中获得了冠军一样。
我深深感受到,在困难面前,大家团结在一起,就没有克服不了的难关,就像很多根小木棍绑在一起,就变得很结实。
数电实验二:简易计算器(设计报告)

数电实验2设计报告实验名称:简易计算器 实验目的:1.熟练掌握综合逻辑电路的设计方法及调试方法2.掌握Verilog HDL 数字系统设计方法3.熟悉PLD 实验箱的结构和使用及QuartusII 软件的基本操作4.掌握采用Quartus II 软件和实验箱设计实现逻辑电路的基本过程设计任务及要求:利用LPM 例化元件和适当的中小规模时序、组合逻辑电路设计一个4位简易计算器,实现2个4位二进制数的加、减、乘、除运算,完成主要模块的波形仿真,并将设计下载到实验箱进行功能测试。
要求:1、 用8个开关分别作为2个4位输入数据2、 运算结果用数码管显示电路设计过程:1、 设定加、减、乘、除四个LPM 例化元件加法器:2个四位二进制输入(加数、被加数),1个4位二进制输出(和)减法器:2个四位二进制输入(减数、被减数),1个4位二进制输出(差)乘法器:2个四位二进制输入(乘数、被乘数),1个8位二进制输出(积)除法器:24位二进制输出(分别代表商和余数)2、加入组合逻辑电路和4选一数据选择器,控制进行运算的种类(1)组合逻辑电路输入:功能:为了利用矩阵键盘对计算器对输入数字的加减乘除进行控制,我们画了这个组合逻辑电路,将矩阵键盘的行管脚和列管脚分别为输入后,当(1,1)位置的按键按下,则输出端输出2位2进制数11(控制减法操作),当(2,2)位置的按键按下,则输出端输出2位2进制数10(控制加法操作),当(3,3)位置的按键按下,则输出端输出2位2进制数01(控制乘法操作),当所有按键都没有按下时,输出默认为00,即控制除法操作。
(2)4选一数据选择器功能X1,y1为想要计算的两个4位2进制数,当S0,S1为11的时候,将X1,y1送入减法器输入端,当S0,S1为10的时候,将X1,y1送入加法器输入端,当S0,S1为01的时候,将X1,y1送入乘法器输入端,当S0,S1为00的时候,将X1,y1送入除法器输入端。
计数器的设计

计数器的设计
计数器是一种电子数字电路,用于记录某个事件或进程的次数。
设计计数器的步骤如下:
1.确定计数器的位数:计数器的位数决定了它能够计数的最大值。
例如,一个
8位二进制计数器可以计数0到255之间的所有整数。
根据实际需求,选择适当的位数。
2.设计计数器的时钟输入电路:计数器的时钟输入决定了它何时进行计数。
通
常使用晶体振荡器或者其他时钟源来提供计数器的时钟信号。
3.选择计数器的计数模式:计数器可以分为同步计数器和异步计数器。
同步计
数器的各个位同时进行计数,而异步计数器的各个位独立进行计数。
根据具体需求选择合适的计数模式。
4.选择计数器的计数方式:计数器可以被设计为向上计数或向下计数。
向上计
数表示计数器的值递增,而向下计数表示计数器的值递减。
根据具体需求选择合适的计数方式。
5.设计计数器的清零电路:计数器需要在一些特定的时刻进行清零操作,以便
重新开始计数。
为此,需要设计清零电路,使计数器的值归零。
6.设计计数器的输出电路:计数器的输出电路将其计数器的值转换成数字形式
或者其他需要的形式,例如LED显示屏、七段数码管等。
7.选取适当的计数器芯片:根据具体需求选择合适的计数器芯片,例如74LS161、
74LS163等,这些芯片可以快速地实现基于上述设计步骤的计数器电路。
需要注意的是,在设计计数器时,应当根据实际情况进行仿真测试,确保其正常工作并满足设计要求。
实验二定时器计数器实验

实验二定时器计数器实验1.实验目的①掌握8051的定时器、中断系统编程方法;②了解定时器的应用、实时程序的设计和调试技巧。
2.预习要求①理解定时器的四种工作方式的异同点;②理解TMOD寄存器中GATE、C/T控制位的作用;③理解定时器中断服务程序的响应过程;④理解定时器实现精确定时的方法;⑤认真预习本节实验内容,设计出器件之间的实验连接线,自行编写程序,填写实验报告。
3.实验设备计算机1台;ZDGDTH-1型80C51实验开发系统1套;2号导线、8P数据线若干条;4.基础型实验内容①如图2-1所示,假设采用P1.0口控制外部LED,用拨动开关控制外部中断,用二号导线将D2区80C51/C8051F020MCU模块的 P1.0、P3.2口分别与A 5区八位逻辑电平显示模块的L0、C6区八位逻辑电平输出K0相连。
在Keil环境运行以下程序,分别拨动K0于高低电平位置,观察实验现象,并说明所发生实验现象的原因。
图2-1 外部中断及LED显示电路ORG 0000HLJMP MAINORG 000BHLJMP TIMER0ORG 0030HMAIN: CLR P1.0MOV TMOD,#0AHMOV TL0,#50HMOV TH0,#50HSETB TR0SJMP $TIMER0: CPL P1.0RETIEND②用二号导线将80C51/C8051F020 MCU模块的P1.0与八位逻辑电平显示模块的任意一只发光二极管相连,全速运行下列程序,发光二极管隔一秒点亮一次,点亮时间为一秒。
流程图为:主程序框图定时中断子程序图源程序:Tick equ 10000 ; 10000 x 100us = 1sT100us equ 20 ; 100us时间常数(6M)C100us equ 5h ; 100us记数单元LEDBuf BIT 00HLED BIT P1.0org 0000Hljmp Startorg 000BHLJMP T0IntORG 0100HT0Int: push PSWmov a, C100us+1jnz Goondec C100usGoon: dec C100us+1mov a, C100usorl a, C100us+1jnz Exit ; 100us 记数器不为0, 返回mov C100us, #HIGH(TICK);#high(Tick)mov C100us+1, #LOW(TICK);#low(Tick)cpl LEDBuf ;100us 记数器为0, 重置记数器,取反LEDExit: pop PSWretiStart: mov TMOD, #02h ; 方式2, 定时器mov TH0, #t100usmov TL0, #t100usmov IE, #10000010b ; EA=1, IT0 = 1setb TR0 ; 开始定时clr LEDBufclr P1.0mov C100us, #high(Tick)mov C100us+1, #low(Tick)Loop: mov c, LEDBufmov P1.0, csjmp Loopend5.设计型实验内容①编程使第1~4和5~8发光二极管循环点亮的时间分别为0.25s、0.5s、0.75s、1s。
不用珠子做计数器的方法

不用珠子做计数器的方法
1. 使用纸张折叠
可以使用纸张通过折叠的方法做简易的计数器。
折叠出确定的折痕后,展开纸张按折痕折叠,每折一次表示计数一次。
2. 利用小石子
找一些大小和形状相近的小石子,将它们分散放置。
每次需要计数时,取一个石子放到一边,直到石子用完为止。
3. 采用线圈表示
取一段等长的线或绳子,每计一个数就在线上打一个结。
线上打的结数目就表示总的计数次数。
4. 用筷子排列组合
取多根相同的筷子,将它们平行排列,每计一个数就改变一根筷子的方向。
筷子排列组合表示计数。
5. 制作计数板
可以在木板上钉上一定数量的图钉,每次计数时就翻转一个图钉的方向。
图钉方向表示总数。
6. 线条符号记录
在纸上绘制线条或符号,每次计数就增加一个一样的线条或符号,数量代表计数结果。
7. 利用可堆叠物品
像积木、盒子等可堆叠物品,每次计数将一个物品堆上,堆叠高度表示计数值。
8. 线性表示
在纸或地上划一条线,每计数一次就在线上划一个刻度,刻度数量即是总数。
9. 利用声音或动作
也可以通过击掌、拍手、说话等声音或动作来计数。
PLC实验二 定时器、计数器实验

实验二定时器、计数器实验一、目的要求1、了解和熟悉编程软件的使用方法。
2、了解写入和编辑用户程序的方法。
3、掌握定时器、计数器的使用。
二、实验设备台达可编程序控制器一台;PLC实验箱一台;装有WPL编程软件和开发软件的计算机一台;编程连接电缆一根。
三、实验内容1、实验原理定时器相当于继电器电路中的时间继电器,可在程序中作延时控制。
可编程控制器中的定时器是根据时钟脉冲累积计时的,时钟脉冲有1ms、10ms、100ms等不同规格。
(定时器的工作过程实际上是对时钟脉冲计数)因工作需要,定时器除了占有自己编号的存储器位外,还占有一个设定值寄存器(字),一个当前值寄存器(字)。
设定值寄存器(字)存储编程时赋值的计时时间设定值。
当前值寄存器记录计时当前值。
这些寄存器为16位二进制存储器。
其最大值乘以定时器的计时单位值即是定时器的最大计时范围值。
定时器满足计时条件开始计时,当前值寄存器则开始计数,当当前值与设定值相等时定时器动作,常开触点接通,常闭触点断开,并通过程序作用于控制对象,达到时间控制的目的。
TMR为十六位定时器,当该指令执行时,其所指定的定时器线圈受电,定时器开始计时,当到达所指定的定时值(计时值≥设定值),其接点动作如下:CNT为十六位计数器,当该指令由Off→On执行,表示所指定的计数器线圈由失电→受电,则该计数器计数值加1,当计数到达所指定的定数值(计数值= 设定值),其接点动作如下:??当计数到达之后,若再有计数脉冲输入,其接点及计数值均保持不变,若要重新计数或作清除的动作,请利用RST指令。
编程使PLC输出Y0输出3秒的脉冲,PLC输入1对脉冲计数,计数值为10时,PLC输出Y1输出为1,第11个脉冲清零。
OUTPUT00OUTPUT012、示范梯形图3、接线方法:INPUT 00接PO1INPUT 01接PO2OUTPUT 01 接输出显示LED灯FL1四、实验步骤1、按实验要求对PLC编程,或运行PLC程序DVP2;2、下载实验程序,成功完成后,使PLC处于运行状态,RUN指示灯亮;3、按下PO1十次观察输出变化,LED灯亮;此时按下PO2,LED灯灭。
简易计算器实验报告

简易计算器实验报告一、实验目的本次实验的目的是设计并实现一个简易计算器,能够进行基本的四则运算(加、减、乘、除),以及处理括号的优先级运算,提高对程序设计和逻辑思维的理解与应用能力。
二、实验原理1、四则运算的优先级规则在数学运算中,先计算括号内的表达式,然后按照先乘除后加减的顺序进行计算。
乘除法的优先级高于加减法,如果在同一级运算中,按照从左到右的顺序进行。
2、数据结构的选择使用栈(Stack)数据结构来存储操作数和运算符。
栈具有先进后出的特点,非常适合处理表达式中的括号和优先级。
3、算法思路首先,将输入的表达式进行解析,将数字和运算符分别存储到不同的栈中。
然后,根据运算符的优先级进行计算,将计算结果重新压入栈中,直到表达式计算完毕。
三、实验设备及环境1、编程工具:选择了 Python 语言作为主要的编程工具,使用PyCharm 集成开发环境进行代码编写和调试。
2、操作系统:Windows 10 操作系统。
四、实验步骤1、定义数据结构定义两个栈,一个用于存储操作数(operandStack),一个用于存储运算符(operatorStack)。
2、表达式解析遍历输入的表达式字符串,将数字转换为整数并压入操作数栈,将运算符压入运算符栈。
遇到左括号直接压入运算符栈,遇到右括号则进行括号内的运算。
3、运算处理当运算符栈不为空时,取出栈顶的运算符和两个操作数进行计算。
根据运算符的优先级进行相应的运算,将结果压入操作数栈。
4、最终结果当表达式解析完毕后,操作数栈中的唯一元素即为表达式的计算结果。
五、代码实现```pythonclass SimpleCalculator:def __init__(self):selfoperandStack =selfoperatorStack =def calculate(self, expression):for char in expression:if charisdigit():selfoperandStackappend(int(char))elif char in '+/()':if char =='(':selfoperatorStackappend(char)elif char ==')':while selfoperatorStack-1!='(':operator = selfoperatorStackpop()operand2 = selfoperandStackpop()operand1 = selfoperandStackpop()result = selfperformOperation(operand1, operand2, operator)selfoperandStackappend(result)selfoperatorStackpop()else:while selfoperatorStack and selfhasHigherPrecedence(selfoperatorStack-1, char):operator = selfoperatorStackpop()operand2 = selfoperandStackpop()operand1 = selfoperandStackpop()result = selfperformOperation(operand1, operand2, operator)selfoperandStackappend(result)selfoperatorStackappend(char)while selfoperatorStack:operator = selfoperatorStackpop()operand2 = selfoperandStackpop()operand1 = selfoperandStackpop()result = selfperformOperation(operand1, operand2, operator)selfoperandStackappend(result)return selfoperandStackpop()def hasHigherPrecedence(self, op1, op2):if op1 in '/' and op2 in '+':return Trueelif op1 in '+' and op2 in '+':return Falseelif op1 in '/' and op2 in '/':return Falsereturn Falsedef performOperation(self, operand1, operand2, operator):if operator =='+':return operand1 + operand2elif operator =='':return operand1 operand2elif operator =='':return operand1 operand2elif operator =='/':if operand2 == 0:raise ValueError("除数不能为 0")return operand1 / operand2if __name__ =="__main__":calculator = SimpleCalculator()expression ="2 + 3 (4 1) / 2"result = calculatorcalculate(expression)print("计算结果:", result)```六、实验结果与分析1、测试用例及结果输入表达式:"2 + 3 4",计算结果:14输入表达式:"(2 + 3) 4",计算结果:20输入表达式:"5 2 3",计算结果:-1输入表达式:"10 / 2 + 1",计算结果:62、结果分析对于简单的四则运算表达式,计算器能够正确计算出结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二简易计数器设计
实验目的:掌握基本的VHDL语法,能够使用VHDL输入方式,设计实现简单的组合逻辑电路。
实验内容:设计实现个位数的加减乘除计算模块,实现4-8段数码管编码模块,利用两个模块实现计算器。
原理图:如下图所示
仿真结果及结果分析:
如下两张仿真结果图所示,A、B为两个个位的数,表示的范围都是0—7;S 表示A和B两个数进行运算时中间的运算符,即当S为0表示做加法运算、当S 为1表示做减法运算、当S为2表示做乘法运算、当S为3表示做除法运算;Y1和Y0表示A与B运算所得的结果用16进表示,做完后的仿真结果即为对应的七段显示译码器上显示的值,Y1是高位,Y0是低位和除法中的余数,当Y的数值为10则表示负号。
管脚锁定说明:
硬件测试情况说明及结果分析:
根据原理图上的芯片引脚功能按照设好的引脚用线连接好电路,A、B、S应该接到八个开关上控制A、B两个数的运算。
开关L3、L2、L1分别对应引脚58、59、60,表示的为数A所表示的二进制数;开关L6、L5、L4分别对应引脚53、54、65,表示的为数B所表示的二进制数;S1、S0对应引脚为51、52,表示的为A 与B之间的运算符,00则为加法、01则为减法、10为乘法、11为除法;而Y0[0]—Y0[6]即输出低位对应七段显示译码器A—G,对应引脚分别为142、141、138、137、136、135、133,而Y1[0]—Y1[6]即输出的高位对应七段显示译码器A—G,
对应引脚分别为10、7、4、3、2、1、144,然后通过八个开关键来操作A、B两数的加减乘除情况,观察七段显示译码器上的结果是否正确,实验完成后可知所做实验符合预期结果的要求,实验成功。
cal代码:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY cal IS
PORT(
a,b:in integer range 7 downto 0;
s :in STD_LOGIC_VECTOR (1 downto 0);
y1,y0:out integer range 10 downto 0);
END cal;
ARCHITECTURE archcal OF cal IS
BEGIN
ca14_1:process(a,b)
variable t:integer;
begin
if s="00" then t:=(a+b);
elsif s="01" then t:=(a-b);
elsif s="10" then t:=(a*b);
else t:=(a/b);
end if;
if (t>=0) then y1<=(t/10);y0<=(t mod 10);
else y1<=10;y0<=(-t);
end if;
end process ca14_1;
END ARCHITECTURE archcal;
seg7代码:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY seg7 IS
PORT(
a:in STD_LOGIC_VECTOR (3 downto 0);
y:out STD_LOGIC_VECTOR (6 downto 0)
);
END seg7;
ARCHITECTURE archseg7 OF seg7 IS
BEGIN
proseg7:process(a)
begin
case a is
when "0000"=>y<="1111110";
when "0001"=>y<="0110000";
when "0010"=>y<="1101101";
when "0011"=>y<="1111001";
when "0100"=>y<="0110011";
when "0101"=>y<="1011011";
when "0110"=>y<="0011111";
when "0111"=>y<="1110000";
when "1000"=>y<="1111111";
when "1001"=>y<="1111011";
when "1010"=>y<="0000001";
when others=>null;
end case;
end process proseg7;
END ARCHITECTURE archseg7;
实验总结:
通过此次实验我们掌握了基本的VHDL语法,学会了使用VHDL输入方式,设计实现简单的组合逻辑电路。
学会了实现个位数的加减乘除计算的模块,以及实现4-8段数码管编码模块,并利用两个模块实现计算器,同时也对仿真的步骤加深了印象,能更好的运用。