这是我写的程序 原本我的显示程序模块是和主程序是一起的,现在我想把显示模块提出来 然后用实例引用的方式引用显示模块,方便以后引用。
程序的主要功能是 一个按键加一 一个按键减一 一个按键复位
这个是顶层文件 被注释掉的那部分是显示程序的
/***************************** *Project : key_2 *Author : Mr.li *CreateData : 2010-11-2 *Information : *Function : *ModifyInformation : 2010-11-10
*****************************/ module Key_3( Clk_50Mhz, //50Mh系统时钟输入 KeyIn, //按下为低电平 不按下为高电平 Rst_L, // LedSeg, // LedEn // );
input Clk_50Mhz, Rst_L; input[1:0] KeyIn; // output[7:0] LedSeg, LedEn; reg[7:0] LedSeg, LedEn; //reg[15:0] Scant_Cnt; reg[19:0] Cnt; //20ms 扫描一次 //reg[4:0] Num; reg[4:0] LedNum[7:0]; // 宽度为四 深度为八的存储空间
reg[1:0] Key_R; //存储键值 reg[1:0] Key_R_H;
/* always @ (posedge Clk_50Mhz or negedge Rst_L) begin if(!Rst_L) begin Scant_Cnt <= 0; LedEn <= 8'b1111_1110; end else begin if( Scant_Cnt == 16'hffff ) // begin Scant_Cnt <= 0; LedEn[7:1] <= LedEn[6:0]; LedEn[0] <= LedEn[7]; end else Scant_Cnt <= Scant_Cnt + 1; end end
*/
/****************************************************************/ always @ (posedge Clk_50Mhz or negedge Rst_L) if(!Rst_L) Cnt <= 20'd0; else Cnt <= Cnt + 1'b1;
always @ (posedge Clk_50Mhz or negedge Rst_L) if(!Rst_L) Key_R <= 2'b11; else if(Cnt == 20'hfffff) Key_R <= KeyIn;
always @ (posedge Clk_50Mhz or negedge Rst_L) if(!Rst_L) Key_R_H <= 2'b11; else Key_R_H <= Key_R;
wire[1:0] sw = Key_R_H & (~Key_R);
//////////////////////////////////////////////////// always @ ( posedge Clk_50Mhz or negedge Rst_L ) begin if(!Rst_L) begin LedNum[0] <= 0; LedNum[1] <= 0; LedNum[2] <= 0; LedNum[3] <= 0; LedNum[4] <= 0; LedNum[5] <= 0; LedNum[6] <= 0; LedNum[7] <= 0; end /* else if( sw ) */ else case (sw) 2'b01 : // add 1 +1 begin LedNum[0] <= LedNum[0] + 1; if(LedNum[0] == 9) begin LedNum[1] <= LedNum[1] + 1; LedNum[0] <= 0; if(LedNum[1] == 9) begin LedNum[2] <= LedNum[2] + 1; LedNum[1] <= 0; if(LedNum[2] == 9) begin LedNum[3] <= LedNum[3] + 1; LedNum[2] <= 0; end end end end
2'b10 : // subtract 1 -1 begin LedNum[0] <= LedNum[0] - 1; if(LedNum[0] == 0) begin LedNum[1] <= LedNum[1] - 1; LedNum[0] <= 9; if(LedNum[1] == 0) begin LedNum[2] <= LedNum[2] - 1; LedNum[1] <= 9; if(LedNum[2] == 0) begin LedNum[3] <= LedNum[3] - 1; LedNum[2] <= 9; end end end end default : begin LedNum[0] <= LedNum[0]; LedNum[1] <= LedNum[1]; LedNum[2] <= LedNum[2]; LedNum[3] <= LedNum[3]; LedNum[4] <= LedNum[4]; LedNum[5] <= LedNum[5]; LedNum[6] <= LedNum[6]; LedNum[7] <= LedNum[7]; end endcase end
LedDis v1( .Clk_50Mhz (Clk_50Mhz), /*.LedNum[0] (LedNum[0]), .LedNum[1] (LedNum[1]), .LedNum[2] (LedNum[2]), .LedNum[3] (LedNum[3]), .LedNum[4] (LedNum[4]), .LedNum[5] (LedNum[5]), .LedNum[6] (LedNum[6]), .LedNum[7] (LedNum[7]),*/ .LedSeg (LedSeg), .LedEn (LedEn), .Rst_L (Rst_L) ); /* ////////////////////////////////////////////////////// always @ (posedge Clk_50Mhz) begin case ( LedEn ) 8'b1111_1110 : Num <= LedNum[0]; 8'b1111_1101 : Num <= LedNum[1]; 8'b1111_1011 : Num <= LedNum[2]; 8'b1111_0111 : Num <= LedNum[3]; 8'b1110_1111 : Num <= LedNum[4]; 8'b1101_1111 : Num <= LedNum[5]; 8'b1011_1111 : Num <= LedNum[6]; 8'b0111_1111 : Num <= LedNum[7]; endcase end
//////////////////////////////////////////////////////
//数码管代码译码进程块 触发信号为Num always @ ( Num ) begin case(Num) 5'b00000: LedSeg=8'b1100_0000; //0 c0 5'b00001: LedSeg=8'b1111_1001; //1 f9 5'b00010: LedSeg=8'b1010_0100; //2 a4 5'b00011: LedSeg=8'b1011_0000; //3 b0 5'b00100: LedSeg=8'b1001_1001; //4 99 5'b00101: LedSeg=8'b1001_0010; //5 92 5'b00110: LedSeg=8'b1000_0010; //6 82 5'b00111: LedSeg=8'b1111_1000; //7 f8 5'b01000: LedSeg=8'b1000_0000; //8 80 5'b01001: LedSeg=8'b1001_0000; //9 90 5'b01010: LedSeg=8'b1000_1000; //a 88 5'b01011: LedSeg=8'b1000_0011; //b 83 5'b01100: LedSeg=8'b1100_0110; //c c6 5'b01101: LedSeg=8'b1010_0001; //d a1 5'b01110: LedSeg=8'b1000_0110; //e 86 5'b01111: LedSeg=8'b1000_1110; //f 8e 5'b10000: LedSeg=8'b1011_1111; // - default : LedSeg=8'b0100_0000; // endcase end
*/
endmodule
这个是显示模块 是我改写的 不成功
/*************************************** *Project : LedDis *Author : Mr.Li *CreateData : 2010-11-13 pm *Information : *Function : ***************************************/ module LedDis( Clk_50Mhz, LedNum[0], LedNum[1], LedNum[2], LedNum[3], LedNum[4], LedNum[5], LedNum[6], LedNum[7], LedSeg, LedEn, Rst_L );
input[4:0] LedNum[0], LedNum[1], LedNum[2], LedNum[3], LedNum[4], LedNum[5], LedNum[6], LedNum[7]; input Clk_50Mhz, Rst_L;
output[7:0] LedSeg, LedEn; reg[7:0] LedSeg, LedEn;
reg[15:0] Scant_Cnt; reg[4:0] Num; ///////////////////////////////////////////////////////// always @ ( posedge Clk_50Mhz or negedge Rst_L ) begin if(!Rst_L) begin LedEn <= 8'b1111_1110; Scant_Cnt <= 0; end else begin if(Scant_Cnt == 16'hffff) begin Scant_Cnt <= 0; LedEn[7:1] <= LedEn[6:0]; LedEn[0] <= LedEn[7]; end else Scant_Cnt <= Scant_Cnt + 1; end end
////////////////////////////////////////////////// always @ (posedge Clk_50Mhz) begin case ( LedEn ) 8'b1111_1110 : Num <= LedNum[0]; 8'b1111_1101 : Num <= LedNum[1]; 8'b1111_1011 : Num <= LedNum[2]; 8'b1111_0111 : Num <= LedNum[3]; 8'b1110_1111 : Num <= LedNum[4]; 8'b1101_1111 : Num <= LedNum[5]; 8'b1011_1111 : Num <= LedNum[6]; 8'b0111_1111 : Num <= LedNum[7]; endcase end
//////////////////////////////////////////////////////
//数码管代码译码进程块 触发信号为Num always @ ( Num ) begin case(Num) 5'b00000: LedSeg=8'b1100_0000; //0 c0 5'b00001: LedSeg=8'b1111_1001; //1 f9 5'b00010: LedSeg=8'b1010_0100; //2 a4 5'b00011: LedSeg=8'b1011_0000; //3 b0 5'b00100: LedSeg=8'b1001_1001; //4 99 5'b00101: LedSeg=8'b1001_0010; //5 92 5'b00110: LedSeg=8'b1000_0010; //6 82 5'b00111: LedSeg=8'b1111_1000; //7 f8 5'b01000: LedSeg=8'b1000_0000; //8 80 5'b01001: LedSeg=8'b1001_0000; //9 90 5'b01010: LedSeg=8'b1000_1000; //a 88 5'b01011: LedSeg=8'b1000_0011; //b 83 5'b01100: LedSeg=8'b1100_0110; //c c6 5'b01101: LedSeg=8'b1010_0001; //d a1 5'b01110: LedSeg=8'b1000_0110; //e 86 5'b01111: LedSeg=8'b1000_1110; //f 8e 5'b10000: LedSeg=8'b1011_1111; // - default : LedSeg=8'b0100_0000; // endcase end
endmodule
|