数字时钟正确代码
LED数字显示电子时钟源程序代码

LED数字显示电子时钟源程序代码程序:(注已完全经过调试,达到预期目的)#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar count=0;sbit LED=P1^0;uchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //显示数码管0,1,3,4,5,6,7,8,9 uchar miao=0,fen=0,hour=0;void delay(uint i) //延迟函数{uint j;for(;i>0;i--)for(j=124;j>0;j--);}void init(){ET0=1;TMOD=0x51; //选定定时器0,1和中断0,1TH0=(65536-25000)/256;TL0=(65536-25000)%256; //设定时器0时间为250ms一次ET1=1;TH1=0xff;TL1=0xff; //定时器1为中断EX0=1;IT0=1; //中断0开EX1=1;IT1=1; //中断1开TR0=1; //定时器0开TR1=1; //定时器1开EA=1; //总中断开}void display() //时钟显示函数{P0=tab[hour/10%10];P2=0xfe;delay(1);P0=tab[hour%10];P2=0xfd;delay(1);P0=tab[fen/10%10];P2=0xfb;delay(1);P0=tab[fen%10];P2=0xf7;delay(1);P0=tab[miao/10%10];P2=0xef;delay(1);P0=tab[miao%10];P2=0xdf;delay(1);}void main() //主函数{init();LED=0;while(1){display();}}void T0_int() interrupt 1 //定时器0函数{TH0=(65536-25000)/256;TL0=(65536-25000)%256;count++;if(count==20){count=0;miao= miao +1;LED=~LED;if(sec==60){miao=0;fen= fen +1;if(fen ==60){fen =0;hour=hour+1;if(hour==24)hour=0;}}}}void T1_int() interrupt 3 //定时器1函数控制秒针加1 {TH1=0xff;TL1=0xff;miao=miao+1;if(miao ==60)miao =0;}void I1_int() interrupt 2 //中断1函数控制按键分针加1 {EX0=0;fen= fen +1;if(fen ==60)fen =0;EX0=1;}void I0_int() interrupt 0 //中断函数0控制按键时针加1 {EX1=0;hour=hour+1;if(hour==24)hour=0;EX1=1;}。
数字时钟的Verilog代码

数字时钟的Verilog代码一、功能说明:1.可准确计时2.可按键复位3.可模式切换是正常计数还是调整秒位,或调整分位或小时位,再按置数键可调整4.切换为调整模式时,相应的被调整位会2Hz的闪烁注:我的FPGA开发板时钟为33.8688Mhz我的主体代码里的信号都是1有效,但开发板按键按下去时是置0,所以我在主体代码的前面都使用了反相器。
代码均调试成功,没有任何问题,同学们可以放心复制粘贴。
二、模块说明1.主体代码2.按键消抖模块3.分频器模块我的主题代码中嵌入了按键消抖模块,按键消抖中又嵌入了分频器。
请阅读此文档的同学不要漏加,否则不能正常工作三、代码(1)主体代码module clock(seg7,scan,clk,clr1,mode2,inc2);output[7:0] seg7;output[5:0] scan;input clk; //时钟输入20MHzinput clr1; //清零端input mode2; //控制信号,用于选择模式input inc2; //置数信号//按键全部反逻辑wire clr,mode,inc;assign clr=~clr1;wire mode1,inc1;assign mode=~mode1;assign inc=~inc1;reg[7:0] seg7; //8段显示控制信号(abcdefg.dp)reg[5:0] scan; //数码管地址选择信号reg[1:0] state; //定义4种状态reg[3:0] qhh,qhl,qmh,qml,qsh,qsl; //小时、分、秒的高位和低位reg[3:0] data;reg[2:0] cnt; //扫描数码管的计数器reg clk1khz,clk1hz,clk2hz; //1kHz、1Hz、2Hz的分频信号reg[2:0] blink; //闪烁信号reg inc_reg;//按键置数寄存器reg[7:0] sec,min;//定义按键置数时的时分秒寄存器reg[7:0] hour;parameter state0=2'b00,state1=2'b01,state2=2'b10,state3=2'b11;//状态0-3定义reg[14:0] n1;reg[24:0] n2;reg[23:0] n3;//----------------------按键消抖-----------------------------IP_ButtonDebounce m1(.clk(clk),.rst(clr),.BTN0(mode2),.BTN_DEB(mode1));IP_ButtonDebounce m2(.clk(clk),.rst(clr),.BTN0(inc2),.BTN_DEB(inc1));assign mode=~mode1;assign inc=~inc1;//-----------------------------800Hz分频,用于扫描数码管地址--------always@(posedge clk or posedge clr)beginif(clr) beginclk1khz<=0;n1<=0;endelse if(n1==42336/2-1) beginclk1khz<=~clk1khz;n1<=0;endelse n1<=n1+1;end//---------------------- 1Hz分频,用于计时-----------------------------always@(posedge clk or posedge clr)beginif(clr) beginclk1hz<=0;n2<=0;endelse if(n2==33868800/2-1) beginclk1hz<=~clk1hz;n2<=0;endelse n2<=n2+1;end//---------------------- 2Hz分频,用于闪烁----------------------------- always@(posedge clk or posedge clr)beginif(clr) beginclk2hz<=0;n3<=0;endelse if(n3==16934400/2-1) beginclk2hz<=~clk2hz;n3<=0;endelse n3<=n3+1;end//-------------------------模式转换-------------------------always @(posedge mode or posedge clr)beginif(clr) beginstate<=2'b00;endelse beginif(state==2'b11) beginstate<=2'b00;endelse beginstate<=state+1;endendend//-------------------------状态控制-----------------------------always @(posedge clk1hz or posedge clr)beginif(clr) beginhour<=7'b0000000;min<=7'b0000000;sec<=7'b0000000;inc_reg<=0;endelse begincase(state)state0:begin //模式0,正常计时if(sec==8'd59)beginsec<=8'd0;if(min==8'd59) beginmin<=8'd0;if(hour==8'd23) beginhour<=8'd0;endelse beginhour<=hour+1;endendelse beginmin<=min+1;endendelse beginsec<=sec+1;endendstate1:begin //模式1,设定小时时间if(inc)b egin//如果置数键按下if(!inc_reg) begin //如果置数寄存器值为0inc_reg<=1;//置数寄存器值置1if(hour==8'd23) beginhour<=8'd0;endelse beginhour<=hour+1;endendendelse begin//如果置数键未按下inc_reg<=0; //置数寄存器还是为0endendstate2:begin //模式2,设定分钟时间if(inc) beginif(!inc_reg) begininc_reg<=1;if(min==8'd59) beginmin<=8'd0;endelse beginmin<=min+1;endendendelse begininc_reg<=0;endendstate3:begin //模式3,设定秒钟时间if(inc) beginif(!inc_reg) begininc_reg<=1;if(sec==8'd59) beginsec<=8'd0;endelse beginsec<=sec+1;endendendelse begininc_reg<=0;endendendcaseendend//--------------------------------当进行时间设定时,令数码管闪烁----------------------- always @(state,clk2hz,clr) beginif(clr) beginblink[2:0]<=3'b111;endelse begincase(state)state0:blink[2:0]<=3'b111;//正常计数时,闪烁信号全为1state1:blink[2]<=clk2hz;state2:blink[1]<=clk2hz;state3:blink[0]<=clk2hz;default:blink[2:0]<=3'b111;//默认为1endcaseendend//--------------------------秒计数的十进制转BCD码---------------------------always @(sec,clr) beginif(clr) beginqsh[3:0]<=4'b0000;qsl[3:0]<=4'b0000;endelse begincase(sec[7:0])8'd0:begin qsh[3:0]<='b0000;qsl[3:0]<='b0000; end 8'd1:begin qsh[3:0]<='b0000;qsl[3:0]<='b0001; end 8'd2:begin qsh[3:0]<='b0000;qsl[3:0]<='b0010; end 8'd3:begin qsh[3:0]<='b0000;qsl[3:0]<='b0011; end 8'd4:begin qsh[3:0]<='b0000;qsl[3:0]<='b0100; end 8'd5:begin qsh[3:0]<='b0000;qsl[3:0]<='b0101; end 8'd6:begin qsh[3:0]<='b0000;qsl[3:0]<='b0110; end 8'd7:begin qsh[3:0]<='b0000;qsl[3:0]<='b0111; end 8'd8:begin qsh[3:0]<='b0000;qsl[3:0]<='b1000; end 8'd9:begin qsh[3:0]<='b0000;qsl[3:0]<='b1001; end 8'd10:begin qsh[3:0]<='b0001;qsl[3:0]<='b0000; end 8'd11:begin qsh[3:0]<='b0001;qsl[3:0]<='b0001; end 8'd12:begin qsh[3:0]<='b0001;qsl[3:0]<='b0010; end 8'd13:begin qsh[3:0]<='b0001;qsl[3:0]<='b0011; end 8'd14:begin qsh[3:0]<='b0001;qsl[3:0]<='b0100; end 8'd15:begin qsh[3:0]<='b0001;qsl[3:0]<='b0101; end 8'd16:begin qsh[3:0]<='b0001;qsl[3:0]<='b0110; end 8'd17:begin qsh[3:0]<='b0001;qsl[3:0]<='b0111; end 8'd18:begin qsh[3:0]<='b0001;qsl[3:0]<='b1000; end 8'd19:begin qsh[3:0]<='b0001;qsl[3:0]<='b1001; end 8'd20:begin qsh[3:0]<='b0010;qsl[3:0]<='b0000; end 8'd21:begin qsh[3:0]<='b0010;qsl[3:0]<='b0001; end 8'd22:begin qsh[3:0]<='b0010;qsl[3:0]<='b0010; end 8'd23:begin qsh[3:0]<='b0010;qsl[3:0]<='b0011; end 8'd24:begin qsh[3:0]<='b0010;qsl[3:0]<='b0100; end 8'd25:begin qsh[3:0]<='b0010;qsl[3:0]<='b0101; end 8'd26:begin qsh[3:0]<='b0010;qsl[3:0]<='b0110; end 8'd27:begin qsh[3:0]<='b0010;qsl[3:0]<='b0111; end 8'd28:begin qsh[3:0]<='b0010;qsl[3:0]<='b1000; end 8'd29:begin qsh[3:0]<='b0010;qsl[3:0]<='b1001; end 8'd30:begin qsh[3:0]<='b0011;qsl[3:0]<='b0000; end 8'd31:begin qsh[3:0]<='b0011;qsl[3:0]<='b0001; end 8'd32:begin qsh[3:0]<='b0011;qsl[3:0]<='b0010; end 8'd33:begin qsh[3:0]<='b0011;qsl[3:0]<='b0011; end 8'd34:begin qsh[3:0]<='b0011;qsl[3:0]<='b0100; end 8'd35:begin qsh[3:0]<='b0011;qsl[3:0]<='b0101; end 8'd36:begin qsh[3:0]<='b0011;qsl[3:0]<='b0110; end 8'd37:begin qsh[3:0]<='b0011;qsl[3:0]<='b0111; end 8'd38:begin qsh[3:0]<='b0011;qsl[3:0]<='b1000; end 8'd39:begin qsh[3:0]<='b0011;qsl[3:0]<='b1001; end 8'd40:begin qsh[3:0]<='b0100;qsl[3:0]<='b0000; end 8'd41:begin qsh[3:0]<='b0100;qsl[3:0]<='b0001; end 8'd42:begin qsh[3:0]<='b0100;qsl[3:0]<='b0010; end8'd44:begin qsh[3:0]<='b0100;qsl[3:0]<='b0100; end8'd45:begin qsh[3:0]<='b0100;qsl[3:0]<='b0101; end8'd46:begin qsh[3:0]<='b0100;qsl[3:0]<='b0110; end8'd47:begin qsh[3:0]<='b0100;qsl[3:0]<='b0111; end8'd48:begin qsh[3:0]<='b0100;qsl[3:0]<='b1000; end8'd49:begin qsh[3:0]<='b0100;qsl[3:0]<='b1001; end8'd50:begin qsh[3:0]<='b0101;qsl[3:0]<='b0000; end8'd51:begin qsh[3:0]<='b0101;qsl[3:0]<='b0001; end8'd52:begin qsh[3:0]<='b0101;qsl[3:0]<='b0010; end8'd53:begin qsh[3:0]<='b0101;qsl[3:0]<='b0011; end8'd54:begin qsh[3:0]<='b0101;qsl[3:0]<='b0100; end8'd55:begin qsh[3:0]<='b0101;qsl[3:0]<='b0101; end8'd56:begin qsh[3:0]<='b0101;qsl[3:0]<='b0110; end8'd57:begin qsh[3:0]<='b0101;qsl[3:0]<='b0111; end8'd58:begin qsh[3:0]<='b0101;qsl[3:0]<='b1000; end8'd59:begin qsh[3:0]<='b0101;qsl[3:0]<='b1001; enddefault: begin qsh[3:0]<=4'b0000;qsl[3:0]<='b0; endendcaseendend//---------------------------分计数的十进制转BCD码-------------------- always @(min,clr)beginif(clr) beginqmh[3:0]<='b0000;qml[3:0]<='b0000;endelse begincase(min[7:0])8'd0:begin qmh[3:0]<='b0000;qml[3:0]<='b0000; end8'd1:begin qmh[3:0]<='b0000;qml[3:0]<='b0001; end8'd2:begin qmh[3:0]<='b0000;qml[3:0]<='b0010; end8'd3:begin qmh[3:0]<='b0000;qml[3:0]<='b0011; end8'd4:begin qmh[3:0]<='b0000;qml[3:0]<='b0100; end8'd5:begin qmh[3:0]<='b0000;qml[3:0]<='b0101; end8'd6:begin qmh[3:0]<='b0000;qml[3:0]<='b0110; end8'd7:begin qmh[3:0]<='b0000;qml[3:0]<='b0111; end8'd8:begin qmh[3:0]<='b0000;qml[3:0]<='b1000; end8'd9:begin qmh[3:0]<='b0000;qml[3:0]<='b1001; end8'd10:begin qmh[3:0]<='b0001;qml[3:0]<='b0000; end8'd11:begin qmh[3:0]<='b0001;qml[3:0]<='b0001; end8'd12:begin qmh[3:0]<='b0001;qml[3:0]<='b0010; end8'd13:begin qmh[3:0]<='b0001;qml[3:0]<='b0011; end8'd15:begin qmh[3:0]<='b0001;qml[3:0]<='b0101; end 8'd16:begin qmh[3:0]<='b0001;qml[3:0]<='b0110; end 8'd17:begin qmh[3:0]<='b0001;qml[3:0]<='b0111; end 8'd18:begin qmh[3:0]<='b0001;qml[3:0]<='b1000; end 8'd19:begin qmh[3:0]<='b0001;qml[3:0]<='b1001; end 8'd20:begin qmh[3:0]<='b0010;qml[3:0]<='b0000; end 8'd21:begin qmh[3:0]<='b0010;qml[3:0]<='b0001; end 8'd22:begin qmh[3:0]<='b0010;qml[3:0]<='b0010; end 8'd23:begin qmh[3:0]<='b0010;qml[3:0]<='b0011; end 8'd24:begin qmh[3:0]<='b0010;qml[3:0]<='b0100; end 8'd25:begin qmh[3:0]<='b0010;qml[3:0]<='b0101; end 8'd26:begin qmh[3:0]<='b0010;qml[3:0]<='b0110; end 8'd27:begin qmh[3:0]<='b0010;qml[3:0]<='b0111; end 8'd28:begin qmh[3:0]<='b0010;qml[3:0]<='b1000; end 8'd29:begin qmh[3:0]<='b0010;qml[3:0]<='b1001; end 8'd30:begin qmh[3:0]<='b0011;qml[3:0]<='b0000; end 8'd31:begin qmh[3:0]<='b0011;qml[3:0]<='b0001; end 8'd32:begin qmh[3:0]<='b0011;qml[3:0]<='b0010; end 8'd33:begin qmh[3:0]<='b0011;qml[3:0]<='b0011; end 8'd34:begin qmh[3:0]<='b0011;qml[3:0]<='b0100; end 8'd35:begin qmh[3:0]<='b0011;qml[3:0]<='b0101; end 8'd36:begin qmh[3:0]<='b0011;qml[3:0]<='b0110; end 8'd37:begin qmh[3:0]<='b0011;qml[3:0]<='b0111; end 8'd38:begin qmh[3:0]<='b0011;qml[3:0]<='b1000; end 8'd39:begin qmh[3:0]<='b0011;qml[3:0]<='b1001; end 8'd40:begin qmh[3:0]<='b0100;qml[3:0]<='b0000; end 8'd41:begin qmh[3:0]<='b0100;qml[3:0]<='b0001; end 8'd42:begin qmh[3:0]<='b0100;qml[3:0]<='b0010; end 8'd43:begin qmh[3:0]<='b0100;qml[3:0]<='b0011; end 8'd44:begin qmh[3:0]<='b0100;qml[3:0]<='b0100; end 8'd45:begin qmh[3:0]<='b0100;qml[3:0]<='b0101; end 8'd46:begin qmh[3:0]<='b0100;qml[3:0]<='b0110; end 8'd47:begin qmh[3:0]<='b0100;qml[3:0]<='b0111; end 8'd48:begin qmh[3:0]<='b0100;qml[3:0]<='b1000; end 8'd49:begin qmh[3:0]<='b0100;qml[3:0]<='b1001; end 8'd50:begin qmh[3:0]<='b0101;qml[3:0]<='b0000; end 8'd51:begin qmh[3:0]<='b0101;qml[3:0]<='b0001; end 8'd52:begin qmh[3:0]<='b0101;qml[3:0]<='b0010; end 8'd53:begin qmh[3:0]<='b0101;qml[3:0]<='b0011; end 8'd54:begin qmh[3:0]<='b0101;qml[3:0]<='b0100; end 8'd55:begin qmh[3:0]<='b0101;qml[3:0]<='b0101; end 8'd56:begin qmh[3:0]<='b0101;qml[3:0]<='b0110; end 8'd57:begin qmh[3:0]<='b0101;qml[3:0]<='b0111; end8'd59:begin qmh[3:0]<='b0101;qml[3:0]<='b1001; enddefault:begin qmh[3:0]<='b0;qml[3:0]<='b0; endendcaseendend//----------------------------小时计数的十进制转BCD码------------------------ always @(hour,clr)beginif(clr) beginqhh[3:0]<='b0000;qhl[3:0]<='b0000;endelse begincase(hour)8'd0:begin qhh[3:0]<='b0000;qhl[3:0]<='b0000; end8'd1:begin qhh[3:0]<='b0000;qhl[3:0]<='b0001; end8'd2:begin qhh[3:0]<='b0000;qhl[3:0]<='b0010; end8'd3:begin qhh[3:0]<='b0000;qhl[3:0]<='b0011; end8'd4:begin qhh[3:0]<='b0000;qhl[3:0]<='b0100; end8'd5:begin qhh[3:0]<='b0000;qhl[3:0]<='b0101; end8'd6:begin qhh[3:0]<='b0000;qhl[3:0]<='b0110; end8'd7:begin qhh[3:0]<='b0000;qhl[3:0]<='b0111; end8'd8:begin qhh[3:0]<='b0000;qhl[3:0]<='b1000; end8'd9:begin qhh[3:0]<='b0000;qhl[3:0]<='b1001; end8'd10:begin qhh[3:0]<='b0001;qhl[3:0]<='b0000; end8'd11:begin qhh[3:0]<='b0001;qhl[3:0]<='b0001; end8'd12:begin qhh[3:0]<='b0001;qhl[3:0]<='b0010; end8'd13:begin qhh[3:0]<='b0001;qhl[3:0]<='b0011; end8'd14:begin qhh[3:0]<='b0001;qhl[3:0]<='b0100; end8'd15:begin qhh[3:0]<='b0001;qhl[3:0]<='b0101; end8'd16:begin qhh[3:0]<='b0001;qhl[3:0]<='b0110; end8'd17:begin qhh[3:0]<='b0001;qhl[3:0]<='b0111; end8'd18:begin qhh[3:0]<='b0001;qhl[3:0]<='b1000; end8'd19:begin qhh[3:0]<='b0001;qhl[3:0]<='b1001; end8'd20:begin qhh[3:0]<='b0010;qhl[3:0]<='b0000; end8'd21:begin qhh[3:0]<='b0010;qhl[3:0]<='b0001; end8'd22:begin qhh[3:0]<='b0010;qhl[3:0]<='b0010; end8'd23:begin qhh[3:0]<='b0010;qhl[3:0]<='b0011; enddefault:begin qhh[3:0]<='b0;qhl[3:0]<='b0; endendcaseendend//------------------------------数码管动态扫描-------------------------------------always @(posedge clk1khz or posedge clr) beginif(clr) begincnt<=3'b000;scan<=6'b111111;data<=4'b0000;endelse if(clk1khz) beginif(cnt==3'b101) cnt<=3'b000;else cnt<=cnt+1;case(cnt)3'b000:begin data[3:0]<=qsl[3:0];scan[5:0]<=6'b000001&{6{blink[0]}}; end3'b001:begin data[3:0]<=qsh[3:0];scan[5:0]<=6'b000010&{6{blink[0]}}; end3'b010:begin data[3:0]<=qml[3:0];scan[5:0]<=6'b000100&{6{blink[1]}}; end3'b011:begin data[3:0]<=qmh[3:0];scan[5:0]<=6'b001000&{6{blink[1]}}; end3'b100:begin data[3:0]<=qhl[3:0];scan[5:0]<=6'b010000&{6{blink[2]}}; end3'b101:begin data[3:0]<=qhh[3:0];scan[5:0]<=6'b100000&{6{blink[2]}}; endendcaseendend//-----------------------------------7段译码----------------------------------------always @(data)begincase(data[3:0])4'b0000:seg7[7:0]=8'b00111111; //04'b0001:seg7[7:0]=8'b00000110; //14'b0010:seg7[7:0]=8'b01011011; //24'b0011:seg7[7:0]=8'b01001111; //34'b0100:seg7[7:0]=8'b01100110; //44'b0101:seg7[7:0]=8'b01101101; //54'b0110:seg7[7:0]=8'b01111101; //64'b0111:seg7[7:0]=8'b00000111; //74'b1000:seg7[7:0]=8'b01111111; //84'b1001:seg7[7:0]=8'b01101111; //9default:seg7[7:0]=8'b00111111; //0endcaseendendmodule(2)按键消抖模块module IP_ButtonDebounce( clk,rst,BTN0,BTN_DEB );input clk;input rst;input BTN0;output BTN_DEB;//分频得200HZ,5ms时钟wire clk_169344;IP_1Hz #(169344) U1(.clk(clk),.rst(rst),.clk_N(clk_169344));reg BTN_r,BTN_rr,BTN_rrr;always@(posedge rst,posedge clk_169344 ) beginif(rst) beginBTN_rrr<=1'b1;BTN_rr<=1'b1;BTN_r<=1'b1;endelse beginBTN_rrr<=BTN_rr;BTN_rr<=BTN_r;BTN_r<=BTN0;endendassign BTN_DEB=BTN_r&BTN_rr&BTN_rrr;endmodule(3)分频器模块module IP_1Hz(clk,rst,clk_N); //clk=33.8688MHz,N分频模块input clk;input rst;output reg clk_N;parameter N=4;integer count;always@(posedge clk or posedge rst)beginif(rst) beginclk_N<=0;count<=0;endelse if(count==N/2-1) beginclk_N<= ~clk_N;count<=0;end。
Verilog--数字钟设计代码

数字钟一、简介此数字钟为时分秒可调,带有闹钟设置。
各引脚功能入下:clk: 输入时钟信号,为50mhz;(clk1k:产生闹铃音、报时音的时钟信号,)mode:功能控制信号;为0:计时功能;为1:闹钟功能;为2:手动校时功能;turn:接按键,在手动校时功能时,选择是调整小时,还是分钟;若长时间按住该键,还可使秒信号清零,用于精确调时;change:接按键,手动调整时,每按一次,计数器加1;如果长按,则连续快速加1,用于快速调时和定时;seg:此信号分别输出显示数据;采用BCD码计数,分别驱动6个数码管显示时间;scan:数码管位选择信号输出alert:输出到扬声器的信号,用于产生闹铃音和报时音;闹铃音为持续20秒的急促的“嘀嘀嘀”音,若按住“change”键,则可屏蔽该音;整点报时音为“嘀嘀嘀嘀—嘟”四短一长音;LD_alert:接发光二极管,指示是否设置了闹钟功能;LD_hour:接发光二极管,指示当前调整的是小时信号;LD_min:接发光二极管,指示当前调整的是分钟信号。
二、程序如下moduleshuzizhong(clk,mode,change,turn,alert,seg,scan,LD_alert,LD_hour,LD_min);input clk,mode,change,turn;output alert,LD_alert,LD_hour,LD_min;output[7:0] scan,seg;reg[7:0] scan,seg;reg[7:0] hour,min,sec,hour1,min1,sec1,ahour,amin;reg[1:0] m,fm,num1,num2,num3,num4;reg[1:0] loop1,loop2,loop3,loop4,sound;reg LD_hour,LD_min;reg clk1hz,clk4hz,clk2hz,clk1khz,minclk,hclk;reg alert1,alert2,ear;reg count1,count2,counta,countb;reg [3:0] data;reg [2:0] cnt8;reg [14:0] count3;reg [6:0] count4;wire ct1,ct2,cta,ctb,m_clk,h_clk;//-------------------1khz, 2hz--,1hz------------------------------------ always @(posedge clk)beginif(count3=='d25000)begin clk1khz<=~clk1khz;count3<=0;endelsebegin count3<=count3+1'b1;endendalways @(posedge clk1khz) //4hzbeginif(count4=='d125)begin clk4hz<=~clk4hz;count4<=0;endelsebegin count4<=count4+1'b1;endendalways @(posedge clk4hz) //2hzbeginclk2hz<=~clk2hz;endalways @(posedge clk2hz) //1hzbeginclk1hz<=~clk1hz;end//-----------------------------------------------------------always @(posedge clk4hz)beginif(sound==3)begin sound<=0; ear<=1;endelsebegin sound<=sound+1'b1; ear<=0;endendalways @(negedge mode)beginif(m==2) m<=0;else m<=m+1'b1;endalways @(negedge turn)beginfm<=~fm;end//----------------------------------------------------------------alwaysbegincase(m)2: begin if(fm)begin count1<=change; {LD_min,LD_hour}<=2; endelsebegin counta<=change; {LD_min,LD_hour}<=1; end{count2,countb}<=2'b11;end1: begin if(fm)begin count2<=change; {LD_min,LD_hour}<=2; endelse begin countb<=change; {LD_min,LD_hour}<=1; end{count1,counta}<=2'b11;enddefault: {count1,count2,counta,countb,LD_min,LD_hour}<=6'b111111;endcaseendalways @(negedge clk4hz)beginif(!count2)beginif(loop1==3) num1<=1;elsebegin loop1<=loop1+1'b1; num1<=0;endendelsebegin loop1<=0; num1<=0;endendalways @(negedge clk4hz)beginif(!countb)beginif(loop2==3) num2<=1;elsebegin loop2<=loop2+1'b1; num2<=0;endendelsebegin loop2<=0; num2<=0;endendalways @(negedge clk4hz)beginif(!count1)beginif(loop3==3) num3<=1;elsebegin loop3<=loop3+1'b1; num3<=0;endendelsebegin loop3<=0; num3<=0;endendalways @(negedge clk4hz)beginif(!counta)beginif(loop4==3) num4<=1;elsebegin loop4<=loop4+1'b1; num4<=0;endendelsebegin loop4<=0; num4<=0;endendassign ct1=(num3&clk)|(!num3&m_clk);assign ct2=(num1&clk)|(!num1&(!count2));assign cta=(num4&clk)|(!num4&h_clk);assign ctb=(num2&clk)|(!num2&(!countb));//-----------------------------------------------------------------------------always @(posedge clk1hz)beginif(!(sec1^8'h59)|(!turn)&(!m))begin sec1<=0;if(!((!turn)&(!m)))minclk<=1;endelsebeginif(sec1[3:0]==4'b1001)begin sec1[3:0]<=4'b0000; sec1[7:4]<=sec1[7:4]+1'b1;endelse sec1[3:0]<=sec1[3:0]+1'b1; minclk<=0;endendassign m_clk=minclk||(!count1);always @(posedge ct1)beginif(min1==8'h59)begin min1<=0; hclk<=1;endelsebeginif(min1[3:0]==9)begin min1[3:0]<=0; min1[7:4]<=min1[7:4]+1'b1;endelse min1[3:0]<=min1[3:0]+1'b1; hclk<=0;endendassign h_clk=hclk||(!counta);always @(posedge cta) //Сʱ¼ÆÊ±ºÍСʱµ÷Õû½ø³Ìif(hour1==8'h23) hour1<=0;elseif(hour1[3:0]==9)begin hour1[7:4]<=hour1[7:4]+1'b1; hour1[3:0]<=0;endelse hour1[3:0]<=hour1[3:0]+1'b1;always @(posedge ct2)if(amin==8'h59) amin<=0;elseif(amin[3:0]==9)begin amin[3:0]<=0; amin[7:4]<=amin[7:4]+1'b1;endelse amin[3:0]<=amin[3:0]+1'b1;always @(posedge ctb)if(ahour==8'h23) ahour<=0;else if(ahour[3:0]==9)begin ahour[3:0]<=0; ahour[7:4]<=ahour[7:4]+1'b1;endelse ahour[3:0]<=ahour[3:0]+1'b1;//---------------------------------------------------------------------------alwaysif((min1==amin)&&(hour1==ahour)&&(amin|ahour)&&(change)) if(sec1<8'h20) alert1<=1;else alert1<=0;else alert1<=0;alwaysbegincase(m)3'b00: begin hour<=hour1; min<=min1; sec<=sec1; end3'b01: begin hour<=ahour; min<=amin; sec<=8'bx; end3'b10: begin hour<=hour1; min<=min1; sec<=8'bx; enddefault : begin hour<=8'bx; min<=8'bx; sec<=8'bx; endendcaseendassign LD_alert=(ahour|amin)?1'b1:1'b0;assign alert=((alert1)?clk1khz&clk4hz:1'b0)|alert2;alwaysbeginif((min1==8'h59)&&(sec1>8'h54)||(!(min1|sec1)))if(sec1>8'h54) alert2<=ear&clk1khz;else alert2<=!ear&clk1khz;else alert2<=0;end//-------------------------------------------------------------always @(posedge clk1khz)begincnt8<=cnt8+1'b1;endalwaysbegincase(cnt8[2:0])3'b000 : begin scan<=8'b01111111;data[3:0]<=hour[7:4];end3'b001 : begin scan<=8'b10111111;data[3:0]<=hour[3:0];end3'b010 : begin scan<=8'b11011111;data[3:0]<=min[7:4];end3'b011 : begin scan<=8'b11101111;data[3:0]<=min[3:0];end3'b100 : begin scan<=8'b11110111;data[3:0]<=sec[7:4];end3'b101 : begin scan<=8'b11111011;data[3:0]<=sec[3:0];end//3'b110 : begin scan<='b11111101;data[3:0]<=4'b1011;end//3'b111 : begin scan<='b11111110;data[3:0]<=4'b1010;enddefault : begin scan<=8'b11111111;data[3:0]<=4'bx;endendcasecase(data[3:0])4'b0000 : seg[7:0]<=8'b11000000;4'b0001 : seg[7:0]<=8'b11111001;4'b0010 : seg[7:0]<=8'b10100100;4'b0011 : seg[7:0]<=8'b10110000;4'b0100 : seg[7:0]<=8'b10011001;4'b0101 : seg[7:0]<=8'b10010010;4'b0110 : seg[7:0]<=8'b10000010;4'b0111 : seg[7:0]<=8'b11111000;4'b1000 : seg[7:0]<=8'b10000000;4'b1001 : seg[7:0]<=8'b10010000;4'b1010 : seg[7:0]<=8'b10001000;4'b1011 : seg[7:0]<=8'b10000011;4'b1100 : seg[7:0]<=8'b11000110;4'b1101 : seg[7:0]<=8'b10100001;4'b1110 : seg[7:0]<=8'b10000110;4'b1111 : seg[7:0]<=8'b10001110;default : seg[7:0]<=8'bx;endcaseendendmodule三、框图。
数字时钟代码

数字时钟代码1. 介绍数字时钟是一种常见的显示时间的装置,它通过数字显示屏显示当前的小时和分钟。
本文档将介绍如何编写一个简单的数字时钟代码。
2. 代码实现以下是一个基本的数字时钟代码实现示例:import timewhile True:current_time = time.localtime()hour = str(current_time.tm_hour).zfill(2)minute = str(current_time.tm_min).zfill(2)second = str(current_time.tm_sec).zfill(2)clock_display = f"{hour}:{minute}:{second}"print(clock_display, end="\r")time.sleep(1)代码说明:- `time.localtime()` 函数返回当前时间的结构化对象,包括小时、分钟和秒等信息。
- `str(current_time.tm_hour).zfill(2)` 将小时转换为字符串,并使用 `zfill()` 方法填充到两位数。
- `str(current_time.tm_min).zfill(2)` 和`str(current_time.tm_sec).zfill(2)` 同理处理分钟和秒。
- 使用 f-string 格式化字符串 `clock_display`,将小时、分钟和秒显示为 `` 的形式。
- `print(clock_display, end="\r")` 使用 `\r` 实现覆盖打印,使得时钟在同一行连续显示。
- `time.sleep(1)` 让程序每隔一秒更新一次时间。
请注意,上述代码需要在支持 Python 的环境中运行。
3. 结束语通过以上的代码实现,我们可以编写一个简单的数字时钟。
简单的数字时钟(verilog设计)

设计目标与要求
设计一个简单的数字 时钟,能够显示时、 分、秒。
时钟应具有可靠性、 稳定性和可扩展性。
要求使用Verilog语 言实现,并能够在 FPGA或ASIC上实现。
设计思路及流程
• 设计思路:采用模块化设计方法,将数字时钟划分为不同的模 块,如计数器模块、显示模块等。每个模块负责实现特定的功 能,并通过接口与其他模块进行通信。
设计思路及流程
设计流程 1. 确定设计需求和目标。 2. 制定设计方案和计划。
设计思路及流程
3. 编写Verilog代码,实现各个模块的功能。 5. 根据测试结果进行调试和优化。
未来改进方向探讨
提高计时精度
通过改进算法或采用更高 性能的硬件平台,提高数
字时钟的计时精度。
降低资源占用
优化代码结构,减少不 必要的资源占用,提高 时钟系统的运行效率。
增加实用功能
拓展应用领域
考虑增加闹钟、定时器 等实用功能,使数字时 钟更加符合用户需求。
探索将数字时钟应用于 更多领域,如智能家居、
数据类型与运算符
Verilog中的数据类型包括
整型、实型、时间型、数组、结构体等。
Verilog中的运算符包括
算术运算符、关系运算符、逻辑运算符、位运算符等。
顺序语句与并行语句
Verilog中的顺序语句包括
赋值语句、条件语句、循环语句等,用于描述电路的时序行为。
Verilog中的并行语句包括
模块实例化、连续赋值语句、门级电路描述等,用于描述电路的并行行为。
数字时钟代码

#include<graphics.h> /* 引入graphic.h */#include<math.h> /* 引入math.h */#include<dos.h> /* 引入dos.h */#define pi 3.1415926 /*定义pi=3.14159*/#define X(a,b,c) x=a*cos(b*c*pi/180-pi/2)+300;#define Y(a,b,c) y=a*sin(b*c*pi/180-pi/2)+240;#define d(a,b,c) X(a,b,c);Y(a,b,c);line(300,240,x,y) /*定义……*/ void init() /*初始化程序*/{int i,l,x1,x2,y1,y2; /*定义……*/setbkcolor(1); /*设置颜色*/circle(300,240,200); /*作园*/circle(300,240,205);circle(300,240,5);for(i=0;i<60;i++) /*循环(算时间)*/{if(i%5==0) l=15;else l=5;x1=200*cos(i*6*pi/180)+300;y1=200*sin(i*6*pi/180)+240;x2=(200-l)*cos(i*6*pi/180)+300;y2=(200-l)*sin(i*6*pi/180)+240;line(x1,y1,x2,y2);}}main(){int x,y;int gd=VGA,gm=2;unsigned char h,m,s; /*定义*/struct time t[1];initgraph(&gd,&gm,"d:\\tc");init();setwritemode(1);gettime(t);h=t[0].ti_hour;m=t[0].ti_min;s=t[0].ti_sec; /*定义时分秒*/setcolor(7); /*设置颜色*/d(150,h,30);setcolor(14);d(170,m,6);setcolor(4);d(190,s,6);while(!kbhit()) /*获取键盘相应*/{while(t[0].ti_sec==s)gettime(t); /*C语言中得到时间的函数*/sound(400); /*计算时间……*/delay(70);sound(200);delay(30);nosound();setcolor(4);d(190,s,6);s=t[0].ti_sec;d(190,s,6);if (t[0].ti_min!=m){setcolor(14);d(170,m,6);m=t[0].ti_min;d(170,m,6);}if (t[0].ti_hour!=h){ setcolor(7);d(150,h,30);h=t[0].ti_hour;d(150,h,30);sound(1000);delay(240);nosound();delay(140);sound(2000);delay(240);nosound();}}getch(); /*设置空格后退出*/closegraph();}具体的。
Java数字时钟(简单的桌面应用)

import java.util.*;/*****该程序是一个简单的数字时钟,每变化一秒,颜色随机变色,可以系统托盘,最大的特点是可以和桌面形成一体,也就是容纳这个数字时钟的窗体可以看成是透明的***********/import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.awt.image.BufferedImage;public class app509 extends JFrame{static int i=-1,geli=-1;/*这一部分是系统托盘图标的文件路径,可以自己设置,只要路径正确即可,可以是gif,jpg,png格式*/static Image image=Toolkit.getDefaultToolkit().getImage("D:1\\3.png");static SystemTray systemTray=SystemTray.getSystemTray();static PopupMenu pop01=new PopupMenu();static MenuItem MI01=new MenuItem("打开主程序");static MenuItem MI02=new MenuItem("退出程序");static MenuItem MI03=new MenuItem("隐藏");static TrayIcon trayIcon=new TrayIcon(image,"这是程序图标",pop01);static JLabel beijingtu=new JLabel();static JLabel xingqi=new JLabel(" ",JLabel.CENTER);static JLabel jlabel02=new JLabel("年",JLabel.CENTER);static JLabel jlabel03=new JLabel("月",JLabel.CENTER);static JLabel jlabel04=new JLabel("日",JLabel.CENTER);static JLabel jlabel05=new JLabel("分",JLabel.CENTER);static JLabel jlabel10=new JLabel("时",JLabel.CENTER);static JLabel jlabel12=new JLabel("分",JLabel.CENTER);static JLabel jlabel13=new JLabel("秒",JLabel.CENTER);static JLabel jlabel06=new JLabel(" ",JLabel.CENTER);static JLabel jlabel07=new JLabel(" ",JLabel.CENTER);static JLabel jlabel08=new JLabel(" ",JLabel.CENTER);static JLabel jlabel09=new JLabel(" ",JLabel.CENTER);static JLabel jlabel11=new JLabel(" ",JLabel.CENTER);static JLabel jlabel=new JLabel(" ",JLabel.CENTER);static JLabel jbData[]={jlabel13,jlabel02,jlabel03,jlabel04,jlabel10,jlabel12};static JLabel jbData02[]={jlabel,jlabel07,jlabel08,jlabel09,jlabel11,jlabel06};static int mill=0;static int minute=0;static int hour=0;static int day=0;static int month=0;static int year=0;static int week;static int zuobiaoX,zuobiaoY;static JFrame JF01=new JFrame();static JDialog JF=new JDialog(JF01," ");static Robot robot;static BufferedImage image1;static Rectangle rec;static class mouseListener extends MouseAdapter{public void mouseClicked(MouseEvent a){if(a.getSource()==trayIcon){if(a.getClickCount()==2){i++;if(i%2==1){geli++;if(geli%2==1){image1=robot.createScreenCapture(rec);beijingtu.setIcon(new ImageIcon(image1));JF.setBounds(0,0,120,560);JF.setVisible(true);}}else{JF.setBounds(0,0,400,1);}}}}public void mouseEntered(MouseEvent a){if(a.getSource()==JF){image1=robot.createScreenCapture(rec);beijingtu.setIcon(new ImageIcon(image1));JF.setBounds(0,0,120,560);JF.setVisible(true);}}public void mouseExited(MouseEvent a){if(a.getSource()==JF){JF.setBounds(0,0,400,1);}}}public static void main(String args[]) throws Exception{trayIcon.addMouseListener(new mouseListener());rec=new Rectangle(0,0,(int)Toolkit.getDefaultToolkit().getScreenSize().getWidth(),(int)Toolkit.getDefaultToolkit().getScreenSize().getHeight());try{robot=new Robot(); }catch(Exception b){}image1=robot.createScreenCapture(rec);beijingtu.setIcon(new ImageIcon(image1));MI01.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent a){Image1=robot.createScreenCapture(rec);beijingtu.setIcon(new ImageIcon(image1));JF.setBounds(0,0,120,560);JF.setVisible(true);}});MI03.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent a){JF.setBounds(0,0,400,1);}});MI02.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent a){System.exit(0);}});try{pop01.add(MI01);pop01.add(MI03);pop01.add(MI02);systemTray.add(trayIcon);trayIcon.setImageAutoSize(true);trayIcon.addMouseListener(new mouseListener());}catch(Exception a){} JF.setResizable(false) ;JF.addMouseListener(new mouseListener());JF.setUndecorated(true);beijingtu.setBounds(0,0,(int)Toolkit.getDefaultToolkit().getScreenSize().getWidth(),(int)Toolkit.getDefaultToolkit().getScreenSize().getHeight());JF.setLayout(null);JF.setBounds(0,0,120,560);JF.setVisible(true);jlabel02.setBounds(91,94,24,25);jlabel06.setBounds(15,94,64,28);jlabel03.setBounds(91,175,24,25);jlabel07.setBounds(2,125,86,75);jlabel04.setBounds(91,261,24,25);jlabel08.setBounds(2,210,86,75);jlabel10.setBounds(91,346,24,25);jlabel09.setBounds(2,296,86,75);jlabel11.setBounds(2,382,86,75);jlabel12.setBounds(91,433,24,25);jlabel13.setBounds(91,520,24,25);jlabel.setBounds(2,468,86,75);xingqi.setBounds(2,30,118,62);JF.add(xingqi);xingqi.setHorizontalTextPosition(JLabel.CENTER);xingqi.setFont(new Font("微软雅黑",Font.BOLD,20));for(int i=0;i<jbData.length;i++){JF.add(jbData[i]);JF.add(jbData02[i]);}for(int i=0;i<jbData.length;i++){jbData[i].setFont(new Font("微软雅黑",Font.BOLD,15));jbData02[i].setFont(new Font("微软雅黑",Font.BOLD,30));}jlabel06.setFont(new Font("微软雅黑",Font.BOLD,15));for(int i=0;i<jbData.length;i++){jbData[i].setForeground(Color.blue);jbData02[i].setForeground(Color.red);}for(int i=0;i<jbData.length;i++){jbData[i].setHorizontalTextPosition(JLabel.CENTER);jbData02[i].setHorizontalTextPosition(JLabel.CENTER);}jlabel02.setHorizontalTextPosition(JLabel.RIGHT);JF.add(beijingtu);xiancheng xiancheng01=new xiancheng();xiancheng01.start();}}class xiancheng extends Thread{static GregorianCalendar date=new GregorianCalendar();app509 app=new app509();public void run(){for(int i=0;i<60;){try{sleep(1000);}catch(Exception a){}app.year=(date=new GregorianCalendar()).get(date.YEAR);app.jlabel06.setText(Integer.toString(app.year));app.month=((date=new GregorianCalendar()).get(date.MONTH)+1);app.jlabel07.setText(Integer.toString(app.month));app.day=(date=new GregorianCalendar()).get(date.DAY_OF_MONTH);app.jlabel08.setText(Integer.toString(app.day));app.week=(date=new GregorianCalendar()).get(date.DAY_OF_WEEK);app.hour=(date=new GregorianCalendar()).get(date.HOUR_OF_DAY);app.jlabel09.setText(Integer.toString(app.hour));app.minute=(date=new GregorianCalendar()).get(date.MINUTE);app.jlabel11.setText(Integer.toString(app.minute));l=(date=new GregorianCalendar()).get(date.SECOND);app.jlabel.setText(Integer.toString(l));if(app.jlabel.getText()!=" "){app.xingqi.setForeground(new Color((int)(255*Math.random()),(int)(255*Math.random()),(int)(255*Math.random())));for(int j=0;j<app.jbData.length;j++){app.jbData[j].setForeground(new Color((int)(255*Math.random()),(int)(255*Math.random()),(int)(255*Math.random())));app.jbData02[j].setForeground(new Color((int)(255*Math.random()),(int)(255*Math.random()),(int)(255*Math.random())));}} switch(app.week){case 1 : app.xingqi.setText("星期日");break;case 2 : app.xingqi.setText("星期一");break;case 3 : app.xingqi.setText("星期二");break;case 4 : app.xingqi.setText("星期三");break;case 5 : app.xingqi.setText("星期四");break;case 6 : app.xingqi.setText("星期五");break;case 7 : app.xingqi.setText("星期六");break;}System.gc();}}}/****复制以上代码进行编译即可*****/程序效果图:。
单片机课程设计实验报告+基于单片机的数字时钟+含完整实验代码

单片机课程设计报告基于单片机的数字时钟姓名:班级:学号:一、前言利用实验板上的4个LED数码管,设计带有闹铃、秒表功能的数字时钟。
功能要求:a)计时并显示(LED)。
由于实验板上只有4位数码管,可设计成显示“时分”和显示“分秒”并可切换。
b)时间调整功能。
利用4个独立按钮,实现时钟调整功能。
这4个按钮的功能为工作模式切换按钮(MODE),数字加(INC),数字减(DEC)和数字移位(SHITF)。
c)定闹功能。
利用4个独立按钮设定闹钟时间,时间到以蜂鸣器响、继电器动作作为闹铃。
d)秒表功能。
最小时间单位0.01秒。
二、硬件原理分析1.电源部分电源部份采用两种输入接口(如上图)。
a)外电源供电,采用2.1电源座,可接入电源DC5V,经单向保护D1接入开关S1。
b)USB供电,USB供电口输入电源也经D1单向保护,送到开关S1。
注:两路电源输入是并连的,因此只选择一路就可以了,以免出问题。
S1为板子工作电源开关,按下后接通电源,提供VCC给板子各功能电路。
电路采用两个滤波电容,给板子一个更加稳定的工作电源。
LED为电源的指示灯,通电后LED灯亮。
2.蜂鸣器蜂鸣器分为有源和无源两种,有源即两引脚有一个直流电源就可以长鸣,无源则需要一个1K左右的脉冲才可以蜂鸣,因此对于按键的提示音及报警蜂鸣使用有源来得方便。
有源也可以当无源使用,而无源则不能当有源使用,当然用有源蜂鸣器作音乐发声会失真厉害。
如上图:单片机P15输出高低电平经R21连接三极管B极,控制三极管的导通与截止,从而控制蜂鸣器的工作。
低电平时三极管导通,蜂鸣器得电蜂鸣,高电平时三极管截止,蜂鸣器失电关闭蜂鸣。
电路使用一个四位共阳型数码管,四个公共阳级由三极管放大电流来驱动,三极管由P10-P13控制开与关。
数码管的阴级由P0口经过电阻限流连接。
例如,要十位的数码管工作,P12输出0,使三极管Q12导通,8脚得电,当P0口相应位有输出0时,点亮相应的LED灯组合各种字符数字。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
module clock(CLK,RST,EN,S1,S2,spk,HOURH,HOURL,MINH,MINL,SECH,SECL); input CLK,RST,EN,S1,S2;
output spk;
output[3:0] HOURH,HOURL,MINH,MINL,SECH,SECL;
reg spk;
reg[3:0] SECL,SECH,MINL,MINH,HOURL,HOURH;
always @(posedge CLK or negedge RST)
if(!RST) begin
SECL<=0;SECH<=0;MINL<=0;MINH<=0;HOURL<=0;HOURH<=0; end
//系统复位
else if(EN) //EN为低电平时时钟暂停
begin
if(!S1) //调节小时
begin
if(HOURL==9) begin HOURL<=0; HOURH<=HOURH+1; end
else
begin
if(HOURH==2&&HOURL==3) begin HOURL<=0;HOURH<=0; end
else HOURL<=HOURL+1;
end
end
else if(!S2) //调节分钟
begin
if(MINL==9)
begin
MINL<=0;
if(MINH==5) MINH<=0;
else MINH<=MINH+1;
end
else MINL<=MINL+1;
end
else if(SECL==9) //时钟正常跳动状态 begin
SECL<=0;
if(SECH==5)
begin
SECH<=0;
if(MINL==9)
begin
MINL<=0;
if(MINH==5)
begin
MINH<=0;
if(HOURL==9) begin
HOURL<=0;HOURH<=HOURH+1;end
else if(HOURH==2&&HOURL==3) begin HOURL<=0; HOURH<=0;end
else HOURL<=HOURL+1;
end
else MINH<=MINH+1;
end
else MINL<=MINL+1;
end
else SECH<=SECH+1;
end
else SECL<=SECL+1;
end
else
begin
HOURH<=HOURH;
HOURL<=HOURL;
MINH<=MINH;
MINL<=MINL;
SECH<=SECH;
SECL<=SECL;
end
always @(posedge CLK) //产生报警声音模块
begin
if(MINH==5&&MINL==9&&SECH==5) begin spk<=CLK;end else if(MINH==0&&MINL==0&&SECH==0) spk<=CLK;
else spk<=0;
end
endmodule
各输入、输出信号引脚说明:
CLK:时钟信号
RST:系统复位信号,低电平有效。
时钟复位后为:00 00 00。
EN:暂停信号,低电平有效,按下该键,数字时钟暂停。
S1:调节小时信号,低电平有效。
每按下一次,小时增加一个小时。
S2:调节分钟信号,低电平有效。
每按下一次,分钟增加一个分钟。
skp:输出到扬声器,在每个小时的59分50秒到0分10秒之间将会产生报警声音。
HOURH,HOURL,MINH,MINL,SECH,SECL:分别对应小时、分钟、秒钟的十位和个位。
三、仿真结果
4全时钟时序仿真波形
3S2为低电平时分钟加一个分钟、RST为低电平时时钟复位.jpg3S2为低电平时分钟加一个分钟、RST 为低电平时时钟复位
2EN为低电平时时钟暂停、S1为低电平时时钟加一个小时
1时钟跑完24个小时后自动复位、扬声器报警。