Re: 常见单片机问题征集帖。。。汇聚于此贴,各个击破。。。
什么都不知道个 做什么哇
Re: 常见单片机问题征集帖。。。汇聚于此贴,各个击破。。。
个程序怎么看啊
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_arith.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CLOCKer IS
PORT(CLK,loadh,loadm:IN STD_LOGIC;
di1,di0:IN STD_LOGIC_VECTOR(3 downto 0);
qh1,qh0,qm1,qm0:OUT STD_LOGIC_VECTOR(6 downto 0));
END CLOCKer;
ARCHITECTURE CLKdo OF CLOCKer IS
SIGNAL iqh,iqm : STD_LOGIC_VECTOR(7 downto 0);
SIGNAL Cm:STD_LOGIC;
--将两位BCD码合并成整数的函数
Function GetTime(ds1,ds0:STD_LOGIC_VECTOR(3 downto 0)) Return STD_LOGIC_VECTOR Is
variable temp,temp1:STD_LOGIC_VECTOR(7 downto 0);
Begin
--temp:=ds1*10+ds0
temp:='0'&ds1(3 downto 0) &"000"; --*8
temp1:="000"&ds1(3 downto 0) &'0'; --*2
temp:=temp+temp1;--完成ds1*10,即ds1*8+ds1*2
temp1:="0000"&ds0;
temp:=temp+temp1;--完成temp:=ds1*10+ds0
Return temp;
End Function GetTime;
--整数到7段LED码译码函数
Function ToLed7(hORm:STD_LOGIC_VECTOR(7 downto 0);hl:std_logic) Return STD_LOGIC_VECTOR Is
variable temp:STD_LOGIC_VECTOR(6 downto 0);
Begin
if hl='1' then
case conv_integer(hOrm) is --Hi
when 0|1|2|3|4|5|6|7|8|9=> temp:="0111111";--3FH 0
when 10|11|12|13|14|15|16|17|18|19=> temp:="0000110";--06H 1
when 20|21|22|23|24|25|26|27|28|29=> temp:="1011011";--5bH 2
when 30|31|32|33|34|35|36|37|38|39=> temp:="1001111";--4FH 3
when 40|41|42|43|44|45|46|47|48|49=> temp:="1100110";--66H 4
when 50|51|52|53|54|55|56|57|58|59=> temp:="1101101";--6dH 5
when others=>null;
end case;
else
case conv_integer(hOrm) is --Lo
when 0|10|20|30|40|50 => temp:="0111111";--3FH 0
when 1|11|21|31|41|51 => temp:="0000110";--06H 1
when 2|12|22|32|42|52 => temp:="1011011";--5bH 2
when 3|13|23|33|43|53 => temp:="1001111";--4FH 3
when 4|14|24|34|44|54 => temp:="1100110";--66H 4
when 5|15|25|35|45|55 => temp:="1101101";--6dH 5
when 6|16|26|36|46|56 => temp:="1111101";--7DH 6
when 7|17|27|37|47|57 => temp:="0000111";--07H 7
when 8|18|28|38|48|58 => temp:="1111111";--7FH 8
when 9|19|29|39|49|59 => temp:="1101111";--6FH 9
when others=>null;
end case;
end if;
Return temp;
End Function ToLed7;
BEGIN
mRun: Process (loadm,clk)
Begin
If loadm='1' then
iqm<=GetTime(di1,di0);
elsif (clk'event and clk='1') then
if (iqm<59) then iqm<=iqm+1; else iqm<=(others=>'0'); End if;
end if;
if (iqm=59) then cm<='1'; else Cm<='0';end if ;
End process mRun;
hRun: Process (loadh,Cm)
Begin
If loadh='1' then
iqh<=GetTime(di1,di0);
elsif Cm'event and Cm='0' then
if iqh<23 then iqh<=iqh+1; else iqh<=(others=>'0'); end if ;
end if;
End process hRun;
dCode: Process (iqh,iqm)
Begin
qh1<=ToLed7(iqh,'1');--(others=>'0');根据iqh的值确定小时的十位7段码.
qh0<=ToLed7(iqh,'0');--(others=>'0');根据iqh的值确定小时的个位7段码.
qm1<=ToLed7(iqm,'1');--(others=>'0');根据iqm的值确定分的十位7段码.
qm0<=ToLed7(iqm,'0');--(others=>'0');根据iqm的值确定分的个位7段码.
End Process dCode;
END CLKdo ;
这是老师给的程序看了N久都看不明白,高手帮指点一下啊。老师说这是一个电子钟的程序。用Quartus II 5.0运行,
在里面加一个用65536HZ的频率作为系统的时钟,对其进行分频产生秒信号,再对秒信号进行计数,产生分、时,并显示小时和分钟的实际值(对秒的显示不作要求)。2、能预置小时和分钟的功能(即校时、校分)。怎么做啊,里面那个ToLed7,GetTime函数怎么也理解不了到底怎么回事,还when 10|11|12|13|14|15|16|17|18|19这些数字怎么出现的啊?高手能详细解释一下吗 急哦
回复:常见单片机问题征集帖。。。汇聚于此贴,各个击破。。。
when 0|1|2|3|4|5|6|7|8|9=> temp:="0111111";--3FH 0
when 10|11|12|13|14|15|16|17|18|19=> temp:="0000110";--06H 1
when 20|21|22|23|24|25|26|27|28|29=> temp:="1011011";--5bH 2
when 30|31|32|33|34|35|36|37|38|39=> temp:="1001111";--4FH 3
when 40|41|42|43|44|45|46|47|48|49=> temp:="1100110";--66H 4
when 50|51|52|53|54|55|56|57|58|59=> temp:="1101101";--6dH 5
--显示十位上的数,“|”表示或,比如第一行十位上的数全是0
when 0|10|20|30|40|50 => temp:="0111111";--3FH 0
when 1|11|21|31|41|51 => temp:="0000110";--06H 1
when 2|12|22|32|42|52 => temp:="1011011";--5bH 2
when 3|13|23|33|43|53 => temp:="1001111";--4FH 3
when 4|14|24|34|44|54 => temp:="1100110";--66H 4
when 5|15|25|35|45|55 => temp:="1101101";--6dH 5
when 6|16|26|36|46|56 => temp:="1111101";--7DH 6
when 7|17|27|37|47|57 => temp:="0000111";--07H 7
when 8|18|28|38|48|58 => temp:="1111111";--7FH 8
when 9|19|29|39|49|59 => temp:="1101111";--6FH 9
--显示个位上的数