收藏 分享(赏)

ISP在系统编程数字电路课程设计实例源代码.doc

上传人:HR专家 文档编号:6228884 上传时间:2019-04-03 格式:DOC 页数:70 大小:3.23MB
下载 相关 举报
ISP在系统编程数字电路课程设计实例源代码.doc_第1页
第1页 / 共70页
ISP在系统编程数字电路课程设计实例源代码.doc_第2页
第2页 / 共70页
ISP在系统编程数字电路课程设计实例源代码.doc_第3页
第3页 / 共70页
ISP在系统编程数字电路课程设计实例源代码.doc_第4页
第4页 / 共70页
ISP在系统编程数字电路课程设计实例源代码.doc_第5页
第5页 / 共70页
点击查看更多>>
资源描述

1、十五个 ISP在系统编程 数字电路课程设计 实验源代码1. 数字逻辑课程设计报告题目:拔河游戏机(25题)题目难度:优班级:04级计算机科学与技术-04班设计者:设计要求:1、拔河游戏机需要9个发光二极管排成一行,开机后只有中间一个亮点,以此作为拔河的中间线,游戏双方各持一个按键,迅速、不端地按动产生脉冲,哪方按得快,亮点就向哪方移动,每按一次,亮点移动一次。移到任一方二极管的终端,该方获胜,此时双方按键均无作用,输出保持,只有经复位后才能使亮点恢复到中心线。2、显示器显示胜者的盘数。二、采用器件及软件环境:硬件:ispLSl1016E芯片软件:ispEXPERT System及windows

2、2000操作系统三、设计思想及说明:1、概述:使用ispLSl1016E芯片,使用ispEXPERT下载到芯片,采用74LS162计数,采用数字电路实现系统设备模拟测试2、设计思想:9个发光二极管用来模拟拔河的过程,中间一个灯为中线标志。模拟的两端按左右两个按钮,按钮产生脉冲信号,芯片根据两侧按钮信号的快慢,控制中间的发光二极管的灯的熄灭,某一侧按得较快,中间亮的灯就会向那一侧移动;当亮的灯到达最外侧的灯时,锁定程序, (即任何按键无效,直到按复位键复位)并且相应端的计数器计数加一,用以表示获胜的次数。使用复位键可以在锁定或者在比赛中断后重新开始时,将标志灯回到中心。3、说明:中间灯亮表示中线

3、;最外侧灯亮表示该端获胜;计数表示获胜次数;复位键使亮灯回到中线位置。四、设计步骤,各模块组成,简要说明:1、设计步骤:分析设计要求,选择合适芯片,编写芯片代码,下载代码到芯片,连接数字电路,分项测试功能。2、模块组成:设计程序使用一个名为baheji的模块,模块分为初始化(复位) ,判断是否到达最末端,没有的话,根据按键方式判断移动中间的信号灯;如果到达末端,产生计数,并且锁定;四个部分。3、简要说明:count1.ar = cd1;count2.ar = cd1;score1.ar = cd2;score2.ar = cd2;初始化(复位)拔河游戏。(count1-count2=4)或(c

4、ount1-count2=-4);/说明:判断是否到达最末端的条件,如果是的话,计分器加1,并执行将死锁,并且将L发光二极管锁定状态。Counter1-counter2结果的绝对值小于4均为没有到达末端的情况,按下按键移动信号灯向左或者向右。五、源文件(ABEL-HDL源程序)MODULE bahejiTITLE bahejideclarationsl8l0 pin;clk1,clk2 pin;cd1,cd2 pin;p3p0 node istype reg;q3q0 node istype reg;count1 = p3p0;count2 = q3q0;m3m0 pin istype reg

5、;n3n0 pin istype reg;score1 = m3m0;score2 = n3n0;equationscount1.ar = cd1;count2.ar = cd1;score1.ar = cd2;score2.ar = cd2;count1.clk = clk1;count2.clk = clk2; score1.clk = (count1-count2=4);score1 := score1.fb+1;score2.clk = (count1-count2=-4);score2 := score2.fb+1;when(count1-count2=4) then l8=1;co

6、unt1 := count1.fb;count2 := count2.fb;elsel8=0;count1 := count1.fb+1;count2 := count2.fb+1;when(count1-count2=3) then l7 = 1;count1 := count1.fb+1;count2 := count2.fb+1;elsel7 = 0;count1 := count1.fb+1;count2 := count2.fb+1;when(count1-count2=2) then l6 = 1;count1 := count1.fb+1;count2 := count2.fb+

7、1;elsel6 = 0;count1 := count1.fb+1;count2 := count2.fb+1;when(count1-count2=1) then l5 = 1;count1 := count1.fb+1;count2 := count2.fb+1;elsel5 = 0;count1 := count1.fb+1;count2 := count2.fb+1;when(count1-count2=0) then l4 = 1;count1 := count1.fb+1;count2 := count2.fb+1;elsel4 = 0;count1 := count1.fb+1

8、;count2 := count2.fb+1;when(count1-count2=-1) then l3 = 1;count1 := count1.fb+1;count2 := count2.fb+1;elsel3 = 0;count1 := count1.fb+1;count2 := count2.fb+1;when(count1-count2=-2) then l2 = 1;count1 := count1.fb+1;count2 := count2.fb+1;elsel2 = 0;count1 := count1.fb+1;count2 := count2.fb+1;when(coun

9、t1-count2=-3) then l1 = 1;count1 := count1.fb+1;count2 := count2.fb+1;elsel1 = 0;count1 := count1.fb+1;count2 := count2.fb+1;when(count1-count2=-4) then l0 = 1;count1 := count1.fb;count2 := count2.fb;elsel0 = 0;count1 := count1.fb+1;count2 := count2.fb+1;END七、使用情况:测试时两测试者分别按左右控制键,拔河比赛开始,芯片根据两方按键速度的快

10、慢来决定胜负,到达某端的最后一个指示灯时该方获胜,该端计数器+1;使用复位键复位即可继续下一场比赛。八、验收时间、验收结果:验收时间:2006-09-8 8:00 PM验收结果:验收顺利通过,程序演示成功地实现了功能九、心得体会在做这次的数字逻辑“拔河游戏机”的课程设计,我首先复习了上学期数字逻辑课程的基本内容,对于逻辑问题的分析及设计有了更进一步的掌握。设计过程中,对于ABEL-HDL进一步的掌握,以及对具体问题的分析,都是我们的收获。小组内协调,讨论分析问题,然后想办法解决,然后再分析,直到最终问题的解决。尤其在一些小细节的实现方面,也是颇费精力的,小组成员仔细的相互推敲,然后测试,比如实

11、现在一旦到达最后一个指示灯时就实现计数的条件,我们分析代码的组成,最后修改了判断条件,当到达最外层的指示灯后,无须再判断是否按下了按键就实现计数及锁定,即可实现制定的功能,由此,可逆计数器的功能也实现了;课程设计的过程中,感觉到了一个小集体如果可以协调的好,可以发挥出更佳的力量。在讨论的过程中,成员的思维可以更加的活跃,也可以注意到一些可能忽略到的细节,然后想到更佳的解决办法。我们学的不多,练的也少,真没想到最后能做成功,我想,我们付出了,也很好地合作了,就一定会成功。(完)2006年9月8日李鹏飞、王征云2.利用在系统可编程技术实现出租车计价器一、设计任务及基本要求1、根据出租车上的速度传感

12、器传送过来的脉冲的个数(对应里程)和设置的里程单价来计算对应的总价格,并将总价格通过 LED数码管实时的显示出来。2、起步价可以设置。3、用户可以对里程单价进行设置。4、用户可以对总价格进行复位,从而为下次计费作好准备。5、有些参数可以具体化,从而方便设计。二 、设计器件1、TDS 系列数字电路实验系统2、PC 计算机3、器件:ISP1016E 可编程逻辑器件。4、软件:在 Windows 平台上运行的 ispEXPERT 编程软件,以及 ABEL-HDL 可编程 IC 设计应用语言编译等软件。三、设计思想本试验是设计实现出租车计价器,应主要实现两个功能:显示行驶里程与总价。行驶里程的计算可由

13、计数器实现,每一个脉冲假设为一公里。总价则可由可控制条件的累加器实现,然后予以输出。累加器可以由一个加法器和一个可复位的寄存器组成。最后是译码器,将两位的 16进制转化为压缩 BCD码。这需要用到数制转换的知识。四、设计步骤实验中每一个脉冲假设为一公里。1、行驶里程的实现:行驶里程以计数器的形式给出。计数器由两位数组成,十位和个位。每来一个脉冲,计数器的个位就加 1。当个位为 9且下一个脉冲到来时,计数器的十位加 1,个位为 0。实验装置中有 8个管脚。每 4个显示一位数。最大的公里数为 99。2、总价的实现:在前 4公里总价等于起步价。4 公里以后,总价等于起步价与单价乘于公里数之和,即每来

14、一个脉冲,总价等于上一次脉冲来时的总价加上单价。最大的总价为 99,溢出时不能正常显示。3、数制的转换:以上总价的计算是以 16进制给出的。由于 LED只能显示十进制数,我们需要将十六进制数转换为十进制数。总价的计算是以8位二进制数进行的。前四位是总价的十位,后四位是总价的个位。当个位值大于 9时,需要调整加 6,当后四位相加大于 20时,因为有两次进位,所以需要加 12,依次类推。4、脉冲的实现:实验中的脉冲从实验箱中接入 1KHz,通过分频将其变为 1Hz加在里程上。5、复位:当 clr为 1时复位,里程设为 00,起步价可以自行设置。五、源程序:MODULE jijiaTITLE chu

15、zucheclk,clr pin; d3d0,f3f0 pin;q7q0 pin istype reg;o7o0 pin istype com;m7m0 node istype reg;a11a0 pin;s0=a3a0;s1=a7a4;s2=s11a8;units=q3q0;tens=q7q4;licheng=q7q0;money=m7m0;first=0,0,0,0,f3f0;aver=0,0,0,0,d3d0;out=o7o0;equationss0.clk=clk;s0:=(s0+1)s1.clk=(s0=9);s1:=(s1+1)s2.clk=(s1=9);s2:=(s2+1)uni

16、ts.clk=(s2=9);money.clk=(s2=9);units.AR=clr;tens.AR=clr;units:=(units+1)tens.clk=(units=9);tens:= (tens+1)when(0,m3m0+0,d3d0)20)then money:=(money+aver+12)因为计数器有预置的功能,所以还需要四个输入引脚预置信号;状态变化还需要四个输出引脚。此程序利用 isp-experts 设计,状态变化用 ABEL-HDL 语言很容易描述, “C=C0,C1;T=T0T3;T0T3 是指输出引脚,指代状态变化” 。 “C0C1=00 时,计数器复位”用 A

17、BEL-HDL 语言描述为“WHEN(C=0 )THEN T:=0;” ;(若不考虑十进制的话)“C0C1=11 时,计数器加计数”用 ABEL 语言描述为“WHEN (C= =3)THEN T:=T+1;” , “C0C1=10 时”ABEL 语言描述为“WHEN (C=2 ) THEN T:=T-1 ;” 。当计数器预置时,比较难。但是如果对 ABEL 比较了解,这也就是小意思。我们是经过李老师的讲解才明白的寄存器的,在此要感谢李老师。若不是李老师的帮助,我们,的程序将是很复杂的,没有现在的一目了然,简单清洁。要想预置信号,只需要设计四个寄存器输入引脚。在预置前,将你要预置的四位二进制输入

18、寄存器,从而传给四个输出引脚,而且又可以从此开始计数。“C0C1=01 时,计数器预置”用 ABEL 语言如此描述“WHEN (C=1) THEN T: =Q”,其中 Q 为先前的预置的二进制数。因为此计数器是一个十进制计数器,因而需要适当的修改加减计数器,使其完成十进制的要求。即:计数器加计数的准确描述:“WHEN(C= =3 ) WHEN(C=2) ”二ABEL-HDL 源程序:MODULE tenDECLARATIONSCLK,C1,C0 PIN;T0,T1,T2,T3 PIN istype reg;Q0,Q1,Q2,Q3 PIN ;Q=Q0Q3;C=C0,C1;T=T0T3;EQUAT

19、IONST.CLK=CLK;WHEN(C=0) THEN T:=0;WHEN(C=1) THEN T:=Q;WHEN(C=2)WHEN(C=2)WHEN(C=3)WHEN (START=1T:=T.FB;”。另外,还有预置的问题,要在预置前使得“D0D1=11” ,“W0W3=0000”:“WHEN(PAUSE=0 ) ”。在写 OUT 的属性时,一定是内部接点,而且是不需要寄存器的内部输出引脚:“OUT NODE ISTYPE COM ;” 。二ABEL-HDL 源程序:MODULE LANQIUDECLARATIONSCLK,PAUSE,RESET,START,WAINING PIN;W0

20、,W1,W2,W3 PIN ISTYPE REG;W=W0W3;L0L17 NODE ISTYPE REG;OUT NODE ISTYPE COM;L=L0L17;Q0,Q1,Q2,Q3 PIN ISTYPE REG;D0,D1 PIN ISTYPE REG;D=D0,D1;T0,T1 PIN ISTYPE REG;Q=Q0Q3;T=T0,T1;EQUATIONSQ.CLK=OUT;T.CLK=OUT;L.CLK=CLK;WHEN(L0) THEN Q:=Q-1;T:=T.FB;WHEN(START=1)T:=T-1;WHEN (PAUSE=1) THEN Q:=Q.FB;T:=T.FB;WH

21、EN(RESET=1) THEN Q:=0;T:=3;END三模拟结果:按照对应的引脚连接电路,且显示十位数字的数码管的前两个高位接底电位,CLK 输入 1KHz 的脉冲。D=0,W=3,使得预置显示为 30。当 PAUSE,START,RESET 均为 0,数码管显示“30” 。当 START=1 且 PAUSE,RESET 均为 0,数码管开始倒计时“30-29-28-01-00”。其间可按下“PAUSE=1,START=0 ,RESET=0”则数码管显示暂停,再按下START=1 开始倒计时;按下”PAUSE=0, START=0,RESET=1 “则数码管显示“30” ,执行复位的功能

22、。当“Q=0,T=0 ”时,即 WARNING=1,开始报警,按下RESET=1,则复“30” ,警报解除,按下“START=1,PAUSE=0,RESET=0 ”则开始新一轮的倒计时。四 总结 心得体会由于我们以前对这种较为复杂的数字逻辑设计没有实践的经验,因此一开始走了不少弯路,后来,老师给我们建议,建议我们的课题用 ISP,那样实现会简单很多。但是,我们对 ABEL 语言的了解也仅限于两节课的了解,对实践编程没有任何经验。我们只好利用以前学习的 C 语言编程基础,利用编程的相通之处,模仿书本的例子程序用 ABEL 语言将我们的思想表达出来,但那离真正的正确程序差之甚远,最后,老师为方便我

23、们理解 ABEL 语言,特意写了一例子程序指导我们。有了这个例子,我们对用 ABEL 语言编程实现了解了很多,编程实现也顺利了很多。有了好的开头,后面的顺利了很多,我们有用了一天时间就完成了任务。我们都觉得从这次课程设计学到了很多,由以前对 ABEL 的生疏,甚至可以说知之甚少的情况到现在能用它编出一些简单的程序,我们觉得收获不少。当然,这里也要感谢我们的老师,没有她的引导,或许我们对 ABEL 的理解还处于摸索阶段。后来,我们为了更熟悉的掌握 ABEL,我们又挑战了难度更高的一题,虽然后来由于种种原因没能完全成功,但我们达到了训练的目的,感觉收获颇丰。4.利用在系统可编程技术实现高楼电梯自动

24、控制系统一、设计要求及采用的器件和软件1 设计要求:1). 系统控制的电梯往返于 1-9层楼。2). 乘客要去的楼层数可手动输入并显示(设为 A数) 。3). 电梯运行的楼层数可自动显示(设为 B数) 。4). 当 AB时,系统能输出使三相电机正转的时序信号,使电梯上升;当 Adestination) light=B000000; END五、使用说明输入端组成:一个复位,用来将当前楼层恢复为第零层,六个电梯按钮,用来表示第几楼层有人需要乘坐电梯,以及一组输入要到达电梯楼层的 BCD码的输入,一个 ready开关,用来表示一切就绪,电梯可以正常运作,以及一个时钟脉冲。输出端组成:六个状态灯,用来

25、给各楼层表示电梯是否正在工作,是上升还是下降,以及两组 BCD码的输出,分别用来表示当前楼层和目标楼层。使用说明: 第一步可以将复位键调到高电平,再调回,此时电梯将停留在第0层,然后当某层有请求时,就将表示此楼层的电平调为高电平,若电梯不在当前楼层,电梯将空载到当前楼层,然后载人,输入要到达的目标楼层,再将 ready键调为高电平,在时钟脉冲的控制下,电梯将完成载人的模拟过程,将把人运送到目标楼层。六、心得体会在做实验之前,我真的是毫无头绪,不知道从何下手。问了同学该怎么做,同学们也是说没有思路。后来有的同学说做这个实验有两种方法:一是连接电路的方法;二是用 ABEL-HDL语言来写程序实现。

26、由于我们对 ABEL-HDL语言不了解,所以我和同伴决定连接电路来解决。但是连接电路没有我们想象中的那么简单。我们做了好多次实验都没弄出来。后来听同学们说连接电路不容易实现,连接电路图非常的麻烦,而用 ABEL语言写程序就比较容易实现了。但是我们对 ABEL 语言又不了解,经过几番讨论,我和同伴最终决定了用 ABEL语言来编写程序实现。为了实现程序,我们花费了大量的时间去学习 ABEL语言。由于以前有学过编程语言,所以自学起来还是能够弄得懂的。我们编出程序后真的感到很高兴,但是上机一运行,发现实现不了。出现了好多错误。然后我们又去查资料,经过不断的努力参考学习和上机实现,我们还是没办法实现。我

27、们怎么也找不出错误所在。然后在同学的帮助下,终于找到错误所在。我们实现了题目的要求,我真的感到非常的高兴。通过本次实验,我不仅对 ABEL 语言有了一定的了解,而且懂得了与别人共同努力工作学习,跟同学共同讨论,互相学习。 七、参考书目1、数字逻辑与数字系统2、数字逻辑与数字系统题解、题库与实验.5.简易电子琴班级:计算机 4 班 专业:计算机科学与技术 学一、设计要求1、用 ABEL 语言设计一个电子琴。使用 实验台上的 8 个电平开关作琴键。 电平开关输出为高电平时相当于琴键按下,电 平开关输出为低电平时相当于琴 键松开。 电子琴共有 C 调的8 个音:1,2,3,4,5,6,7,i。2、在

28、 ispEXPERT 中将设计好的程序输入、编译、 连接,生成 JEDEC 格式的文件,下 载到器件中。3、在实验台上对设计进行调试 ,调试时用实验台上的小喇叭作 发声装置。二、电路组成:为达到以上要求,可将电 子琴分为以下几个模块:1、脉冲输入电路:实验工作台上的100KHZ脉冲。2、分频电路:根据不同的音符对应不同的频率,利用多模 计数器对 100KHZ脉冲进行分频。C调的音符与频率的关系如表所示。3、输出电路:将分频后的脉冲接到实验工作台上的小喇啪。三、设计思路及原理由于我们知道只要向TDS实验台上的喇叭输入某一频率的方波,喇叭就会发出相应的音调。所以我们可以使用一个多模 计数器, 对实

29、验台上的100KHz时钟信号进行分频,就可以产生8种希望的频率。题目中还提出了一个思考题:如何设计使驱动喇叭的方波占空比应是50%,以增大音量?首先让我们研究一下如何分频,根据 频率的概念,因此当若想将100KHz分频,不妨设需分成252Hz(音符1)。我 们只需要每经过100*103/262个100KHz的方波A,输出一个高电平就可以得到所需频率。其次,如果需要占空比达到 50%,只需要当达到波长的一半,输出电平变化一次, 这样一来就可以实现问题。总结一下,我们得到设计原理:1、只要向实验台上的喇叭输出某一 频率的方波,喇叭就 发 出相应音调的声音。将实验台喇叭区域的开关 J1 置为开路,从

30、 “输入”插孔向驱动喇叭的三极管基极送控制信号,则控制喇叭按希望的频率发声。2、设计一个多模计数器,对实验台上的某一时钟(例如 100KHz) 进行分频,产生 8 种希望的频率。注意驱动喇叭的方波占空比 应是 50%,以增大音量。3、根据从开关电平输出来的 输入确定9种状态(包括不发声状态)之间的转换。四设计步骤,各模块组成,简要说明1)输入方面,一共有九个 输入:K1K8分别是1,2,3,4,5,6,7,i的音符输入开关,当且仅当,音符 1 2 3 4 5 6 7 i频率 (HZ) 262 294 330 349 392 440 494 523周期 (US ) 1908.39 1700.68

31、 1515.15 1432.66 1275.51 1136.36 1012.14 957.30Ki=1时表示相应的音符输入。另一个 输入是时钟信号输入 CLK。2)设计一个多模计数器,使用 T1T8组成计数器,可 计数组最大值为28=256,大于我 们需要计数的最大值190,符合要求。3)对输出寄存器O的设计 :当频率达到所需完整频率的一半的时候, O的高低电平变化一次,由低到高,由高到低(利用D触发器沿边的特性)。五、附程序代码,及模拟结果和分析:MODULE keyboardK1K8 PIN; /8电平输入CLK PIN;/时钟信号输入T1T8 NODE ISTYPE REG;/琴键计数器

32、T=T1T8;/集合形式O PIN ISTYPE REG;/输出EQUATIONST.clk=CLK;/记数器的时钟信号WHEN K1 THEN/1 键T:=!(T=190)/如果当T不为190时,就继续加1O.clk=(T=190);/如果为190,就给O的时钟信号高电平O:=!O;/电平ELSE WHEN K2 THEN/2 键T:=!(T=170)O.clk=(T=170);O:=!O;ELSE WHEN K3 THEN/3 键T:=!(T=150)O.clk=(T=150);O:=!O;ELSE WHEN K4 THEN/4 键T:=!(T=143)O.clk=(T=143);O:=!O;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报