完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
各位兄弟,帮我看下我写的电子钟,键盘校时的时候,不是1分钟加,而是按一下键就+8。我是初学者,代码如下:
/****************************************Copyright (c)************************************************** ** Dongdong Studio ** **---------------------------------------File Info----------------------------------------------------- ** File name: SegLed_V2 ** Last modified Date: 2012-12-18 ** Last Version: 2.0 ** Descriptions: SegLed **------------------------------------------------------------------------------------------------------ ** Created by: dongdong ** Created date: 2009-10-18 ** Version: 1.0 ** Descriptions: The original version ** **------------------------------------------------------------------------------------------------------ ** Modified by: ** Modified date: ** Version: ** Descriptions: modify hc595 driver segled to 8550 ** **------------------------------------------------------------------------------------------------------ ********************************************************************************************************/ module SegLed_V2 ( //input input sys_clk , input sys_rst_n , input key1 , input key2 , //output output reg seg_c1 ,//wire macq modify output reg seg_c2 , output reg seg_c3 , output reg seg_c4 , output reg seg_a , output reg seg_b , output reg seg_c , output reg seg_d , output reg seg_e , output reg seg_f , output reg seg_g , output reg seg_h ); //parameter define //parameter WIDTH2 = 26; //parameter WIDTH = 5; //parameter SIZE = 8; //reg define reg [3:0] counter; //reg [WIDTH2-1:0] count ; //macq del //reg [SIZE-1:0] disp_data ;//macq del //reg [SIZE-1:0] dat ;//macq del //reg disp_clk ;//macq del reg [19:0] dis_cnt; reg [27:0] clk_cnt; //时钟clock的计数器 reg [3:0] led_en; reg [19:0] key_cnt; //扫键计数寄存器 reg segled_a ; reg segled_b ; reg segled_c ; reg segled_d ; reg segled_e ; reg segled_f ; reg segled_g ; reg segled_h ; //wire define //////////////////////////////////////////// macq add //reg[27:0] count; reg[3:0] sec,min,hour; reg[2:0] sec1,min1,hour1; ////////////////////////////////////////////// reg [1:0] low_sw; reg [1:0] low_sw_r; //每个时钟周期的上升沿将low_sw信号锁存到low_sw_r中 //当寄存器low_sw由1变为0时,led_ctrl的值变为高,维持一个时钟周期 wire [1:0] key_ctrl = low_sw_r[1:0] & ( ~low_sw[1:0]); reg d1; reg d2; /******************************************************************************************************* ** Main Program ** ********************************************************************************************************/ always @ (posedge sys_clk or negedge sys_rst_n) if (!sys_rst_n) //异步复位 key_cnt <= 20'd0; else key_cnt <= key_cnt + 1'b1; always @(posedge sys_clk or negedge sys_rst_n) begin if (!sys_rst_n) begin low_sw <= 2'b11; low_sw_r <= 2'b11; end else if (key_cnt == 20'hfffff) //满20ms,将按键值锁存到寄存器low_sw中 begin low_sw <= {key2,key1}; low_sw_r <= low_sw; end if (!sys_rst_n) begin d1 <= 1'b0; d2 <= 1'b0; end else begin //某个按键值变化时... if ( key_ctrl[0] ) d1 <= ~d1; if ( key_ctrl[1] ) d2 <= ~d2; if(d1 == 1'b1) begin if((hour==3)&&(hour1==2))//是否到了24小时 begin sec<=4'd0; sec1<=3'd0; min<=4'd0; min1<=3'd0; hour<=4'd0; hour1<=3'd0; end else if(hour==9) begin hour1<=hour1+1'b1; hour<=4'd0; end else hour <= hour + 1'b1; end if(d2 == 1'b1) begin if((min==9)&& (min1==5)) begin min<=4'd0; min1<=3'd0; end else if(min==9) begin min1 <= min1+1'b1; min<=4'd0; end else min <= min+1'b1; end end if (sys_rst_n ==1'b0) //按键复位,如果复位电平是1位宽的二进制0(低电平复位) begin clk_cnt <= 28'b0; // dis_cnt <= 20'd0; sec <= 4'b0;//macq add min <= 4'b0;//macq add hour <= 4'b0;//macq add sec1 <= 3'b0;//macq add min1 <= 3'b0;//macq add hour1 <= 3'b0;//macq add end else if (clk_cnt == 28'd50000000)// 板子晶振为50Mhz,定时 1 秒 begin clk_cnt <=28'd0; sec<=sec+1'b1; /* //校时,以每秒钟作为触发探测校时按键状态 if(key1 == 1'b0) begin if((hour==3)&&(hour1==2))//是否到了24小时 begin sec<=4'd0; sec1<=3'd0; min<=4'd0; min1<=3'd0; hour<=4'd0; hour1<=3'd0; end else if(hour==9) begin hour1<=hour1+1'b1; hour<=4'd0; end else hour <= hour + 1'b1; end if(key2 == 1'b0) begin if((min==9)&& (min1==5)) begin min<=4'd0; min1<=3'd0; end else if(min==9) begin min1 <= min1+1'b1; min<=4'd0; end else min <= min+1'b1; end //校时完 */ if(sec==9) begin ////////begin 4 if(sec==9&&sec1==5) //是否到分 begin//begin 3 if(min==9) begin///////////begin 2 if(min1==5)//是否到时 begin //////////begin 1 if(hour==9) begin hour1<=hour+1'b1; hour<=4'd0; end else if(hour==3&&hour1==2)//是否到了24小时 begin sec<=4'd0; sec1<=3'd0; min<=4'd0; min1<=3'd0; hour<=4'd0; hour1<=3'd0; end else begin sec<=4'd0; sec1<=3'd0; min<=4'd0; min1<=3'd0; hour<=hour+1'b1; end end ////////////////end 1 else begin sec<=4'd0; sec1<=3'd0; min<=4'd0; min1<=min1+1'b1; end end //////end 2 else begin sec<=4'd0; sec1<=3'd0; min<=min+1'b1; end end////end 3 else begin sec<=4'd0; sec1<=sec1+1'b1; end end /////////end 4 end else clk_cnt <= clk_cnt+1'b1; end always @(posedge sys_clk) //大约1到2毫秒钟的分频 begin if(dis_cnt==100000) begin dis_cnt <= 20'd0; led_en<=led_en+1'b1; if(led_en==4) led_en<=4'd0; end else dis_cnt<=dis_cnt+1'b1; end always @(posedge sys_clk) begin case(led_en) 4'd0: begin //清屏 segled_a = 0 ; segled_b = 0 ; segled_c = 0 ; segled_d = 0 ; segled_e = 0; segled_f = 0 ; segled_g = 0 ; segled_h = 0 ; if(clk_cnt >= 28'd4000000) begin seg_c1 = 1'b1;//数码管的位选通,下同 seg_c2 = 1'b1; seg_c3 = 1'b0; seg_c4 = 1'b1; segled_a = 0; segled_b = 0 ; segled_c = 0 ; segled_d = 0 ; segled_e = 0; segled_f = 0 ; segled_g = 0; segled_h = 1 ; end end 4'd1: begin //清屏 segled_a = 0 ; segled_b = 0 ; segled_c = 0 ; segled_d = 0 ; segled_e = 0; segled_f = 0 ; segled_g = 0 ; segled_h = 0 ; seg_c1 = 1'b0;//数码管的位选通,下同 seg_c2 = 1'b1; seg_c3 = 1'b1; seg_c4 = 1'b1; case(min) 4'd0://0 begin segled_a = 1 ; segled_b = 1 ; segled_c = 1 ; segled_d = 1 ; segled_e = 1 ; segled_f = 1 ; segled_g = 0 ; segled_h = 0 ; end 4'd1://1 begin segled_a = 0 ; segled_b = 1 ; segled_c = 1 ; segled_d = 0 ; segled_e = 0 ; segled_f = 0 ; segled_g = 0 ; segled_h = 0 ; end 4'd2: begin segled_a = 1 ; segled_b = 1 ; segled_c = 0 ; segled_d = 1 ; segled_e = 1 ; segled_f = 0 ; segled_g = 1 ; segled_h = 0 ; end 4'd3: begin segled_a = 1 ; segled_b = 1 ; segled_c = 1 ; segled_d = 0 ; segled_e = 1 ; segled_f = 0 ; segled_g = 1 ; segled_h = 0 ; end 4'd4: begin segled_a = 0 ; segled_b = 1 ; segled_c = 1 ; segled_d = 0 ; segled_e = 0 ; segled_f = 1 ; segled_g = 1 ; segled_h = 0 ; end 4'd5: begin segled_a = 1 ; segled_b = 0 ; segled_c = 1 ; segled_d = 0 ; segled_e = 1 ; segled_f = 1 ; segled_g = 1 ; segled_h = 0 ; end 4'd6: begin segled_a = 1 ; segled_b = 0 ; segled_c = 1 ; segled_d = 1 ; segled_e = 1 ; segled_f = 1 ; segled_g = 1 ; segled_h = 0 ; end 4'd7: begin segled_a = 1 ; segled_b = 1 ; segled_c = 1 ; segled_d = 0 ; segled_e = 0 ; segled_f = 0 ; segled_g = 0 ; segled_h = 0 ; end 4'd8: begin segled_a = 1 ; segled_b = 1 ; segled_c = 1 ; segled_d = 1 ; segled_e = 1 ; segled_f = 1 ; segled_g = 1 ; segled_h = 0; //. end 4'd9: begin segled_a = 1 ; segled_b = 1 ; segled_c = 1 ; segled_d = 0 ; segled_e = 1 ; segled_f = 1 ; segled_g = 1 ; segled_h = 0 ; end default: begin segled_a = 0 ; segled_b = 0 ; segled_c = 0 ; segled_d = 0 ; segled_e = 0 ; segled_f = 0 ; segled_g = 0 ; segled_h = 0 ; end endcase end 4'd2: begin segled_a = 0 ; segled_b = 0 ; segled_c = 0 ; segled_d = 0 ; segled_e = 0; segled_f = 0 ; segled_g = 0 ; segled_h = 0 ; seg_c1 = 1'b1; seg_c2 = 1'b0; seg_c3 = 1'b1; seg_c4 = 1'b1; case(min1) 3'd0://0 begin segled_a = 1 ; segled_b = 1 ; segled_c = 1 ; segled_d = 1 ; segled_e = 1 ; segled_f = 1 ; segled_g = 0 ; segled_h = 0 ;//. end 3'd1://1 begin segled_a = 0 ; segled_b = 1 ; segled_c = 1 ; segled_d = 0 ; segled_e = 0 ; segled_f = 0 ; segled_g = 0 ; segled_h = 0 ; end 3'd2: begin segled_a = 1 ; segled_b = 1 ; segled_c = 0 ; segled_d = 1 ; segled_e = 1 ; segled_f = 0 ; segled_g = 1 ; segled_h = 0 ; end 3'd3: begin segled_a = 1 ; segled_b = 1 ; segled_c = 1 ; segled_d = 0 ; segled_e = 1 ; segled_f = 0 ; segled_g = 1 ; segled_h = 0 ; end 3'd4: begin segled_a = 0 ; segled_b = 1 ; segled_c = 1 ; segled_d = 0 ; segled_e = 0 ; segled_f = 1 ; segled_g = 1 ; segled_h = 0 ; end 3'd5: begin segled_a = 1 ; segled_b = 0 ; segled_c = 1 ; segled_d = 0 ; segled_e = 1 ; segled_f = 1 ; segled_g = 1 ; segled_h = 0 ; end default: begin segled_a = 0; segled_b = 0 ; segled_c = 0 ; segled_d = 0 ; segled_e = 0 ; segled_f = 0 ; segled_g = 0 ; segled_h = 0 ; end endcase end 4'd3: begin segled_a = 0 ; segled_b = 0 ; segled_c = 0 ; segled_d = 0 ; segled_e = 0; segled_f = 0 ; segled_g = 0 ; segled_h = 0 ; //en<=8'hfe; //数码管的位选通,下同 seg_c1 = 1'b1; seg_c2 = 1'b1; seg_c3 = 1'b0; seg_c4 = 1'b1; case(hour) 4'd0://0 begin segled_a = 1 ; segled_b = 1 ; segled_c = 1 ; segled_d = 1 ; segled_e = 1 ; segled_f = 1 ; segled_g = 0 ; segled_h = 0;//. end 4'd1://1 begin segled_a = 0 ; segled_b = 1 ; segled_c = 1 ; segled_d = 0 ; segled_e = 0 ; segled_f = 0 ; segled_g = 0 ; segled_h = 0 ; end 4'd2: begin segled_a = 1 ; segled_b = 1 ; segled_c = 0 ; segled_d = 1 ; segled_e = 1 ; segled_f = 0 ; segled_g = 1 ; segled_h = 0 ; end 4'd3: begin segled_a = 1 ; segled_b = 1 ; segled_c = 1 ; segled_d = 0 ; segled_e = 1 ; segled_f = 0 ; segled_g = 1 ; segled_h = 0 ; end 4'd4: begin segled_a = 0 ; segled_b = 1 ; segled_c = 1 ; segled_d = 0 ; segled_e = 0 ; segled_f = 1 ; segled_g = 1 ; segled_h = 0 ; end 4'd5: begin segled_a = 1 ; segled_b = 0 ; segled_c = 1 ; segled_d = 0 ; segled_e = 1 ; segled_f = 1 ; segled_g = 1 ; segled_h = 0 ; end 4'd6: begin segled_a = 1 ; segled_b = 0 ; segled_c = 1 ; segled_d = 1 ; segled_e = 1 ; segled_f = 1 ; segled_g = 1 ; segled_h = 0 ; end 4'd7: begin segled_a = 1 ; segled_b = 1 ; segled_c = 1 ; segled_d = 0 ; segled_e = 0 ; segled_f = 0 ; segled_g = 0 ; segled_h = 0 ; end 4'd8: begin segled_a = 1 ; segled_b = 1 ; segled_c = 1 ; segled_d = 1 ; segled_e = 1 ; segled_f = 1 ; segled_g = 1 ; segled_h = 0 ;//. end 4'd9: begin segled_a = 1 ; segled_b = 1 ; segled_c = 1 ; segled_d = 0 ; segled_e = 1 ; segled_f = 1 ; segled_g = 1 ; segled_h = 0 ; end default: begin segled_a = 0 ; segled_b = 0 ; segled_c = 0 ; segled_d = 0 ; segled_e = 0 ; segled_f = 0 ; segled_g = 0 ; segled_h = 0 ; end endcase end 4'd4: begin segled_a = 0 ; segled_b = 0 ; segled_c = 0 ; segled_d = 0 ; segled_e = 0; segled_f = 0 ; segled_g = 0 ; segled_h = 0 ; //en<=8'hfd; seg_c1 = 1'b1; seg_c2 = 1'b1; seg_c3 = 1'b1; seg_c4 = 1'b0; case(hour1) 3'd0://0 begin segled_a = 1 ; segled_b = 1 ; segled_c = 1 ; segled_d = 1 ; segled_e = 1 ; segled_f = 1 ; segled_g = 0 ; segled_h = 0 ;//. end 3'd1://1 begin segled_a = 0 ; segled_b = 1 ; segled_c = 1 ; segled_d = 0 ; segled_e = 0 ; segled_f = 0 ; segled_g = 0 ; segled_h = 0 ; end 3'd2: begin segled_a = 1 ; segled_b = 1 ; segled_c = 0 ; segled_d = 1 ; segled_e = 1 ; segled_f = 0 ; segled_g = 1 ; segled_h = 0 ; end 3'd3: begin segled_a = 1 ; segled_b = 1 ; segled_c = 1 ; segled_d = 0 ; segled_e = 1 ; segled_f = 0 ; segled_g = 1 ; segled_h = 0 ; end 3'd4: begin segled_a = 0 ; segled_b = 1 ; segled_c = 1 ; segled_d = 0 ; segled_e = 0 ; segled_f = 1 ; segled_g = 1 ; segled_h = 0 ; end 3'd5: begin segled_a = 1 ; segled_b = 0 ; segled_c = 1 ; segled_d = 0 ; segled_e = 1 ; segled_f = 1 ; segled_g = 1 ; segled_h = 0 ; end default: begin segled_a = 0 ; segled_b = 0 ; segled_c = 0 ; segled_d = 0 ; segled_e = 0 ; segled_f = 0 ; segled_g = 0 ; segled_h = 0 ; end endcase end endcase end always @(*) begin seg_a = ~segled_a ; seg_b = ~segled_b ; seg_c = ~segled_c ; seg_d = ~segled_d ; seg_e = ~segled_e ; seg_f = ~segled_f ; seg_g = ~segled_g ; seg_h = ~segled_h ; end //assign seg_c1 = 1'b0; //assign seg_c2 = 1'b0; //assign seg_c3 = 1'b0; //assign seg_c4 = 1'b0; endmodule //end of RTL code |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 09:36 , Processed in 0.675082 second(s), Total 51, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号