搜档网
当前位置:搜档网 › 汇编语言实现十进制加减计算器的设计

汇编语言实现十进制加减计算器的设计

汇编语言实现十进制加减计算器的设计
汇编语言实现十进制加减计算器的设计

十进制数加减计算器的设计

1.需求说明 (4)

2.设计说明 (4)

2.1 简要分析 (4)

2.2 概要设计 (4)

2.2.1 主要模块 (4)

2.2.2 主函数结构 (5)

3.详细的算法描述 (6)

3.1 详细的算法描述 (6)

3.2 算法流程图 (11)

3.2.1 程序流程图 (11)

3.2.2 输入函数(inputdec)流程图 (12)

3.2.3 输出函数(outputdec)流程图 (12)

3.2.4 输出算术表达式函数(show)流程图 (13)

4.源程序与执行结果 (13)

4.1 源程序 (13)

4.2 执行结果 (19)

4.2.1 测试方法 (19)

4.2.2 测试结果 (19)

5.使用说明 (20)

6.总结 (21)

1.需求说明

十进制数加减计算器的设计,要求完成:

(1)用汇编语言正确编写程序,完成简单的十进制数的加减运算,

(2)求能正确进行输入和输出操作,界面追求友好,尽量实现菜单操作

(3)用若干测试用例来测试程序的正确性

2.设计说明

2.1 简要分析

要正确、友好地完成用汇编语言设计十进制数的加减计算器,我们应该完成以下几个功能:

(1)相关菜单及字符输出的设计

(2)十进制数的输入

(3)十进制数的输出

(4)加法运算

(5)减法运算

(6)输出运算表达式

(7)回车换行功能(因为为了控制格式,经常要用到)

2.2 概要设计

2.2.1 主要模块

(1)菜单及字符

menu db ‘|--------------------------------------|’0dh,0ah

db ‘| 1.Add |’0dh,0ah

db ‘| 2.Sub |’0dh,0ah

db ‘| 0.Exit |’0dh,0ah

db ‘|--------------------------------------|’0dh,0ah

db ‘Please input your choice:$’

mess1 db 'Please input the first number: $'

mess2 db 'Please input the second number: $'

mess3 db 'The result is : $'

mess4 db '-$'

mess5 db '+$'

mess6 db '=$'

(2)十进制数的输入

inputdec proc

实现代码

ret

inputdec endp

(3)十进制数的输出

outputdec proc

实现代码

ret

outputdec endp

(4)加法运算

addfun proc

显示mess1 ;提示输入第一个数

call inputdec ;输入第一个数

显示 mess2 ;提示输入第二个数

call inputdec ;输入第二个数

做加法运算

显示mess3 ;提示输入第一个数

call show ;输出运算表达式

ret

addfun endp

(5)减法运算

subtract proc

显示mess1 ;提示输入第一个数

call inputdec ;输入第一个数

显示 mess2 ;提示输入第二个数

call inputdec ;输入第二个数

做减法运算

显示mess3 ;提示输入第一个数

call show ;输出运算表达式

ret

subtract endp

(6)输出运表达算式函数

show proc

call outputdec ;输出第一个数

输出运算符号

call outputdec ;输出第二个数

输出等号

call outputdec ;输出运算结果

ret

show endp

(7)回车换行

crlf proc

实现代码

ret

crlf endp

2.2.2 主函数结构

main proc

显示menu ;供选择

输入选项

判断选项

Case 1: call addfun

Case 2: call subtract

Case 3: 退出程序

main endp

3.详细的算法描述

3.1详细的算法描述

(1)main函数

main proc

push ds

xor ax,ax

push ax

mov ax,data

mov ds,ax

ks:lea dx,menu ;输出菜单项

mov ah,09h

int 21h

mov al,0

mov ah,01h ;输入选择项

int 21h

sub al,30h

cmp al,2 ;判断选择项

jz l2 ;如果输入为2 ,则跳转到l2

cmp al,1

jz l1 ;如果输入为1,则跳转到l1

mov ah,4ch ;这两句为正常返回dos界面

int 21h

l1:call addfun ;调用加法函数

jmp ks ;返回到菜单

l2: call subtract;调用减法操作

jmp ks ;返回到菜单

main endp

(2)addfun函数(加法运算函数)

addfun proc

call crlf

mov bp,1 ;给下面的show输出中间的运算符做标记,1为加号 lea dx,mess1 ;给出输入第一个数的提示信息

mov ah,09h

int 21h

call inputdec;调用输入函数,输入第一个数

mov si,bx ;第一个数保存在si中

lea dx,mess2 ;给出输入第二个数的提示信息

mov ah,09h

int 21h

call inputdec;调用输入函数,输入第二个数

mov di,bx ;第二个数保存在di中

mov bx,si ;将第一个数保存到bx中,再进行操作,以免影响到的输出 add bx,di ;第一个数和第二个数相加,结果保存在bx中

lea dx,mess3 ;给出输出结果的提示信息

mov ah,09h

int 21h

call show ;调用show函数,输出算术表达式

ret ;返回函数调用处

addfun endp

(3)subtract函数(减法运算函数)

subtract proc

call crlf

mov bp,2 ;给下面的show输出中间的运算符做标记,2为减号

lea dx,mess1;给出输入第一个数的提示信息

mov ah,09h

int 21h

call inputdec;调用输入函数,输入第一个数

mov si,bx ;第一个数保存在si中

lea dx,mess2 ;给出输入第一个数的提示信息

mov ah,09h

int 21h

call inputdec;调用输入函数,输入第一个数

mov di,bx ;第二个数保存在di中

mov bx,si

cmp bx,di ;比较第一个数和第二人数的大小

js subl1 ;如果为负(第一个数小一些)则跳转

sub bx,di ;否则直接进行计算,结果保存在bx中

jmp subl2

subl1:mov bp,3 ;为show里面是否输出负号作准备,3的时候要输出负号

push di ;先将第二个操作数进栈,否则下面的减法操作会将其值改变 sub di,bx

mov bx,di

pop di ;第二个操作数出栈,再赋给di寄存器

subl2:lea dx,mess3 ;输出运算表达式的提示

mov ah,09h

int 21h

call show ;调用show函数,输出运算表达式

ret

subtract endp

(4)inputdec函数(十进制输入函数)

inputdec proc

mov bx,0

il0:mov ah,01h ;输入数字

int 21h

cmp al,0dh ;判断是否为回车

jz iexit ;如果是回车,则返回到函数调用处

sub al,30h ;得到输入数字的真实大小

mov ah,0

xchg bx,ax ;将bx值与ax值交换,因为下面乘以10是将ax中的值乘10 mov cx,10 ;注意,这里不能用CL,否则数较大时就会出现问题

mul cx ;将ax中的值乘以10,也就是将bx中原来的值乘以10

add bx,ax

jmp il0 ;进行输入下一数值位

iexit:call crlf

ret

inputdec endp

(5)outputdec函数(十进制输出函数)

outputdec proc

push bp

mov bp,0 ;前导0输出与否的标志,0时不输出,1时输出

mov ax,bx

mov dx,0 ;在进行除法之前,要对dx赋0,否则结果出错

mov cx,10000

div cx ;除法,字操作,商在ax中,余数在dx中

mov bx,dx ;保存余数,作为下一次裤除数

mov dl,al

cmp dl,0 ;将万位同0比较

jz ol0 ;如果万位为0则不输出万位

mov bp,1 ;如果万位不为0,则应将bp设为1,以后的0都要输出

or dl,30h

mov ah,02h

int 21h ;输出万位

ol0:mov ax,bx ;输出千位的方法与万位相同

mov dx,0

mov cx,1000

div cx ;字操作,商在ax中,余数在dx中

mov bx,dx ;保存余数,作为下一次裤除数

mov dl,al

cmp bp,0

jz ol1

or dl,30h

mov ah,02h

int 21h ;输出千位

jmp ol2

ol1:cmp dl,0

jz ol2

mov bp,1

or dl,30h

mov ah,02h

int 21h ;输出千位

ol2:mov ax,bx ;输出百位与千位、万位方法相同

mov dx,0

mov cx,100

div cx ;字操作,商在ax中,余数在dx中

mov bx,dx ;保存余数,作为下一次裤除数

mov dl,al

cmp bp,0

jz ol3

mov bp,1

or dl,30h

mov ah,02h

int 21h ;输出百位

jmp ol4

ol3:cmp dl,0

jz ol4

or dl,30h

mov ah,02h

int 21h ;输出百位

ol4:mov ax,bx ;输出十位的方法与前面几位方法相同

mov cl,10

div cl ;字节操作,商在al中,余数在ah中

mov bl,ah ;保存余数,作为下一次裤除数,也就是个位数

mov dl,al

cmp bp,0

jz ol5

mov bp,1

or dl,30h

mov ah,02h

int 21h ;输出十位

jmp ol6

ol5:cmp dl,0

jz ol6

or dl,30h

mov ah,02h

int 21h ;输出十位

ol6:mov dl,bl ;在上面,bl中的数直接就应该为个位,所以直接输出

or dl,30h

mov ah,02h

int 21h

pop bp ;恢复bp

ret

outputdec endp

(6)show函数(输出运算表达式函数)

show proc

push bx ;把运算结果保存起来

mov bx,si ;第一个数放在si中

call outputdec;输出第一个数

cmp bp,3 ;是否为减号

jz sl0

cmp bp,2 ;判断是否为减号

jz sl0

lea dx,mess5 ;输出加号

mov ah,09h

int 21h

jmp sl1

sl0:lea dx,mess4 ;输出减号

mov ah,09h

int 21h

sl1:mov bx,di ;第二个数放在di中

call outputdec ;输出第二个数

lea dx,mess6 ;输出等号

mov ah,09h

int 21h

cmp bp,3 ;判断是否需要输出负号 jnz sl2

lea dx,mess4 ;输出负号

mov ah,09h

int 21h

sl2:pop bx ;得到运算结果

call outputdec;输出运算结果

call crlf

ret

show endp

(7)crlf函数(输出回车换行函数)

crlf proc

push ax

push dx

mov ah,02h

mov dl,0dh ;输出回车

int 21h

mov dl,0ah ;输出换行

int 21h ;ah值被改变 pop dx

pop ax

ret

crlf endp

3.2 算法流程图

3.2.2 十进制输入(inputdec)流程图

3.2.3 十进制输出

3.2.4 输出算术表达式(show)流程图

4.

4.1 源程序

assume cs:code,ds:data

data segment ;定义数据段

menu db ‘|--------------------------------------|’0dh,0ah db ‘| 1.Add |’0dh,0ah db ‘| 2.Sub |’0dh,0ah db ‘| 0.Exit |’0dh,0ah

db ‘|--------------------------------------|’0dh,0ah

db ‘Please input your choice:$’

mess1 db 'Please input the first number: $'

mess2 db 'Please input the second number: $'

mess3 db 'The result is : $'

mess4 db '-$'

mess5 db '+$'

mess6 db '=$'

data ends ;数据段结束

code segment ;定义代码段

main proc ;主函数

push ds

xor ax,ax

push ax

mov ax,data

mov ds,ax

ks:lea dx,menu

mov ah,09h

int 21h

mov al,0

mov ah,01h

int 21h

sub al,30h

cmp al,2

jz l2

cmp al,1

jz l1

mov ah,4ch

int 21h

l1:call addfun

jmp ks

l2: call subtract

jmp ks

main endp ;主函数结束

addfun proc ;加法运算函数

call crlf

mov bp,1 ;给下面的show输出中间的运算符做标记 lea dx,mess1

mov ah,09h

int 21h

call inputdec

mov si,bx ;第一个数保存在si中

lea dx,mess2

int 21h

call inputdec

mov di,bx ;第二个数保存在di中

mov bx,si

add bx,di

lea dx,mess3

mov ah,09h

int 21h

call show ;输出结果

ret

addfun endp ;加法运算函数结束

subtract proc ;减法运算函数

call crlf

mov bp,2 ;给下面的show输出中间的运算符做标记 lea dx,mess1

mov ah,09h

int 21h

call inputdec

mov si,bx ;第一个数保存在si中

lea dx,mess2

mov ah,09h

int 21h

call inputdec

mov di,bx ;第二个数保存在di中

mov bx,si

cmp bx,di

js subl1 ;如果为负则跳转

sub bx,di

jmp subl2

subl1:mov bp,3 ;为show里面是否输出负号作准备

push di

sub di,bx

mov bx,di

pop di

subl2:lea dx,mess3

mov ah,09h

int 21h

call show

ret

subtract endp ;减法运算函数结束

inputdec proc ;十进制输入函数

il0:mov ah,01h

int 21h

cmp al,0dh ;判断是否为回车

jz iexit

sub al,30h

mov ah,0

xchg bx,ax

mov cl,10

mul cl

add bx,ax

jmp il0

iexit:call crlf

ret

inputdec endp ;十进制输入函数结束

outputdec proc ;十进制输出函数

push bp ;用来做前导0的标记

mov bp,0

mov ax,bx

mov dx,0 ;在进行除法之前,要对dx赋0,否则结果over devide mov cx,10000

div cx ;字操作,商在ax中,余数在dx中

mov bx,dx ;保存余数,作为下一次裤除数

mov dl,al

cmp dl,0

jz ol0

mov bp,1

or dl,30h

mov ah,02h

int 21h ;输出万位

ol0:mov ax,bx

mov dx,0

mov cx,1000

div cx ;字操作,商在ax中,余数在dx中

mov bx,dx ;保存余数,作为下一次裤除数

mov dl,al

cmp bp,0

jz ol1

or dl,30h

mov ah,02h

int 21h ;输出千位

jmp ol2

ol1:cmp dl,0

jz ol2

mov bp,1

or dl,30h

mov ah,02h

int 21h ;输出千位

ol2:mov ax,bx

mov dx,0

mov cx,100

div cx ;字操作,商在ax中,余数在dx中 mov bx,dx ;保存余数,作为下一次裤除数

mov dl,al

cmp bp,0

jz ol3

or dl,30h

mov ah,02h

int 21h ;输出百位

jmp ol4

ol3:cmp dl,0

jz ol4

mov bp,1

or dl,30h

mov ah,02h

int 21h ;输出百位

ol4:mov ax,bx

mov cl,10

div cl ;字节操作,商在al中,余数在ah中 mov bl,ah ;保存余数,作为下一次裤除数

mov dl,al

cmp bp,0

jz ol5

or dl,30h

mov ah,02h

int 21h ;输出十位

jmp ol6

ol5:cmp dl,0

jz ol6

mov bp,1

or dl,30h

mov ah,02h

int 21h ;输出十位

ol6:mov dl,bl

or dl,30h

mov ah,02h

int 21h

pop bp ;恢复bp

ret

outputdec endp ;十进制输出函数结

show proc ;输出运算式函数

push bx ;把运算结果保存起来 mov bx,si ;第一个数放在si中 call outputdec

cmp bp,3 ;是否为减号

jz sl0

cmp bp,2

jz sl0

lea dx,mess5

mov ah,09h

int 21h

jmp sl1

sl0:lea dx,mess4

mov ah,09h

int 21h

sl1:mov bx,di ;第二个数放在di中 call outputdec

lea dx,mess6

mov ah,09h

int 21h

cmp bp,3

jnz sl2

lea dx,mess4

mov ah,09h

int 21h

sl2:pop bx ;得到运算结果

call outputdec

call crlf

ret

show endp ;输出运算式函数结束

crlf proc ;回车换行函数

push ax

push dx

mov ah,02h

mov dl,0dh

int 21h

mov dl,0ah

int 21h ;ah值被改变

pop dx

pop ax

ret

crlf endp ;回车换行函数结束

code ends ;代码段结束

end main ;程序结束

4.2 执行结果

4.2.1 测试方法

本次测试我们采用的是通过菜单形式,输出选择项,然后根据提示信息,输入相关数字,进行举例测试。

对于加法,我们是随便输入两组数:10与1000 122与321

对于减法,我们也是随意输入两组数,200与2 (结果为正的情况)

10与198(结果为负的情况)对于本题,我们也设置了错误结果测试:加法60000与6000,减法 2与70000

4.2.2 测试结果

(1)加减法正确测试结果如下:

减法测试结果

加法测试结果

(2)错误结果显示如下:

错误结果

错误结果分析:

加法,60000+6000等于66000,而我们用的的BX寄存器保存值,BX寄存器最大能保存16位数字,最大能表示的无符号数为:2^16-1=65535;而值66000超过了范围,66000-2^16=464,即把66000当成了补码,所以为464

减法,2-70000=69998,与加法错误一样,69998-2^16=4462,即把4462当成了69998补码。

5.使用说明

1.本次程序的使用说明,我们先把源程序拷贝到一个文本文件中,并把它命名为

一个汇编程序的格式(*.asm),如ca.asm

2.我们在dos中找到masm.exe与link.exe文件所在的文件夹

masm>masm ca

………

masm>link ca

………

masm>ca

然后根据提示信息进行相关操作

3.操作示例图如下:

进入dos找到masm.exe所在的文件夹

上一步回车后,进行如图所示的操作

接着一上步回车,输入ca,便进入了操作演示界面

6.总结

经过几天的奋斗,本次汇编语言课程设计总算是完成了。本次课程设计,是对我所学汇编语言知识的一次比较综合的检测,同是也是一次很有意义的实践训练。

一拿到题目的时候,一看,是设计十进制加减计算器,心里面感觉好像比较简单,好像也有了大体模块:菜单提示,加法、减法运算操作,十进制输入、输出操作,主函数。可是当我真正的动起手的时候,才发现很多基本问题都忘记了,比如:汇编程序的格式只记得一般都有代码段和数据段,但具体怎么写?菜单,我要怎么设置字符串变量?输入、输出操作,用的是哪个寄存器?比如这些问题,都把我给难住了。

后来看看课本,也把以前写的程序看了看,才对这些基本问题有了比较清楚的了解。写程序确实不是很难,几个基本模块没有花多长时间就写好,但是后来陆续碰到各种各样的错误,修改它可就相当困难了,明明觉得逻辑上应该是对的呀,可是结果却相差很远。典型的错误有以下几种情况。

比如,有一次,无论输入什么,程序直接跳出,加法、减法都没有执行。后来分析才发现,是因为在输入选项之后,我为了控制格式,调用了回车换行函数(当时没有对dx,ax进行进栈和出栈操作)再进行判断,此时al的值因为调用int 21h语句而被改变为0了,所以你无论输入什么数,都会执行“0.Exit”所对应的语句,自然就会跳出程序。再比如有一次无论是加法还是减法,都会出现“Device Overload”错误,后来我在除cx(10000/1000/100)之前将DX置0,即做了一个“mov dx,0 ”操作之后问题就解决了。再之后在我认为程序正确了的

60进制计数器课程设计报告

电子技术基础实验 课程设计 60进制计数器

一、实验目的 (一)掌握中规模集成计数器74LS161的引脚图和逻辑功能。 (二)熟悉555集成定数器芯片的引脚图。 (三)利用74LS161和555定时器构成60进制计数器。 (四)在Multisim软件中仿真60进制计数器。 二、实验容 (一)集成计数器74LS161逻辑功能验证。 (二)用555定时器构成多谐振荡器。 (三)用两片74LS161和555定时器构成60进制计数器。 三、集成计数器介绍 (一)集成计数器74LS161管脚介绍 74LS161是4位二进制同步加法计时器。图1为它的管脚排列图,集成芯片74LS161的CLR是异步清零端(低电平有效),LOAD是异步预置数控制端(低电平有效)。CLK是时钟脉冲输入端,RCO是进位输出端,ENP、ENT是计数器使能端,高电平有效。A、B、C、D是数据输入端; QA、QB、QC、QD是数据输出端。

图1 74LS161管脚排列图 (二)集成计数器74LS161功能介绍 由表1可知,74LS161具有以下功能: 1.异步清零。当CLR=0时,无论其他各输入端的状态如何,计数器均被直接置“0”。 2.同步预置数。当CLR=1、LOAD=0且在CP上升沿作用时,计数器将ABCD同时置入QA、QB、QC、QD,使QA、QB、QC、QD=ABCD。 3.保持(禁止)。CLR=LOAD=1且ENP、ENT=0时,无论有无CP脉冲作用,计数器都将保持原有的状态不变(停止计数)。 4.计数。CLR=LOAD=ENP=ENT=1时,74LS161处于计数状态。 表1 74LS161功能表

设计60进制计数器 数电课程设计

电子技术基础实验 课程设计 用74LS161设计六十进制计数器 学院:班级:姓名:学号:电气工程学院电自1418 刘科 20

用74LS161设计六十进制计数器 摘要 计数器是一个用以实现计数功能的时序部件,它不仅可用来及脉冲数,还常用作数子系统的定时、分频和执行数字运算以及其它特定的逻辑功能。目前,无论是TTL还是CMOS集成电路,都有品种较齐全的中规模集成计数器。使用者只要借助于器件手册提供的功能和工作波形图以及引出端的排列,就能正确运用这些器件。计数器在现代社会中用途中十分广泛,在工业生产、各种和记数有关电子产品。如定时器,报警器、时钟电路中都有广泛用途。在配合各种显示器件的情况下实现实时监控,扩展更多功能。 利用两片74LS161分别作为六十进制计数器的高位和低位,分别与数码管连接。把其中的一个通过一个与门器件构成一个十进制计数器,另一个芯片构成六进制计数器。十进制计数器(个位)和六进制计数器(十位)均采用反馈清零法利用两个74LS161构成。当个位计数器从1001计数到0000时,十位计数器要计数一次,可通过两芯片之间级联实现。使用200HZ时钟信号作为计数器的时钟脉冲。根据设计基理可知,计数器初值为00,按递增方式计数,增到59时,再自动返回到00。 关键字:60进制,计数器,74LS161,级联 目录 第1章概述 (1) 计数器设计目的 (1) 计数器设计组成 (1) 第2章六十进制计数器设计描述 (2) 74LS161的功能 (2)

方案框架 (3) 第3章六十进制计数器的设计与仿真 (4) 基本电路分析设计 (4) 计数器电路的仿真 (6) 第4章总结 (8)

同步二进制加法计数器

同步二进制加法计数器 F0302011 5030209303 刘冉 计数器是用来累计时钟脉冲(CP脉冲)个数的时序逻辑部件。它是数字系统中用途最广泛的基本部件之一,几乎在各种数字系统中都有计数器。它不仅可以计数,还可以对CP 脉冲分频,以及构成时间分配器或时序发生器,对数字系统进行定时、程序控制操作。此外,还能用它执行数字运算。 1、计数器的特点: 在数字电路中,把记忆输入CP脉冲个数的操作叫做计数,能实现计数状态的电子电路称为计数器。特点为(1)该电路一般为Moore型电路,输入端只有CP信号。 (2)从电路组成看,其主要组成单元是时钟触发器。 2、计数器分类 1) 按CP脉冲输入方式,计数器分为同步计数器和异步计数器两种。 同步计数器:计数脉冲引到所有触发器的时钟脉冲输入端,使应翻转的触发器在外接的CP脉冲作用下同时翻转。 异步计数器:计数脉冲并不引到所有触发器的时钟脉冲输入端,有的触发器的时钟脉冲输入端是其它触发器的输出,因此,触发器不是同时动作。 2) 按计数增减趋势,计数器分为加法计数器、减法计数器和可逆计数器三种。 加法计数器:计数器在CP脉冲作用下进行累加计数(每来一个CP脉冲,计数器加1)。 3) 按数制分为二进制计数器和非二进制计数器两类。 二进制计数器:按二进制规律计数。最常用的有四位二进制计数器,计数范围从0000到1111。 异步加法的缺点是运算速度慢,但是其电路比较简单,因此对运算速度要求不高的设备中,仍不失为一种可取的全加器。同步加法优点是速度快,虽然只比异步加法快千分之一甚至几千分之一秒,但对于计数器来讲,却是十分重要的。所以在这个高科技现代社会中,同步二进制计数器应用十分广泛。 下图为三位二进制加法计数器的电路图。 图1 三位二进制计数器 图示电路为对时钟信号计数的三位二进制加法计数器或称为八进制加法计数器。 该电路的经典分析过程: 1.根据电路写出输出方程、驱动方程和状态方程 2. 求出状态图 3.检查电路能否自启动 4.文字叙述逻辑功能 解:

计算器课程设计报告

课设报告 福建工程学院软件学院 题目:汇编计算器 班级: 1301 姓名 学号: 指导老师: 日期:

目录 1、设计目的 (3) 2、概要设计 (3) 2.1 系统总体分析 (3) 2.2 主模块框图及说明 (3) 3、详细设计 (4) 3.1 主模块及子模块概述 (4) 3.2各模块详运算 (4) 4、程序调试 (7) 4.1 运行界面分析 (7) 算法分析 (7) 4.2 调试过程与分析 (9) 5、心得体会 (11) 5.1 设计体会 (11) 5.2 系统改进 (11) 附录: (11)

1、设计目的 本课程设计是一次程序设计方法及技能的基本训练,通过实际程序的开发及调试,巩固课堂上学到的关于程序设计的基本知识和基本方法,进一步熟悉汇编语言的结构特点和使用,达到能独立阅读、设计编写和调试具有一定规模的汇编程序的水平。 2、概要设计 用8086汇编语言编写一个能实现四则混合运算、带括号功能的整数计算器程序。程序能实现键盘十进制运算表达式的输入和显示(例如输入:“1+2*(3-4)”),按“=”后输出十进制表示的运算结果。 2.1 系统总体分析 在8086的操作环境下,该计算器分成输入,数据存储,运算功能,输出几个大模块,实现了使用者使用该计算器时输入一个算式,能让系统进行计算。此计算器的实现功能是基本的数学的四则运算,结果范围在0~65535。 2.2 主模块框图及说明 此流程图简要的表现出了所要实现的功能以及一些功能的大概算法,同时也是我编写的一个总体的框架。 程序流程图说明:通过流程图,可以看出程序运行时,首先输出提示语气,当用户输入后,程序根据所输入内容进行判断,通过判断的结果来决定调用哪个功能模块,首要先要要判断的是否为0-9,“+”“-”“*”“/”这些字符,若不是就会报错,实则根据运算符号调用其功能模块完成运算。最后将运算的结果显示在主频幕上,返回主程序,使用户可以重新输入。

10进制加法计数器课程设计

西北师范大学知行学院 数字电子实践论文 课题:74ls161组成的十进制加法计数器 (置数法) 班级:14电本 学号:14040101114 姓名:于能海

指导老师:崔用明 目录 第1章前言 (1) 1.1 摘要 (1) 1.2 设计目的 (2) 1.3 设计内容及要求 (2) 第2章设计方案 (3) ....................................................................................................................... 错误!未定义书签。 2.1主要芯片功能介绍 (3) 2.2.1 四位二进制计数器74161介绍 (3) ............................................................................................................... 错误!未定义书签。 2.2 工作原理 (4) 第3章硬件设计 (4) 3.1 单元电路设计 (4) 3.2 总硬件电路图 (5) 第4章仿真与试验 (6) 4.1 仿真结果 (6) 4.2 调试中遇到的问题 (7) 第5章结论和体会 (8)

第1章前言 1.1 摘要在数字电路技术的课程中,计数器的功能是记忆脉冲的个数,它是数字系统中应用最广泛的基本时序逻辑构件。计数器在微型计算机系统中的主要作用就是为CPU和I/O设备提供实时时钟,以实现定时中断、定时检测、定时扫描、定时显示等定时控制,或者对外部事件进行计数。一般的微机系统和微机应用系统中均配置了定时器/计数器电路,它既可当作计数器作用,又可当作定时器使用,其基本的工作原理就是"减1"计数。计数器:CLK输入脉冲是一个非周期事件计数脉冲,当计算单元为零时,OUT输出一个脉冲信号,以示计数完毕。 本十进制加法计数器是基于74161芯片而设计的, 该十进制加法计数器设计理念是用于工厂流水线上产品计数,自动计数,方便简单。 关键词:74ls161计数器 Introduction In the course of digital circuit technology, the counter memory function is the number of pulses, it is a digital system, the most widely used basic sequential logic components. The main role of the counter in the micro-computer system is to provide real-time clock for the CPU and I / O devices to achieve the timer interrupt, timing detection, scheduled scanning, the timing display timing control, or to count external events. General computer systems and computer application systems are equipped with a timer / counter circuit, it can as a counter action, but also as a timer, the basic working principle is "minus 1" count. Counter: CLK input pulse is a non-periodic event count pulses to zero when calculating unit, OUT outputs a pulse signal, to show the count is completed. The decimal addition counter is designed based on the 74161 chip, the low potential sensor senses when to rely on external signals, sensors in an object within the sensing range, otherwise it is a high potential. Within the sensing range of the sensor when an object is moved out of date, sensor potential from high to low and then high, appears on the edge. Counter is automatically incremented and displayed on a digital control. The decimal addition counters have two seven-segment LED. It can count from 0 to 99 objects, and easy to expand. The design concept of decimal addition counter is used to count on a factory assembly line products, automatic counting, convenient and simple. Keywords:74ls161counter

十进制4位加法计数器设计

洛阳理工学院 十 进 制 4 位 加 法 计 数 器 系别:电气工程与自动化系 姓名:李奇杰学号:B10041016

十进制4位加法计数器设计 设计要求: 设计一个十进制4位加法计数器设计 设计目的: 1.掌握EDA设计流程 2.熟练VHDL语法 3.理解层次化设计的内在含义和实现 设计原理 通过数电知识了解到十进制异步加法器的逻辑电路图如下 Q3 则可以通过对JK触发器以及与门的例化连接实现十进制异步加法器的设计 设计内容 JK JK触发器的VHDL文本描述实现: --JK触发器描述 library ieee; use ieee.std_logic_1164.all; entity jk_ff is

port( j,k,clk: in std_logic; q,qn:out std_logic ); end jk_ff; architecture one of jk_ff is signal q_s: std_logic; begin process(j,k,clk) begin if clk'event and clk='0' then if j='0' and k='0' then q_s <= q_s; elsif j='0' and k='1' then q_s <= '0'; elsif j='1' and k='0' then q_s <= '1'; elsif j='1' and k='1' then q_s <= not q_s; end if; end if; end process; q <= q_s; qn <= not q_s; end one; 元件门级电路: 与门VHDL文本描述实现: --与门描述library ieee; use ieee.std_logic_1164.all;

数电脉搏计数器电路课程设计

烟台南山学院 数字电子技术课程设计题目脉搏计数电路设计 姓名:___ XXXXXX ___ 所在学院:_工学院电气与电子工程系 所学专业:_ 自动化 班级:___电气工程XXXX 学号:___XXXXXXXXXXXXXX 指导教师:_____ XXXXXXXX ___ 完成时间:____ XXXXXXXXXXXXX

数电课程设计任务书 一、基本情况 学时:40学时学分:1学分适应班级:12电气工程 二、进度安排 本设计共安排1周,合计40学时,具体分配如下: 实习动员及准备工作:2学时 总体方案设计:4学时 查阅资料,讨论设计:24学时 撰写设计报告:8学时 总结:2学时 教师辅导:随时 三、基本要求 1、课程设计的基本要求 数字电子技术课程设计是在学习完数字电子课程之后,按照课程教学要求,对学生进行综合性训练的一个实践教学环节。主要是培养学生综合运用理论知识的能力,分析问题和解决问题的能力,以及根据实际要求进行独立设计的能力。初步掌握数字电子线路的安装、布线、焊接、调试等基本技能;熟练掌握电子电路基本元器件的使用方法,训练、提高读图能力;掌握组装调试方法。其中理论设计包括总体方案选择,具体电路设计,选择元器件及计算参数等,课程设计的最后要求是写出设计总结报告,把设计内容进行全面的总结,若有实践条件,把实践内容上升到理论高度。 2、课程设计的教学要求 数字电子技术课程设计的教学采用相对集中的方式进行,以班为单位全班学生集中到设计室进行。做到实训教学课堂化,严格考勤制度,在实训期间累计旷课达到6节以上,或者迟到、早退累计达到8次以上的学生,该课程考核按不及格处理。在实训期间需要外出查找资料,必须在指定的时间内方可外出。 课程设计的任务相对分散,每3名学生组成一个小组,完成一个课题的设计。小组成员既有分工、又要协作,同一小组的成员之间可以相互探讨、协商,可以互相借鉴或参考别人

课程设计:六十进制计数器的设计

一、实验目的 1.进一步掌握VHDL语言中元件例化语句的使用 2.通过本实验,巩固利用VHDL语言进行EDA设计的流程 二、实验原理 1.先分别设计一个六进制和十进制的计数器,并生成符号文件2.利用生成的底层元件符号,设计六十进制计数器顶层文件 三、实验步骤 (略) 四、实验结果

六进制计数器源程序cnt6.vhd: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE. STD_LOGIC_UNSIGNED.ALL; ENTITY CNT6 IS PORT (CLK, CLRN, ENA, LDN: IN STD_LOGIC; D: IN STD_LOGIC_VECTOR(3 DOWNTO 0); Q: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); COUT: OUT STD_LOGIC); END CNT6; ARCHITECTURE ONE OF CNT6 IS SIGNAL CI: STD_LOGIC_VECTOR(3 DOWNTO 0):="0000"; BEGIN PROCESS(CLK, CLRN, ENA, LDN) BEGIN IF CLRN='0' THEN CI<="0000"; ELSIF CLK'EVENT AND CLK='1' THEN IF LDN='0' THEN CI<=D; ELSIF ENA='1' THEN IF CI<5 THEN CI<=CI+1; ELSE CI<="0000"; END IF; END IF; END IF; Q<=CI; END PROCESS; COUT<= NOT(CI(0) AND CI(2)); END ONE;

24进制计数器设计报告.doc

24进制计数器设计报告 单时钟同步24进制计数器课程设计报告1.设计任务1.1设计目的1.了解计数器的组成及工作原理。 2.进一步掌握计数器的设计方法和计数器相互级联的方法。 3.进一步掌握各芯片的逻辑功能及使用方法。 4.进一步掌握数字系统的制作和布线方法。 5.熟悉集成电路的引脚安排。 1.2设计指标1.以24为一个周期,且具有自动清零功能。 2.能显示当前计数状态。 1.3设计要求1.画出总体设计框图,以说明计数器由哪些相对独立的功能模块组成,标出各个模块之间互相联系,时钟信号传输路径、方向。 并以文字对原理作辅助说明。 2.设计各个功能模块的电路图,加上原理说明。 3.选择合适的元器件,利用multisim仿真软件验证、调试各个功能模块的电路,在接线验证时设计、选择合适的输入信号和输出方式,在确定电路充分正确性同时,输入信号和输出方式要便于电路的测试和故障排除。 4.在验证各个功能模块基础上,对整个电路的元器件和布线进行合理布局。 5.打印PCB板,腐蚀,钻孔,插元器件,焊接再就对整个计数器电路进行调试。

2.设计思路与总体框图.计数器由计数器、译码器、显示器三部分电路组成,再由555定时器组成的多谐振荡器来产生方波,充当计数脉冲来作为计数器的时钟信号,计数结果通过译码器显示。 图1所示为计数器的一般结构框图。 十位数码显示管译码驱动异步清零计数器计数脉冲(由555电路产生)个位位数码示像管译码驱动异步清零计数器强制清零▲图1计数器结构框图3.系统硬件电路的设计3.1555多谐荡电路555多谐振荡电路由NE555P芯片、电阻和电容组成。 由NE555P的3脚输出方波。 ▲图2555电路3.2计数器电路集成计数芯片一般都设置有清零输入端和置数输入端,而且无论是清零还是置数都有同步和异步之分。 有的集成计数器采用同步方式,即当CP触发沿到来时才能完成清零或置数任务;有的集成计数器则采用异步方式,即通过触发器的异步输入端来直接实现清零或置数,与CP信号无关。 本设计采用异步清零。 由2片十进制同步加法计数器74LS160(图2-1-1)、一片与非门74LS00(图2-1-2)和相应的电阻、开关。 由外加送来的计数脉冲(由555电路产生)送入两个计数器的CLK端,电路在计数脉冲的作用下按二进制自然序依次递增1,当个位计数到9时,输出进位信号给十位充当使能信号进位。

verilog HDL十进制加减法计数器报告

十进制加减法计数器 1.实验要求 (1)在Modelsim环境中编写十进制加减法计数器程序; (2)编译无误后编写配套的测试程序; (3)仿真后添加信号,观察输出结果。 2.设计程序如下 module decade_counter #(parameter SIZE=4) (input clock,load_n,clear_n,updown, input [SIZE-1:0]load_data, output reg [SIZE-1:0]q ); always @(negedge load_n,negedge clear_n,posedge clock) if (!load_n) q<=load_data; else if (!clear_n) q<=0; else //clock??? if(updown) q<=(q+1)%10; else begin if(q==0) q<=9; else q<=q-1; end endmodule 3.测试程序如下 `timescale 1ns/1ns module test_decade_counte; reg clock,load_n,clear_n,updown; reg [3:0]load_data; wire [3:0]q; decade_counter T1(clock,load_n,clear_n,updown,load_data,q); initial begin clock=0;clear_n=0;

#30 clear_n=1;load_n=0;load_data=7; #30 load_n=1;updown=0; #300 updown=1; #300 updown=0; #300 updown=1; #300 $stop; end always #10 clock=~clock; always @(q) $display("At time%t,q=%d",$time,q); endmodule 4.波形如下 5.测试结果如下 # At time 0,q= 0 # At time 30,q= 7 # At time 70,q= 6 # At time 90,q= 5 # At time 110,q= 4 # At time 130,q= 3 # At time 150,q= 2 # At time 170,q= 1 # At time 190,q= 0 # At time 210,q= 9 # At time 230,q= 8 # At time 250,q= 7 # At time 270,q= 6 # At time 290,q= 5 # At time 310,q= 4 # At time 330,q= 3

基于单片机的光电计数器课程设计

计控学院 College of computer and control engineering Qiqihar university 电气工程课程设计报告题目:基于单片机的光电计数器 系别电气工程系 专业班级电气123班 学生姓名宋恺 学号2012024073 指导教师李艳东 提交日期 2015年6月 24日 成绩

电气工程课程设计报告 摘要 光电计数器是利用光电元件制成的自动计数装置。其工作原理是从光源发出的一束平行光照射在光电元件(如光电管、光敏电阻等)上,每当这束光被遮挡一次时,光电元件的工作状态就改变一次,通过放大器可使计数器记下被遮挡的次数。光电计数器的应用范围非常广泛,常用于记录成品数量,例如绕线机线圈匝数的检测、点钞机纸币张数的检测、复印机纸张数量的检测,或展览会参观者人数。 光电计数器与机械计数器相比,具有可靠性高、体积小、技术频率高、能和计算机链接实现自动控制等优点。本文即介绍基于MCS-51单片机的光电技术器。 关键词:单片机;光电计数器;数码显示;自动报警

齐齐哈尔大学计控学院电气工程系课程设计报告 目录 1 设计目的及意义 (1) 2 设计内容 (1) 2.1 系统整体设计 (1) 2.1.1 实验方案 (1) 2.1.2 光电计数器结构框图 (2) 图1 光电计数器结构框图 (2) 2.2系统硬件设计 (2) 2.2.1稳压直流电源电路 (2) 2.2.2发射接收电路 (3) 2.2.3显示电路 (3) 2.2.4报警电路 (4) 2.2.5硬件系统 (4) 2.3系统软件设计 (6) 3 结论7 4 参考文献 (8)

十进制计数器设计

十进制计数器设计 一、实验目的:熟悉Quartus II的Verilog文本设计流程全过程,学习十进制计数器的设计、仿真,掌握计数器的工作原理。 二、实验原理:计数器属于时序电路的范畴,其应用十分普遍。该程序设计是要实现带有异步复位、同步计数使能和可预置型的十进制计数器。该计数器具有5个输入端口(CLK、RST、EN、LOAD、DATA)。CLK输入时钟信号;RST起异步复位作用,RST=0,复位;EN是时钟使能,EN=1,允许加载或计数;LOAD是数据加载控制,LOAD=0,向内部寄存器加载数据;DATA是4位并行加载的数据。有两个输出端口(DOUT和COUT)。DOUT 的位宽为4,输出计数值,从0到9;COUT是输出进位标志,位宽为1,每当DOUT为9时输出一个高电平脉冲。RST在任意时刻有效时,如CLK非上升沿时,计数也能即刻清0;当EN=1,且在时钟CLK的上升沿时刻LOAD=0,4位输入数据DA TA被加载,但如果此时时钟没有上升沿,尽管出现了加载信号LOAD=0,依然未出现加载情况;当EN=1,RST=1,LOAD=1时,计数正常进行,在计数数据等于9时进行输出高电平。 三、实验任务:在Quartus II上将设计好的程序进行编辑、编译、综合、适配、仿真,从时序仿真图中学习计数器工作原理,了解计数器的运行情况及时钟输入至计数器数据输出的延时情况。 四、实验步骤: (一)、建立工作库文件和编辑设计文件 任何一项设计都是一项Project(工程),而把一个工程下的所有文件放在一个文件夹内是一个非常好的习惯,以便于我们整理,利用和提取不同工程下的文件,而此文件夹将被EDA软件默认为Work Library(工作库),所以第一步先根据自己的习惯,建立个新的文件夹。 (1)新建文件夹:在盘建立并保存工程,将文件夹取名Jishuqi。 (2)输入源程序:打开Quartus II,选择菜单File→New→Design Files→VerilogHDL File→OK(如图1所示)。 图1 在空白处工作框处输入任务要求中的代码,代码如下: module CNT10 (CLK,RST,EN,LOAD,COUT,DOUT,DATA); input CLK, EN, RST,LOAD; input [3:0] DATA; output [3:0] DOUT; output COUT;

自动计数器课程设计..

西安电子科技大学 长安学院课程设计实验报告 姓名: 学号: 指导老师:

自动计数器课程设计 摘要:自动计数器在日常生活中屡见不鲜,它是根据不同的情况设定的,能够通过技术功能实现一些相应的程序,如通过自动计数器来实现自动打开和关闭各种电器设备的电源。广泛用于路灯,广告灯,电饭煲等领域。 自动计数器给人们生产生活带来了极大的方便,而且大大地扩展了自动计数器的功能。诸如自动定时报警器、按时自动打铃、时间程序自动控制、定时广播、自动启闭电路,定时开关烤箱、甚至各种定时电器的自动启用等,所有这些,都是以自动计数器为基础的。由于它的功能强劲,用途广泛,方便利用,所以在这个电子科技发展的时代,它是一个很好的电子产品。如在洗衣机的定时控制以及路灯等一些人们不能再现场控制的操控。都可以利用自动计数器来完成这样的功用。可见此系统所能带来的方便和经济效益是相当远大的。因此,研究自动计数器及扩大其应用,有着非常现实的意义。 本次课设设计是检验理论学习水平、实践动手能力及理论结合实际的能力,要求具有一定的分析处理问题能力和自学能力的一个比较重要得实践课程。通过这样的过程,使我们的论文及实践水平有一次较为全面的检查,同时也使我们硬件方面的能力有所提高,对以后的学习有这非常重要的意义。 关键词:电器设备;自动计数器;电源 指导老师签名:

1. 设计任务及方案 1.1设计任务 设计并制作一个自动计数器,NE555构成时钟信号发生器,CD4518为二,十进制加计数器,CD4543为译码驱动器,调节R17课调节555的震荡频率,C1为充放电电容,电容越大,充点时间越长,振荡频率越低。 介绍了一种新型的自动计数器设计方法,以NE555构成计数脉冲信号发生器,CD4518为二/十进制加法计数器,CD4543为译码驱动器,与按键、数码管等较少的辅助硬件电路相结合,实现对LED数码管进行控制。本系统具有体积小、硬件少、电路结构简单及容易操作等优点。 本计数器可将机械或人工计数方式变为电子计数,并且采用LED数码显示,简单直观,可适用于诸多行业,以满足现代生产、生活等方面的需求。随着生产技术的不断改善和提高,在现代化生产的许多场合都可以看到计数器的使用。本计数器具有低廉的造价以及控制简单等特点。通过对计数脉冲的转换可使本计数器应用更为广泛。 2.电路原理 2.1 元器件的设计与参数 本小组设计的电路原理图所涉及的元器件有:电压为+5V的直流稳压电源;最大电阻为100K的滑动变阻器R17一个;有极性电容C1一个;无极性电容C2和C3; 开关SW一个;电阻R1~~R16总共16个;芯片有:NE555,CD4518,CD4543;以及共阴极7段数码显示器两个。

2位10进制加法计数器课程设计

目录 第1章前言 (1) 1.1 摘要 (1) 1.2 设计目的 (1) 1.3 设计内容及要求 (1) 第2章设计方案 (2) 2.1 系统框图 (2) 2.2主要芯片功能介绍 (2) 2.2.1 四位二进制计数器74161介绍 (2) 2.2.2七段显示译码器7448介绍 (3) 2.3 工作原理 (4) 第3章硬件设计 (5) 3.1 单元电路设计 (5) 3.2 总硬件电路图 (7) 第4章仿真与试验 (8) 4.1 仿真结果 (8) 4.2 调试中遇到的问题 (8) 第5章结论和体会 (9) 第6章参考文献 (10)

第1章前言 1.1 摘要 在数字电路技术的课程中,计数器的功能是记忆脉冲的个数,它是数字系统中应用最广泛的基本时序逻辑构件。计数器在微型计算机系统中的主要作用就是为CPU和I/O设备提供实时时钟,以实现定时中断、定时检测、定时扫描、定时显示等定时控制,或者对外部事件进行计数。一般的微机系统和微机应用系统中均配置了定时器/计数器电路,它既可当作计数器作用,又可当作定时器使用,其基本的工作原理就是"减1"计数。计数器:CLK输入脉冲是一个非周期事件计数脉冲,当计算单元为零时,OUT输出一个脉冲信号,以示计数完毕。 本十进制加法计数器是基于74161芯片而设计的,依靠传感器感应外界信号,传感器在感应范围内有物体时输出低电位,反之则是高电位。当传感器的感应范围内有物体移过时,传感器电位由高到低再到高,出现上跳沿。计数器会自动加一,并将在数码管上显示。本十进制加法计数器有两位七段数码管。可计数0~99个物体,并易于扩展。 该十进制加法计数器设计理念是用于工厂流水线上产品计数,自动计数,方便简单。 1.2 设计目的 1、综合运用相关课程中所学到的理论知识去独立完成某一设计课题; 2、学习用集成触发器构成计数器的方法; 3、进一步熟悉常用芯片和电子器件的类型及特性,并掌握合理选用器件的原则; 5、初步了解电路设计、仿真的过程和方法; 4、锻炼分析问题解决问题的能力; 1.3 设计内容及要求 1、具有2位10进制计数功能; 2、利用传感器,不接触计数; 3、每一个物体经过,计数器自动加1; 4、具有显示功能; 5、并用相关仿真软件对电路进行仿真。

EDA60进制计数器设计

《EDA技术》课程实验报告 学生姓名: 所在班级: 指导教师: 记分及评价: 报告满分3分 得分 一、实验名称 实验6:60进制计数器设计 二、任务及要求 【基本部分】 1、在QuartusII平台上,采用文本输入设计方法,通过编写VHDL语言程序,完成60进制计数器的设计并进行时序仿真。 2、设计完成后生成一个元件,以供更高层次的设计调用。 3、实验箱上进行验证。 【发挥部分】 在60进制基础上设计6进制计数器,完成时序仿真。 三、实验程序 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity sixth is port(clk:in std_logic; co:out std_logic;--jin wei qh:buffer std_logic_vector(3 downto 0);--shi wei ql:buffer std_logic_vector(3 downto 0));--ge wei end entity sixth; architecture art of sixth is begin co<='1'when(qh="0101"and ql="1001")else'0'; process(clk) begin if(clk='1')then if(ql=9)then ql<="0000"; if(qh=5)then

qh<="0000"; else qh<=qh+1; end if; else ql<=ql+1; end if; end if; end process; end architecture art; 四、仿真及结果分析 图6-1 60进制计数器仿真图 用VHDL语言实现一个六十进制计数器,该计数器有计数使能端en,清零端clr和进位输出端co。档en=1时,计数器正常计数;当clr=1时,计数器清零。最后在试验箱上仿真,数码管显示了0到59,则60进制计数器完成。 五、硬件验证 1、选择模式: 2、引脚锁定情况表: 六、小结 1、六进制程序 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity six is port(clk,en,clr:in std_logic; co:out std_logic;--jin wei qh:buffer std_logic_vector(3 downto 0));--shi wei end entity six; architecture art of six is begin co<='1'when(qh="0101" and en='1')else'0';

数电课程设计报告

数电课程设计报告 第一章设计背景与要求 设计要求 第二章系统概述 设计思想与方案选择 各功能块的组成 工作原理 第三章单元电路设计与分析 各单元电路的选择 设计及工作原理分析 第四章电路的组构与调试 遇到的主要问题 现象记录及原因分析 解决措施及效果 功能的测试方法,步骤,记录的数据 第五章结束语 对设计题目的结论性意见及进一步改进的意向说明总结设计的收获与体会 附图(电路总图及各个模块详图) 参考文献 第一章设计背景与要求 一.设计背景与要求

在公共场所,例如车站、码头,准确的时间显得特别重要,否则很有可能给外出办事即旅行袋来麻烦。数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确度和直观性,且无机械装置,具有更长的使用寿命,因此得到了广泛的使用。数字钟是一种典型的数字电路,包括了组合逻辑电路和时序电路。 设计一个简易数字钟,具有整点报时和校时功能。 (1)以四位LED数码管显示时、分,时为二十四进制。 (2)时、分显示数字之间以小数点间隔,小数点以1Hz频率、50%占空比的亮、灭规律表示秒计时。 (3)整点报时采用蜂鸣器实现。每当整点前控制蜂鸣器以低频鸣响4次,响1s、停1s,直到整点前一秒以高频响1s,整点时结束。 (4)才用两个按键分别控制“校时”或“校分”。按下校时键时,是显示值以0~23循环变化;按下“校分”键时,分显示值以0~59循环变化,但时显示值不能变化。 二.设计要求 电子技术是一门实践性很强的课程,加强工程训练,特别是技能的培养,对于培养学生的素质和能力具有十分重要的作用。在电子信息类本科教学中,课程设计是一个重要的实践环节,它包括选择课题、电子电路设计、组装、调试和编写总结报告等实践内容。通过本次简易数字钟的设计,初步掌握电子线路的设计、组装及调试方法。即根据设计要求,查阅文献资料,收集、分析类似电路的性能,并通过组装调试等实践活动,使电路达到性能要求。 第二章系统概述 设计思想与方案选择 方案一,利用数字电路中学习的六十进制和二十四进制计数器和三八译码器来实现数字中的时间显示。 方案二,利用AT89S51单片机和74HC573八位锁存器以及利用C语言对AT89S51进行编程来实现数字钟的时间显示。 由于方案一通过数电的学习我们都比较熟悉,而方案二比较复杂,涉及到比较多我们没学过的内容,所以选择方案一来实施。 简易数字钟电路主体部分是三个计数器,秒、分计数器采用六十进制计 数器,而时计数器采用二十四进制计数器,其中分、时计数器的计数脉 冲由

十进制加法计数器

十进制加法器设计 1课程设计的任务与要求 课程设计的任务 1、综合应用数字电路知识设计一个十进制加法器。了解各种元器件的原理及其应用。 2、了解十进制加法器的工作原理。 3、掌握multisim 软件的操作并对设计进行仿真。 4、锻炼自己的动手能力和实际解决问题的能力。 5、通过本设计熟悉中规模集成电路进行时序电路和组合电路设计的方法,掌握十进制加法器的设计方法。 课程设计的要求 1、设计一个十进制并运行加法运算的电路。 2、0-9十个字符用于数据输入。 3、要求在数码显示管上显示结果。 2十进制加法器设计方案制定 加法电路设计原理 图1加法运算原理框图 如图1所示 第一步 置入两个四位二进制数。例如(1001)2,(0011)2和(0101)2,(1000)2,同时在两个七段译码显示器上显示出对应的十进制数9,3和5,8。

第二步将置入的数运用加法电路进行加法运算。 第三步前面所得结果通过另外两个七段译码器显示。即: 加法运算方式,则(1000)2+(0110)2=(1110)2 十进制8+6=14 并在七段译码显示出14。运算方案 通过开关S1——S8接不同的高低电平来控制输入端所置的两个一位十进制数,译码显示器U8和U9分别显示所置入的两个数。数A直接置入四位超前进位加法器74LS283的A4——A1端,74LS283的B4——B1端接四个2输入异或门。四个2输入异或门的一输入端同时接到开关S1上,另一输入端分别接开关S5——S8,通过开关S5——S8控制数B的输入,通过加法器74LS283完成两个数A和B的相加。由于译码显示器只能显示0——9,所以当A+B>9时不能显示,我们在此用另一片芯片74LS283完成二进制码与8421BCD码的转换,即S>9(1001)2时加上3(0011)2,产生的进位信号送入译码器U10来显示结果的十位,U11显示结果的个位。 3十进制加法器电路设计 加法电路的实现 用两片4位全加器74LS283和门电路设计一位8421BCD码加法器。由于一位8421BCD 数A加一位数B有0到18这十九种结果。而且由于显示的关系,当大于9的时候要加六转换才能正常显示,所以设计的时候有如下的真值表:

实验一十进制计数器的设计与仿真电子科技大学

实验一十进制计数器的设计与仿真 一、实验目的 熟悉QuartusⅡ的Verilog HDL文本设计流程全过程,学习计数器的设计、仿真和硬件测试。 二、实验原理 该程序设计是带有异步复位、同步计数使能、可预置型功能全面的十进制计数器。 (1)第一个条件句if(!RST)构成的RST接于寄存器下方的异步清0端CLR。 (2)第二个条件句if(EN)构成EN接于寄存器左侧的使能端ENA。 (3)第三个条件句if(LODA)构成LODA接于上面的多路选择器,使之控制选择来自DATA的数据,还是来自另一多路选择器的数据。 (4)不完整的条件语句与语句Q1<=Q1+1构成了加1加法器和4位寄存器。 (5)语句(Q1<9)构成了小于比较器,比较器的输出信号控制左侧多路选择器。 (6)第二个过程语句构成了纯组合电路模块,即一个等式比较器,作进位输出。 三、实验设备与软件平台 实验设备:计算机、FPGA硬件平台是Cyclone系列FPGA 软件平台:Quartus II (32-Bit)、5E+系统 四、实验内容 编写Verilog程序描述一个电路,实现以下功能:设计带有异步复位、同步计数使能和可预置型的十进制计数器。 具有5个输入端口(CLK、RST、EN、LOAD、DATA)。CLK输入时钟信号;RST 起异步复位作用,RST=0,复位;EN是时钟使能,EN=1,允许加载或计数;LOAD 是数据加载控制,LOAD=0,向内部寄存器加载数据;DATA是4位并行加载的数

据。有两个输出端口(DOUT和COUT)。DOUT的位宽为4,输出计数值,从0到9;COUT是输出进位标志,位宽为1,每当DOUT为9时输出一个高电平脉冲。 五、实验步骤 设计程序: module CNT10 (CLK,RST,EN,LOAD,COUT,DOUT,DATA); input CLK; input EN; input RST; input LOAD; input [3:0] DATA; output [3:0] DOUT; output COUT; reg [3:0] Q1 ; reg COUT ; assign DOUT = Q1; always @(posedge CLK or negedge RST) begin if (!RST) Q1 <= 0; else if (EN) begin if (!LOAD) Q1 <= DATA; else if (Q1<9) Q1 <= Q1+1; else Q1 <= 4'b0000; end end always @(Q1) if (Q1==4'h9) COUT = 1'b1; else COUT = 1'b0; Endmodule

相关主题