FPGA的电子时钟显示程序Word格式.docx
- 文档编号:19590299
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:12
- 大小:17.76KB
FPGA的电子时钟显示程序Word格式.docx
《FPGA的电子时钟显示程序Word格式.docx》由会员分享,可在线阅读,更多相关《FPGA的电子时钟显示程序Word格式.docx(12页珍藏版)》请在冰豆网上搜索。
//按键值
//调用子程序,获取按键值
key_valueU1(.clk(clk),.RSTn(RSTn),.Key_in(KEY),.key_val(key_val));
//key_val返回的按键值
//秒定时器
parameterT1S=25'
d19_999_999;
//定时值
reg[24:
0]Count1;
//计数值
always
@(posedgeclkornegedgeRSTn)
begin
if(!
RSTn)
Count1<
=25'
elseif(Count1==T1S)
else
=Count1+1'
b1;
//脉冲累加
end
//计算时间
if(!
sec<
=8'
//秒计时器
elseif(Count1==T1S)//脉冲数满足T1S
begin
if(sec<
8'
d60)//0~59
begin
sec=sec+8'
d1;
//秒加1
if(sec==8'
d60)//第60秒
begin
sec=8'
if(min<
begin
min=min+8'
//分加1
if(min==8'
d60)//第60分
begin
min=8'
if(hour<
d24)//0~23
begin
hour=hour+8'
//时加1
if(hour==8'
d24)//第24时
hour=8'
end
end
end
end
end
end
//调时间,这段可以不用,直接初始化赋值
elseif(key_val==4'
d4)//key4按下
begin
if(hour<
8'
d23)
hour<
=hour+8'
//+1
else
d3)//key3按下
if(hour>
d0)
=hour-8'
//-1
d23;
d2)//key2按下
if(min>
0)
min<
=min-8'
//+1
d59;
end
d1)//key1按下
if(min<
d59)
min<
=min+8'
//-1
//调时结束
调用六位数码管显示子程序
*输入:
clk,RSTn,sec,min,hour,duan_xuan,wei_xuan
*输出:
duan_xuan,wei_xuan
*==========================================================================*/
display_LEDU2
(
.clk(clk),
.RSTn(RSTn),
.sec(sec),.min(min),.hour(hour),//input-时间参数
.duan_xuan(duan_xuan),.wei_xuan(wei_xuan)//in_out-段选位选
);
endmodule//==================================================================
电子时钟子程序
六位数码管显示时钟
Ye.FuYao2014-04-23CycioneⅡEP2C8Q208C8
//电子时钟子程序
moduledisplay_LED(clk,RSTn,sec,min,hour,duan_xuan,wei_xuan);
//时分秒
input[7:
0]sec;
0]min;
0]hour;
reg[5:
//段选码表
0]SMG[9:
0];
//10个8位的数组
initial
SMG[0]<
hc0;
SMG[1]<
hf9;
SMG[2]<
ha4;
SMG[3]<
hb0;
SMG[4]<
h99;
SMG[5]<
h92;
SMG[6]<
h82;
SMG[7]<
hf8;
SMG[8]<
h80;
SMG[9]<
h90;
end
//位选码表
0]wei[5:
//6个6位的数组
wei[0]<
=6'
b111_110;
wei[1]<
b111_101;
wei[2]<
b111_011;
wei[3]<
b110_111;
wei[4]<
b101_111;
wei[5]<
b011_111;
//======================================================
//分离数据
reg[3:
0]rsec_One;
//0~9
0]rsec_Ten;
0]rmin_One;
0]rmin_Ten;
0]rhour_One;
0]rhour_Ten;
always
begin
rsec_Ten<
=4'
rsec_One<
end
rsec_Ten<
=sec/10;
//取十位
rsec_One<
=sec%10;
//取个位
rmin_Ten<
=min/10;
rmin_One<
=min%10;
//取个位
rhour_Ten<
=hour/10;
rhour_One<
=hour%10;
//取个位
//====================================显示
//扫描定时器
parameterT4MS=17'
d59_999;
//4ms/20M*0.004=80000
reg[16:
0]Count2;
Count2<
=17'
elseif(Count2==T4MS)
=Count2+17'
//标志位
0]t=0;
//0~7
reg[31:
0]rData=0;
//暂存数据
//送数据
RSTn)//复位
t<
=4'
rData<
=32'
duan_xuan<
b1111_1111;
wei_xuan<
b111_111;
elseif(t==4'
d7)//标志清0
t<
elseif(Count2==T4MS)//等于4MS,标志位变化
begin
case(t)
4'
d5:
rData<
=rhour_Ten;
d0:
=rhour_One;
d1:
=rmin_Ten;
d2:
=rmin_One;
d3:
=rsec_Ten;
d4:
=rsec_One;
endcase
if(t<
4'
d6)//0~5次
begin
duan_xuan<
=SMG[rData];
//送段选
wei_xuan<
=wei[t];
//送位选
if(t==4'
d6)//第6次,秒闪
if(rsec_One%2)
duan_xuan<
=8'
h7f;
//送段选
wei_xuan<
=wei[1];
else
hff;
//送位选
end
=t+1'
//标志加1
endmodule
/*=====================================================================================
按键子程序
物理按键key_in按为0,松开为1
参考/archive/2010/03/13/1684999.html
Ye.FuYao2014-04-26CycioneⅡEP2C8Q208C8
*=====================================================================================*/
//按键子程序
modulekey_value(clk,RSTn,Key_in,key_val);
0]Key_in;
//读取按键
output[3:
//返回按键值
//①按下开始
0]key_samp1,key_samp1_locked;
always@(posedgeclkornegedgeRSTn)
begin
key_samp1<
b1111;
key_samp1_locked<
else
=Key_in;
//同一脉冲,现态(如按键Key_in[0]按下1110)
=key_samp1;
//同一脉冲,原态(如无按键按下1111)
//当key_samp1由1变为0时
//key_changed1由0变为1,只维持一个时钟周期,下个周期key_changed1还是0;
0]key_changed1;
//按下标志
assignkey_changed1=key_samp1_locked&
(~key_samp1);
//目的:
一有按键按下就标记一次
//②延时20ms
0]key_samp2,key_samp2_locked;
parameterT20MS=19'
d399_999;
reg[18:
0]count;
count<
=19'
elseif(key_changed1)//按键按下开始清一次0
else
=count+1'
//按键按下直到按键松开,如果没有抖动
//③再次判断
//只有当按键不变化(不抖动),且维持20ms以上时
//才将i_key采集至key_samp2
key_samp2<
elseif(count==T20MS)//20ms后,再判断
=Key_in;
key_samp2_locked<
=key_samp2;
0]key_changed2;
assignkey_changed2=key_samp2_locked&
(~key_samp2);
//注意:
这里按下为1松开为0!
!
//④每次按键稳定后,输出键值
key_val<
b0;
case(key_changed2)
4'
b0001:
key_val<
//key1按下为4'
d1
b0010:
d2;
//key2按下为4'
d2
b0100:
d3;
//key3按下为4'
d3
b1000:
d4;
//key4按下为4'
d4
default:
//没有按键按下4'
d0
endcase
endmodule//==================================================================
//一个主程序,两个子程序,结束
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FPGA 电子 时钟 显示 程序