Forum Discussion
Altera_Forum
Honored Contributor
14 years agothis is the running code: :D
module segmentTrial(clk,tick,seg,seg_sel,mouse,button1,button2,button3,button4);
input clk,button1,button2,button3,button4;
output seg;
output seg_sel;
output tick;
output mouse;
reg tick;
reg mouse;
reg seg;
reg seg_sel;
integer i,r,minute1,second,minute2,hour1,hour2,counter,mouseCom,catch,Buttontiming;
/* 7 segement patern */
parameter one = 8'b100_1111_1; //159
parameter zero = 8'b000_0001_1; // 3
parameter two =8'b001_0010_1; // 37
parameter three=8'b000_0110_1; // 13
parameter four =8'b100_1100_1; //153
parameter five =8'b010_0100_1; // 73
parameter six =8'b010_0000_1; // 65
parameter seven=8'b000_1111_1; // 31
parameter eight=8'b000_0000_1; // 1
parameter nine =8'b000_0100_1; // 9
parameter blank=8'b111_1111_1; //255 */
/* End of 7 segement patern */
/* mouse pattern ;) */
parameter com0 =8'b010_0000_1;
parameter com1 =8'b000_1000_0;
parameter com2 =8'b001_0000_0;
parameter com3 =8'b010_0000_0;
parameter com4 =8'b100_000_0;
parameter com5 =8'b001_0010_0;
parameter com6 =8'b00_0100_1;
parameter com7 =8'b100_0100_1;
parameter com8 =8'b100_0100_0;
parameter off = 8'b000_0000_0;
/* End of mouse pattern ;) */
initial minute2 = 0;
initial minute1 = 0;
initial hour2 = 5;
initial hour1 = 9;
initial counter = 60;
initial seg_sel = 4'b0001; //intialize seleector digit 1
initial mouse = ~off;
/* 1 minute countdown counter */
always@(posedge clk)
begin
if(i==16000000) //1Hz
begin
i=1;
counter = counter-1'b1;
if(counter == 0) //reset everything after count
begin
mouse = ~off;
hour1 = 0;
hour2 = 0;
end
if(counter != 0); //to prevent displaying something after count zero
begin
hour1 = counter % 10;
end
if(counter == 49 ||counter == 39 || counter == 29 || counter == 19 || counter == 9)
begin
hour2 = hour2-1'b1;
end
end
else
begin
i=i+1'b1; //increament i
end
if(Buttontiming==4000000) //button detection delay
begin
mouseCom = hour1;
Buttontiming = 1;
if(mouseCom==3)
begin
mouse = ~com1;
if(button1==0)
begin
minute1 = minute1+1'b1;
end
end
else if(mouseCom == 1)
begin
mouse = ~com2;
if(button2 == 0)
begin
minute1 = minute1+1'b1;
end
end
else if(mouseCom == 6)
begin
mouse = ~com6;
if(button4 == 0 && button1 == 0)
begin
minute1 = minute1+2;
end
else if(button4 == 0 || button1 == 0)
begin
minute1 = minute1+1'b1;
end
end
else if(mouseCom == 8)
begin
mouse = ~com4;
if(button3 == 0)
begin
minute1 = minute1+1'b1;
end
end
else if(minute1 == 10)
begin
minute1 = 0;
minute2 = minute2+1'b1;
end
else
begin
mouse = ~off;
end
end
else
begin
Buttontiming=Buttontiming+1'b1;
end
end
/* End of 1 minute countdown counter */
/* Segment Selector */
always@(posedge clk)
begin
if(r==800)
begin
tick=~tick;
r=1;
end
else
begin
r=r+1'b1;
end
end
/* End of Segment Selector */
/* 7 segment Display Library */
always@(posedge tick)
begin
seg_sel={seg_sel,seg_sel};
if(seg_sel==4'b1000)
begin
case(hour2) 0:seg=zero; 1:seg=one; 2:seg=two; 3:seg=three; 4:seg=four;
5:seg=five; 6:seg=six; 7:seg=seven; 8:seg=eight; 9:seg=nine;
endcase
end
else if(seg_sel==4'b0100)
begin
case(hour1) 0:seg=zero; 1:seg=one; 2:seg=two; 3:seg=three; 4:seg=four;
5:seg=five; 6:seg=six; 7:seg=seven; 8:seg=eight; 9:seg=nine;
endcase
end
else if(seg_sel==4'b0010)
begin
case(minute2) 0:seg=zero; 1:seg=one; 2:seg=two; 3:seg=three; 4:seg=four;
5:seg=five; 6:seg=six; 7:seg=seven; 8:seg=eight; 9:seg=nine;
endcase
end
else if(seg_sel==4'b0001)
begin
case(minute1) 0:seg=zero; 1:seg=one; 2:seg=two; 3:seg=three; 4:seg=four;
5:seg=five; 6:seg=six; 7:seg=seven; 8:seg=eight; 9:seg=nine;
endcase
end
end
/* End of 7 segment Display Library*/
endmodule
sir, how do i improve this something like adding a several combination of lighting the bulb? let's say 100 combinations or more? how am i gonna do this in an array form or in case?
thank you! :)