求1000进制数码管显示的Verilog代码,急急急急急急急!
module SEG7_LUT (
input [3:0] iDIG,
output reg [6:0] oSEG
);
always@(iDIG)
begin
case(iDIG)
4'h1: oSEG = 7'b1111001;
4'h2: oSEG = 7'b0100100;
4'h3: oSEG = 7'b0110000;
4'h4: oSEG = 7'b0011001;
4'h5: oSEG = 7'b0010010;
4'h6: oSEG = 7'b0000010;
4'h7: oSEG = 7'b1111000;
4'h8: oSEG = 7'b0000000;
4'h9: oSEG = 7'b0011000;
4'ha: oSEG = 7'b0001000;
4'hb: oSEG = 7'b0000011;
4'hc: oSEG = 7'b1000110;
4'hd: oSEG = 7'b0100001;
4'he: oSEG = 7'b0000110;
4'hf: oSEG = 7'b0001110;
default: oSEG = 7'b1000000;
endcase
end
endmodule
//输入型号IDIG是你想显示的数,用4位二进制数表示
//oSEG输出信号,对应数码管的7个段
module Display(
D0,
D1,
D2,
D3,
Q,
COM,
Enable,
clk
);
input [3:0] D0,D1,D2,D3;
input Enable,clk;
output [7:0] Q;
output [3:0] COM;
reg [3:0] COM;
reg [7:0] Q;
reg [3:0] Dn;
reg [1:0] state;
always@(posedge clk)
begin
state <= state + 2'b1;
end
always@(posedge clk)
begin
if(!Enable) begin COM <= 4'b1111; Dn <= 4'b1111; end
else
begin
case(state)
2'b00: begin Dn <= D0; COM <= 4'b1110; end
2'b01: begin Dn <= D1; COM <= 4'b1101; end
2'b10: begin Dn <= D2; COM <= 4'b1011; end
2'b11: begin Dn <= D3; COM <= 4'b0111; end
endcase
end
end
always@(Dn)
begin
case(Dn)
4'd0: Q = 8'b0000_0000;
4'd1: Q = 8'b0000_0001;
4'd2: Q = 8'b0000_0010;
4'd3: Q = 8'b0000_0011;
4'd4: Q = 8'b0000_0100;
4'd5: Q = 8'b0000_0101;
4'd6: Q = 8'b0000_0110;
4'd7: Q = 8'b0000_0111;
4'd8: Q = 8'b0000_1000;
4'd9: Q = 8'b0000_1001;
default: Q = 8'b0;
endcase
end
endmodule
module m(clk,reset,smg_disp,bc1,bc2,bc3,bc4);
input clk,reset;
output [7:0] smg_disp;
output bc4,bc3,bc2,bc1;
/////////////////////////////动态扫描///////////////////////////////////////////////////////////////////////////
reg [16:0] count;
always @ (posedge clk)
begin
if(!reset)
count<=17'b0;
else if(count==17'd99_999)
count<=17'b0;
else
count<=count+1'b1;
end
reg [3:0] en;
always @ (posedge clk)
begin
if(!reset)
en<=4'b0;
else if(en==4'b0101)
en<=4'b001;
else if(count==17'd99_999)
en<=en+1'b1;
end
assign bc1=(en==4'b0001)? 1'b0 : 1'b1;
assign bc2=(en==4'b0010)? 1'b0 : 1'b1;
assign bc3=(en==4'b0011)? 1'b0 : 1'b1;
assign bc4=(en==4'b0100)? 1'b0 : 1'b1;
/////////////////////1000进制模块////////////////////////////////////////////////////////////
reg [4:0] q1,q2,q3,q4;
reg [22:0] led_reg;
always @(posedge clk) led_reg <= led_reg + 1'b1;
always @(posedge clk)
begin
if (&led_reg[22:0])
if (q1 == 4'b1001)
q1 <= 4'b0000;
else
q1 <= q1 + 1'b1;
end
always @(posedge clk)
begin
if ((&led_reg[22:0])&(q1 == 4'b1001))
if (q2== 9)
q2 <= 4'b0000;
else
q2 <= q2+ 1'b1;
end
always @(posedge clk)
begin
if ((&led_reg[22:0])&(q1 == 4'b1001)&(q2 == 4'b1001))
if (q3== 9)
q3<= 4'b0000;
else
q3<= q3 + 1'b1;
end
always @(posedge clk)
begin
if ((&led_reg[22:0])&(q1 == 4'b1001)&(q2 == 4'b1001)&(q3==4'b1001))
if (q4== 9)
q4<= 4'b0000;
else
q4<= q4 + 1'b1;
end
////////////////////////////显示模块//////////////////////////////////////////////////////
reg [7:0] q1_data, q2_data, q3_data, q4_data;
always @ (posedge clk)
begin
if(!reset)
q1_data<=8'b1111_1111;
else
begin
case(q1)
4'd0 : q1_data<=8'b1100_0000;
4'd1 : q1_data<=8'b1111_1001;
4'd2 : q1_data<=8'b1010_0100;
4'd3 : q1_data<=8'b1011_0000;
4'd4 : q1_data<=8'b1001_1001;
4'd5 : q1_data<=8'b1001_0010;
4'd6 : q1_data<=8'b1000_0010;
4'd7 : q1_data<=8'b1111_1000;
4'd8 : q1_data<=8'b1000_0000;
4'd9 : q1_data<=8'b1001_0000;
default : q1_data<=8'b1111_1111;
endcase
end
end
always @ (posedge clk)
begin
if(!reset)
q2_data<=8'b1111_1111;
else
begin
case(q2)
4'd0 : q2_data<=8'b1100_0000;
4'd1 : q2_data<=8'b1111_1001;
4'd2 : q2_data<=8'b1010_0100;
4'd3 : q2_data<=8'b1011_0000;
4'd4 : q2_data<=8'b1001_1001;
4'd5 : q2_data<=8'b1001_0010;
4'd6 : q2_data<=8'b1000_0010;
4'd7 : q2_data<=8'b1111_1000;
4'd8 : q2_data<=8'b1000_0000;
4'd9 : q2_data<=8'b1001_0000;
default : q2_data<=8'b1111_1111;
endcase
end
end
always @ (posedge clk)
begin
if(!reset)
q3_data<=8'b1111_1111;
else
begin
case(q3)
4'd0 : q3_data<=8'b1100_0000;
4'd1 : q3_data<=8'b1111_1001;
4'd2 : q3_data<=8'b1010_0100;
4'd3 : q3_data<=8'b1011_0000;
4'd4 : q3_data<=8'b1001_1001;
4'd5 : q3_data<=8'b1001_0010;
4'd6 : q3_data<=8'b1000_0010;
4'd7 : q3_data<=8'b1111_1000;
4'd8 : q3_data<=8'b1000_0000;
4'd9 : q3_data<=8'b1001_0000;
default : q3_data<=8'b1111_1111;
endcase
end
end
always @ (posedge clk)
begin
if(!reset)
q4_data<=8'b1111_1111;
else
begin
case(q4)
4'd0 : q4_data<=8'b1100_0000;
4'd1 : q4_data<=8'b1111_1001;
4'd2 : q4_data<=8'b1010_0100;
4'd3 : q4_data<=8'b1011_0000;
4'd4 : q4_data<=8'b1001_1001;
4'd5 : q4_data<=8'b1001_0010;
4'd6 : q4_data<=8'b1000_0010;
4'd7 : q4_data<=8'b1111_1000;
4'd8 : q4_data<=8'b1000_0000;
4'd9 : q4_data<=8'b1001_0000;
default : q4_data<=8'b1111_1111;
endcase
end
end
reg [7:0] smg_disp;
always @ (posedge clk)
begin
if(!reset)
smg_disp<=smg_disp;
else
begin
case(en)
4'b0001 : smg_disp<=q1_data;
4'b0010 : smg_disp<=q2_data;
4'b0011 : smg_disp<=q3_data;
4'b0100 : smg_disp<=q4_data;
endcase
end
end
endmodule
简单的不能再简单,随便找个入门级的书,稍微改改都有。
好的
t1作计数器,记满1000溢出
设置单机片定时器为计数器模式以后开中断,然后中断函数里面累计中断的次数,送显示。、送显示最简单的方法是:1、用单片机空闲的端口,比如P0口接8个LED灯按二进制的方式显示计数的数值,数值可达到11111111也就是255;2、用八段数码管或液晶屏显示,这个比较麻烦,还要学会如何控制数码管或液晶屏的显示。
avr单片机18B20温度传感器编程
;这是关于DS18B20的读写程序,数据脚P2.2,晶振12MHZ ;温度传感器18B20汇编程序,采用器件默认的12位转化,最大转化时间750微秒 ;可以将检测到的温度直接显示到AT89C51开发实验板的两个数码管上 ;显示温度00到99度,很准确哦~~无需校正!ORG 0000H ;单片机内存分配申明!TEMPER_L EQU 29H;用于保存读出...
求:8字数码管动态显示0到99的汇编程序
写那么长干嘛,p1口接数码管扫描。p0口接8段字符显示,已测试正常。ORG 0000H STAER: MOV DPTR,#K1 MOV 41H,#00H MOV 42H,#00H MOV R2,#0FFH A2: ACALL A1;调用显示子程序 DJNZ R2,A2 MOV R2,#0FFH INC 41H MOV A,41H CJNE A,#0AH,A2 MOV 41H,#00H INC 42H MOV ...
单片机C51课程设计 16进制转为10进制
}Conut=1000; for(j=0;j<4;j++){if(!(recode&0x01<<j))break;}\/\/判断按键所在列 Get_Key=(Seg<<2)+(j+1); \/\/键值 1-16 } } P1=0xf0; if(P1==0xf0) \/\/判断按键是否松开 Delay=0;} void InitTimer0(void) \/\/2ms{ TMOD = 0x01; TH0 = 0xF8...
高分求课程设计:利用D\/A芯片实现电机转速控制
电机变速一般都是直流电机,所以电压是改变电机速度的办法,只能一步一步的实验才行,仅仅靠理论是不行的
DS18B20小数部分都显示不出来每次都是22.00 23.00
整数小数分开计算,比如数据是 0001,0001。前四位是整数部分的第四位,后四位是小数部分,你计算的时候整数部分可以直接拿来用,不需要换算,小数部分可以625(我就以全显来算了),然后得出整数=1,小数=625。然后就显示了,小数部分是4位,不足的前面补0就可以了。你那样算的话我没仔细看,我猜...
单片机 如何将十六位转成十进制显示在LED上
P1口接段码,P0口接4个LED数码管的片选口 做一个数组:uchar code Led[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; \/\/LED灯段码,顺序对应0-9 uint data LEDGE,LEDSH,LEDBAI,LEDQIAN;uint data TIME=3756;LEDQIAN=TIME\/1000;\/\/取千位 LEDBAI=(TIME%1000)\/100;...
单片机问题
1. TMOD用于控制定时器\/汁数器的工作模式及工作方式,其字节地址为80H,格式如下。其中,低4位用于决定T0的工作方式,高4位用于决定T1的工作方式。1)、M1和M0工作方式控制位 M0和M1为工作方式控制位,确定4种工作方式,分别为方式0、1、2、3。2)、C\/T定时器\/计数器方式选择位 C\/T=0,设...
verilog 串口通信问题!紧急,救命! 谢谢! 我就是想用CPLD实现串口通信...
PC可随时向CPLD发送0-F的十六进制数据,CPLD接受后显示在7段数码管上.\/ module serial(clk,rst,rxd,txd,en,seg_data,key_input,lowbit);input clk,rst;input rxd;\/\/串行数据接收端 input key_input;\/\/按键输入 output [7:0]en;output[7:0] seg_data;reg[7:0] seg_data;output txd;\/\/...
如何利用74ls161完成八进制计数器
只用输出端的低三位就是8进制的计数,那个高位Q3不用空着,数码管可以不用画,是用来显示仿真效果的。161是16进制的计数器,从8到15共计8个数,然后复位置数,置入的是输入的数据端D的数,也就是从置入的数开始计数,将D置成1000(8),从八到十五共计八次数,CO端进位输出,这种方法最为简单。
尚宣归芪: //晶振我这里是20M// module m(clk,reset,smg_disp,bc1,bc2,bc3,bc4); input clk,reset; output [7:0] smg_disp; output bc4,bc3,bc2,bc1; /////////////////////////////动态扫描/////////////////////////////////////////////////////////////////////////// reg [16:0] count; always @ (posedge clk)...
鹤岗市18374944605: 数字频率计的设计 - ?
尚宣归芪: 简易频率计一、设计任务与要求1.设计制作一个简易频率测量电路,实现数码显示.2.测量范围:10Hz~99.99KHz 3.测量精度: 10Hz.4. 输入信号幅值:20mV~5V.5. 显示方式:4位LED数码.二、方案设...
鹤岗市18374944605: 单片机编程! - ?
尚宣归芪: 共阴极数码管的原理:公共端接低电平,段选端接高电平则点亮. 单片机IO口接数码管的段选端,一般是自高位到低位接hgfedcba ,例如:P0.7接h段,P0.6接g段……P0.1接f段,P0.0接a段. 要赋段选码给P0口,让数码管显示字符A,需要点亮g段、f段、e段、c段、b段、a段,不需点亮的是h段和d段,那么段选码的二进制码就是0111 0111(1亮,0灭),转成十六进制码就是77.共阳极数码管的原理跟共阴极的相反,公共端接高电平,段选端接低电平点亮. 故要显示字符A,则将共阴极字符A的段选码取反就是共阳极数码管显示字符A的段选码了,即二进制为1000 1000,十六进制为88. 如有不清楚,欢迎追问!
鹤岗市18374944605: 求单片机按键控制数码管程序 - ?
尚宣归芪: 实现方法有挺多种的,下面介绍一种: 1、按键子程序:实现按第一个键使键值keyvalue=1,第二个键使键值keyvalue=2,第三个键使键值keyvalue=3 2、显示子程序定义3个字节的显示缓存,如dispbuf1,dispbuf2,dispbuf3使dispbuf1的数字显...
鹤岗市18374944605: C51单片机C语言编程:数码管显示0000,1000,2100,3210,4321,1432.....循环,中间延时1S.仿真出来P0没输出 - ?
尚宣归芪: 调试的方法,再定义一个LED的PIN,,,,,,在需要调试的地方,让LED显示调试的状态......
鹤岗市18374944605: Multisim 软件4个管脚LED怎么用?
尚宣归芪: 这是具有BCD译码功能的LED数码管从左向右依次为DCBAABCD 对应一个4位2进制输入信号假设ABCD为1000,则数码管显示1假设ABCD为0100,则数码管显示2假设ABCD为1100,则数码管显示3其它情况依次类推.
鹤岗市18374944605: verilog八位数码管显示(输入一个二进制数,对应输出一个十进制数,要求能输出八位十进制数) - ?
尚宣归芪: 闲来无事,做做看. module xue3(isw,ohex3,ohex2,ohex1,ohex0); input [3:0] isw; output ohex3,ohex2,ohex1,ohex0;//下面点亮四个七段数码管 bcd7seg digit0(isw[3:0],ohex0); bcd7seg digit1(isw[3:0],ohex1); bcd7seg digit2(isw[3:0],ohex2); bcd7...
鹤岗市18374944605: 单片机十六进制转十进制数码管显示,这个函数看不明白,请教各位,给详细分析一下 - ?
尚宣归芪: 十六进制 每四个字节代表一个数字 (十进制0在十六进制表示为0x00 十进制的15 即十六进制中的 0x0f; 是十六进制中最大的一位数 就好像 十进制中的9 ) 因为 !!! 要表示一个0x0f 需要 4个bit(就类似 我们日光灯的开关 ) 所以 要左移4位...
鹤岗市18374944605: 用Verilog HDL设计FPGA芯片.在4位数码管上从0000~9999环计数.按下K4进行+1计数,单位数码管上显示“1”. - ?
尚宣归芪: 作为最底层的开发需要知道你的设计要完成那些功能(模块),然后才逐一实现.至少一下几个是必须的,不知是否都已实现. 1)输入采集,就是键盘的输入驱动,需要去抖动,按键反应灵敏,准确无误.如不会按键一次,而识别为多次. 2)输出显示,数码管显示驱动,将接收的十进制数显示. 3)加减计算,可采用4个4bit计数器分别表示每一位,这样不需做十六进制到十进制的转换. 4)时钟选择,根据所选时钟计算K6键选择后多长时间给出加一动作 基本就这些,只做个加减当然简单,但从输入到输出还是有个流程的
鹤岗市18374944605: 急求,用74LS161和74LS00设计十进制计数器 明天要考试了.求 - ?
尚宣归芪: 要用74LS161和74LS00设计十进制计数器,可采用反馈清零法.因74LS161是16进制计数器,当计数到十,即Q3Q2Q1Q0=1010时,将Q3,Q1接到一个与非门74LS00,产生一个复位信号,加到复位端MR,使计数器回0,实现改制.但1010状态只出现一瞬间,宏观上看不到.逻辑图如下.去掉数码管,如下图