第8章实用电路设计1_第1页
第8章实用电路设计1_第2页
第8章实用电路设计1_第3页
第8章实用电路设计1_第4页
第8章实用电路设计1_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、可分为共阳极和共阴极两种:HA B C DE F GH下表为共阳极LED字形码表低电平有效点亮二极管【例8.1】BCD 码七段数码管显示译码器(共阳极连接)module decode4_7(decodeout,indec);output6:0 decodeout; /字形码输出寄存器input3:0 indec; /BCD码输入reg6:0 decodeout;always (indec)begincase(indec) /用case 语句进行译码4d0:decodeout=7b0000001;4d1:decodeout=7b1001111;4d2:decodeout=7b0010010;4d

2、3:decodeout=7b0000110;4d4:decodeout=7b1001100;4d5:decodeout=7b0100100;4d6:decodeout=7b0100000;4d7:decodeout=7b0001111;4d8:decodeout=7b0000000;4d9:decodeout=7b0000100;default: decodeout=7bx;endcaseenddriver9driver0 高电平有效点亮二极管实现一个让实现一个让10个发光二极管按个发光二极管按给定的时钟控制下轮流点亮的给定的时钟控制下轮流点亮的跑马灯电路控制过程:跑马灯电路控制过程:/计数器

3、模块(底层模块)计数器模块(底层模块)module timer (clk,rst,out); input clk,rst;output 3:0 out; reg 3 :0 out;always (posedge clk) begin if(rst | out=9) out=4b0000; else out=out+1; endendmodule/控制电路模块(主模块)控制电路模块(主模块)module light_controller (clk,rst,driver); input clk,rst;output 9:0 driver; reg 9 :0 driver;wire3:0 t;tim

4、er t_1(,clk(clk),.rst(rst),.out(t)always (t) begin case(t) /相当跑马灯相当跑马灯 4b0000:driver=10b0000000001; 4b0001:driver=10b0000000010; 4b0010:driver=10b0000000100; 4b0011:driver=10b0000001000; 4b0100:driver=10b0000010000; 4b0101:driver=10b0000100000; 4b0110:driver=10b0001000000; 4b0111:driver=10b001000000

5、0; 4b1000:driver=10b0100000000; 4b1001:driver=10b1000000000;endendmodulemodule ledwater (clk_50M,rst,dataout);input clk_50M,rst; /系统时钟系统时钟 50M 输入输入 output 11:0 dataout; /我们这里用我们这里用 12 个个 LED 灯,灯,reg 11:0 dataout;reg 26:0 count; /分频计数器分频计数器always ( posedge clk_50M )begincount=count+1;endalways ( pose

6、dge clk_50M or negedge rst)begincase ( count26:24 ) / 也是分频的关键也是分频的关键/ 只有在只有在 0 的那一位的那一位 对应的对应的 LED 灯才亮。灯才亮。0: dataout=12b110110110110;1: dataout=12b101101101101;2: dataout=12b011011011011;3: dataout=12b110110110110;4: dataout=12b101101101101;5: dataout=12b011011011011;endcaseendendmodule2625 24 230约

7、约0.33ms led灯变换一次,灯变换一次,经经5次以后重复循环形成旋转次以后重复循环形成旋转效果效果在在88显示点阵上显示一个爱心形图案显示点阵上显示一个爱心形图案11 111 1111 1 1 1111111111111111 111111 1 1 1 111 11 1 1 1 111 1点点阵阵控控制制电电路路en7.0dataout7.0clkrst点阵各行共阴极连接,通过点阵各行共阴极连接,通过en控制控制各行循环点亮(在眼视觉内扫描完各行循环点亮(在眼视觉内扫描完一个字形),而所有点阵的另一端一个字形),而所有点阵的另一端各列连在一起,通过控制器输出数各列连在一起,通过控制器输出

8、数据端口据端口dataout输出字形点阵控制输出字形点阵控制码。码。module led_0_7 (clk,rst,dataout,en);input clk,rst; /系统时钟系统时钟 50M 输入输入 从从 12 脚输入。脚输入。output7:0 dataout; /点阵的显示编码输出点阵的显示编码输出output7:0 en; /点阵的行扫描使能输出点阵的行扫描使能输出reg7:0 dataout;reg7:0 en;reg15:0 cnt_scan;/扫描频率计数器扫描频率计数器reg4:0 dataout_buf;always(posedge clk or negedge rst

9、)beginif(!rst) begincnt_scan=0;endelse begincnt_scan=cnt_scan+1;endendalways (cnt_scan)begincase(cnt_scan15:13)3b000 :en = 8b1111_1110;3b001 :en = 8b1111_1101;3b010 :en = 8b1111_1011;3b011 :en = 8b1111_0111;3b100 :en = 8b1110_1111;3b101 :en = 8b1101_1111;3b110 :en = 8b1011_1111;3b111 :en = 8b0111_11

10、11;default :en = 8b1111_1110;endcaseendalways(en) /对应对应 COM 信号给出各段数据信号给出各段数据begincase(en)8b1111_1110:dataout_buf=0;8b1111_1101:dataout_buf=1;8b1111_1011:dataout_buf=2;8b1111_0111:dataout_buf=3;8b1110_1111:dataout_buf=4;8b1101_1111:dataout_buf=5;8b1011_1111:dataout_buf=6;8b0111_1111:dataout_buf=7;def

11、ault:dataout_buf=8;endcaseendalways(dataout_buf)begin/在点阵上面显示一个爱心需要的点阵代码在点阵上面显示一个爱心需要的点阵代码case(dataout_buf)4b0000:dataout=8b11111111;4b0001:dataout=8b11111111;4b0010:dataout=8b10011001;4b0011:dataout=8b01100110;4b0100:dataout=8b01111110;4b0101:dataout=8b10111101;4b0110:dataout=8b11011011;4b0111:data

12、out=8b11100111;endcaseendendmodule应用三、键盘硬件消抖动原理设计应用三、键盘硬件消抖动原理设计 判断键盘上的键是否按下,需要持续检测该键状态,如果在一定时间内判断键盘上的键是否按下,需要持续检测该键状态,如果在一定时间内检测状态始终不变,则可判定该键已按下,否则重新检测,继续判定。这是检测状态始终不变,则可判定该键已按下,否则重新检测,继续判定。这是防止误读键状态的有效处理方法,也是消除键抖动方法。防止误读键状态的有效处理方法,也是消除键抖动方法。键接通与断开正好是两种状态,可用键接通与断开正好是两种状态,可用“1”和和“0”表示。通过检测这两种状态表示。通过

13、检测这两种状态在一定时间内是否变化,来判定当前状态。在一定时间内是否变化,来判定当前状态。应用三、键盘硬件消抖动电路设计应用三、键盘硬件消抖动电路设计应用四、应用四、4X4阵列键盘键信号检测电路设计原理阵列键盘键信号检测电路设计原理键盘控制器FPGAA3.0B3.0keyvalue3.044矩阵键盘应用四、应用四、4X4阵列键盘键信号检测电路设计程序阵列键盘键信号检测电路设计程序module saankey(clk,A,B,keyvalue);input clk;/键盘扫描时钟信号键盘扫描时钟信号input 3:0 B;/去抖后的按键信号去抖后的按键信号output reg3:0 keyval

14、ue; output reg3:0 A;/输出扫描信号给键盘输出扫描信号给键盘reg1:0 q;always (posedge clk)begin q=q+1;case(q) /给键盘给键盘A口送出扫描数据口送出扫描数据0:a=4b1110;1:a=4b1101; 2:a=4b11011;3:a=4b0111;endcasecase(A,B) /判断键值判断键值8b1110_0111: keyvalue=4b0000;/key08b1110_1011: keyvalue=4b0001;/key18b1110_1101: keyvalue=4b0010;8b1110_1110: keyvalue

15、=4b0011;8b1101_0111: keyvalue=4b0100;8b1101_1011: keyvalue=4b0101;8b1101_1101: keyvalue=4b0110;8b1101_1110: keyvalue=4b0111;8b1011_0111: keyvalue=4b1000;/key88b1011_1011: keyvalue=4b1001;8b1011_1101: keyvalue=4b1010;/keyA8b1011_1110: keyvalue=4b1011;8b0111_0111: keyvalue=4b1100;8b0111_1011: keyvalue

16、=4b1101;8b0111_1101: keyvalue=4b1110;/keyE8b0111_1110: keyvalue=4b1111;/keyFdefault: keyvalue=8b1111_1111;endcaseendendmodule/key1 key2 key3 key4 的状态作为数据输入,数码管作为状态显示的状态作为数据输入,数码管作为状态显示module key_led(clk_50M,key,duan_ma,wei_ma);input clk_50M; /系统时钟系统时钟 50M 输入输入 从从 12 脚输入。脚输入。input 3:0 key; /key1 key2

17、 key3 key4 为输入的键码的值为输入的键码的值output 3:0 wei_ma; /数码管的位选数码管的位选output 7:0 duan_ma; /数码管的段码数码管的段码 ABCDEFGHwire 3:0 key;reg 7:0 duan_ma;reg 3:0 wei_ma;reg 3:0 key_temp; /设置了一个寄存器设置了一个寄存器always (posedge clk_50M )beginkey_temp=key; /把键码的值赋给寄存器把键码的值赋给寄存器case ( key_temp )4b1110:duan_ma=8b1111_1001; /段码段码/KEY1

18、 按下去显示按下去显示 14b1101:duan_ma=8b1010_0100; /段码段码/KEY2 按下去显示按下去显示 24b1011:duan_ma=8b1011_0000; /段码段码/KEY3 按下去显示按下去显示 34b0111:duan_ma=8b1001_1001; /段码段码/KEY4 按下去显示按下去显示 4endcaseendalways ( posedge clk_50M )begincase( key_temp )4b0111:wei_ma=4b0111; /位选信号位选信号4b1011:wei_ma=4b1011;4b1101:wei_ma=4b1101;4b11

19、10:wei_ma=4b1110;endcaseendendmodule键盘显示控制器wei_ma3.0duan_ma7.0clk_50Mkey3.08888应用五:应用五:“梁祝梁祝”乐曲演奏电路乐曲演奏电路音名音名频率频率Hz 音名音名频率频率Hz 音名音名频率频率Hz低音低音1261.6中音中音1523.3高音高音11046.5低音低音2293.7中音中音2587.3高音高音21174.7低音低音3328.6中音中音3658.3高音高音31318.5低音低音4348.2中音中音4698.5高音高音41396.9低音低音5392中音中音5784高音高音51568低音低音6440中音中音68

20、80高音高音61760低音低音7493.9中音中音7987.8高音高音71975.5/信号定义与说明:信号定义与说明:/clk_4Hz: 用于控制音长(节拍)的时钟频率;用于控制音长(节拍)的时钟频率;/clk_6MHz: 用于产生各种音阶频率的基准频率;用于产生各种音阶频率的基准频率;/speaker: 用于激励扬声器的输出信号,本例中为方波信号;用于激励扬声器的输出信号,本例中为方波信号;/high, med, low:分别用于显示高音、中音和低音音符,各驱动一个数码管:分别用于显示高音、中音和低音音符,各驱动一个数码管来显示。来显示。FPGA演奏控制器clk_6MHzclk_4Hzhig

21、hmedlowspeaker1s为全音符时间,1/4秒为4分音符时间,所以4Hz为4分音符的拍频。而实际设计时, 4Hz是半拍的拍频。因为乐曲中最小为半拍。各种音调产生:如3的产生(16383-7281=9102)为speaker半个周期中记录6MHz的周期数,那么speaker最后产生的方波频率为1/(29102/6106)=329.5Hz“梁祝梁祝”乐曲演奏硬件描述代码乐曲演奏硬件描述代码module song(clk_6MHz,clk_4Hz,speaker, high,med,low);input clk_6MHz, clk_4Hz;output speaker;output3:0 h

22、igh,med,low;reg3:0 high, med,low;reg13:0 divider, origin;reg7:0 counter;reg speaker;wire carry;assign carry=(divider=16383);always (posedge clk_6MHz)begin if(carry) divider=origin;else divider=divider+1;endalways (posedge carry)beginspeaker=speaker; /2 分频产生方波信号endalways (posedge clk_4Hz)begincase(hi

23、gh,med,low) /分频比预置b000000000011: origin=7281;b000000000101: origin=8730;b000000000110: origin=9565;b000000000111: origin=10310;b000000010000: origin=10647;b000000100000: origin=11272;b000000110000: origin=11831;b000001010000: origin=12556;b000001100000: origin=12974;b000100000000: origin=13516;b0000

24、00000000: origin=16383;endcaseendalways (posedge clk_4Hz)beginif(counter=63) counter=0; /计时,以实现循环演奏计时,以实现循环演奏else counter=counter+1;case(counter) /记谱记谱0: high,med,low=b000000000011; /低音低音“3”1: high,med,low=b000000000011; /持续持续 4 个时钟节拍个时钟节拍2: high,med,low=b000000000011;/每个时钟为半拍每个时钟为半拍3: high,med,low=

25、b000000000011;4: high,med,low=b000000000101; /低音低音“5”5: high,med,low=b000000000101; /发发 3 个时钟节拍个时钟节拍6: high,med,low=b000000000101;7: high,med,low=b000000000110; /低音低音“6”8: high,med,low=b000000010000; /中音中音“1”9: high,med,low=b000000010000; /发发 3 个时钟节拍个时钟节拍10: high,med,low=b000000010000;11: high,med,l

26、ow=b000000100000; /中音中音“2”12: high,med,low=b000000000110; /低音低音“6”13: high,med,low=b000000010000;14: high,med,low=b000000000101;15: high,med,low=b000000000101;16: high,med,low=b000001010000; /中音中音“5”17: high,med,low=b000001010000; /发发 3 个时钟节拍个时钟节拍18: high,med,low=b000001010000;19: high,med,low=b0001

27、00000000; /高音高音“1”20: high,med,low=b000001100000;21: high,med,low=b000001010000;22: high,med,low=b000000110000;23: high,med,low=b000001010000;24: high,med,low=b000000100000; /中音中音“2”25: high,med,low=b000000100000; /持续持续 11 个时钟节拍个时钟节拍26: high,med,low=b000000100000;27: high,med,low=b000000100000;28: h

28、igh,med,low=b000000100000;29: high,med,low=b000000100000;30: high,med,low=b000000100000;31: high,med,low=b000000100000;32: high,med,low=b000000100000;33: high,med,low=b000000100000;34: high,med,low=b000000100000;35: high,med,low=b000000110000; /中音中音“3”36: high,med,low=b000000000111; /低音低音“7”37: high

29、,med,low=b000000000111;38: high,med,low=b000000000110; /低音低音“6”39: high,med,low=b000000000110;40: high,med,low=b000000000101; /低音低音“5”41: high,med,low=b000000000101;42: high,med,low=b000000000101;43: high,med,low=b000000000110; /低音低音“6”44: high,med,low=b000000010000; /中音中音“1”45: high,med,low=b000000

30、010000;46: high,med,low=b000000100000; /中音中音“2”47: high,med,low=b000000100000;48: high,med,low=b000000000011; /低音低音“3”49: high,med,low=b000000000011;50: high,med,low=b000000010000; /中音中音“1”51: high,med,low=b000000010000;52: high,med,low=b000000000110;53: high,med,low=b000000000101; /低音低音“5”54: high,

31、med,low=b000000000110;55: high,med,low=b000000010000; /中音中音“1”56: high,med,low=b000000000101; /低音低音“5”57: high,med,low=b000000000101; /持续持续 8 个时钟节拍个时钟节拍58: high,med,low=b000000000101;59: high,med,low=b000000000101;60: high,med,low=b000000000101;61: high,med,low=b000000000101;62: high,med,low=b000000000101;63: high,med,low=b000000000101;/一段乐曲,重复进行一段乐曲,重复进行endcaseendendmodule/可以增加音符显示控制电路,见书可以增加音符显示控制电路,见书P245。9.1 设计实现一个功能类似设计实现一个功能类似74LS160的电路。的电路。9.2 设计一个可预置的设计一个可预置的16进制计数器,并仿真。进制计数器,并仿真。9.3 设计一个设计一个1101序列检测器。序列检测器。9.4 用用Verilog编

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论