Vhdl1602可调数字钟.doc_第1页
Vhdl1602可调数字钟.doc_第2页
Vhdl1602可调数字钟.doc_第3页
Vhdl1602可调数字钟.doc_第4页
Vhdl1602可调数字钟.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

-LCD1602数字钟-Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_arith.all;Use ieee.std_logic_unsigned.all;Entity clock isPort( rst,clk : in std_logic; rs,en,rst_out,sec_out: out std_logic; rw : out std_logic; data_out : out std_logic_vector(7 downto 0); RD,WR : IN STD_LOGIC;-读写控制 DATA_O ,CONT_O : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);-数据输出 DATA_I,CONT_I : IN STD_LOGIC_VECTOR(7 DOWNTO 0);-数据和地址输入 SCLK : OUT STD_LOGIC; IO : INOUT STD_LOGIC; IOB : OUT STD_LOGIC ; k1,k2 : IN STD_LOGIC); End clock;Architecture fwm of clock is TYPE states IS(hold,func_set,dis_on,mode_set,write_char1,write_char2,write_char3,write_char4,write_char5,write_char6, write_char7,write_char8,write_char9,write_char10,return_home,toggle_e,rst1,rst2,rst3,dis_off,dis_clr); SIGNAL state,n_state:states; SIGNAL s0,s1,m0,m1,h0,h1,t: std_logic_vector(3 downto 0); SIGNAL clk_400Hz,clk_10Hz,clk_40Hz: std_logic; SIGNAL DATA_TEMP : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL CONT_TEMP : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL SECOND : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL MINUTE : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL HOUR : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL DAY : STD_LOGIC_VECTOR(7 DOWNTO 0); CONSTANT PROCECT : STD_LOGIC_VECTOR:=10001110;-保护位 CONSTANT SECOND_WRITE: STD_LOGIC_VECTOR:=10000000;CONSTANT SECOND_READ : STD_LOGIC_VECTOR:=10000001;CONSTANT MINUTE_WRITE: STD_LOGIC_VECTOR:=10000010;CONSTANT MINUTE_READ : STD_LOGIC_VECTOR:=10000011;CONSTANT HOUR_WRITE : STD_LOGIC_VECTOR:=10000100;CONSTANT HOUR_READ : STD_LOGIC_VECTOR:=10000101;CONSTANT DAY_WRITE : STD_LOGIC_VECTOR:=10000110;CONSTANT DAY_READ : STD_LOGIC_VECTOR:=10000111;-CONSTANT MONTH_WRITE : STD_LOGIC_VECTOR:=10001000;-CONSTANT MONTH_READ : STD_LOGIC_VECTOR:=10001001;-CONSTANT YEAR_WRITE : STD_LOGIC_VECTOR:=10001100;-CONSTANT YEAR_READ : STD_LOGIC_VECTOR:=10001101;Begin rst_out=NOT rst; sec_out=s0(0); Process(clk,rst) -50MHz分频到400Hz variable cnt1: integer range 0 to 62500;begin if rst=0 then cnt1:=0;clk_400Hz=0; elsif clkEVENT and clk=1then if cnt162500 then cnt1:=cnt1+1; else cnt1:=0;clk_400HZ= not clk_400Hz;end if; end if;end process;process(clk_400HZ,rst)variable cnt2: integer range 0 to 199;begin if rst=0 then state=rst1;data_out=X38;n_state=rst2;en=1;rs=0;rw=0; elsif clkEVENT and clk=1 then if cnt219 then cnt2:=cnt2+1; else cnt2:=0;clk_400Hzen=1;rs=0;rw=0;data_out=X38;state=toggle_e;n_stateen=1;rs=0;rw=0;data_out=X38;state=toggle_e;n_stateen=1;rs=0;rw=0;data_out=X38;state=toggle_e;n_stateen=1;rs=0;rw=0;data_out=X38;state=toggle_e;n_stateen=1;rs=0;rw=0;data_out=X08;state=toggle_e;n_stateen=1;rs=0;rw=0;data_out=X01;state=toggle_e;n_stateen=1;rs=0;rw=0;data_out=X0c;state=toggle_e;n_stateen=1;rs=0;rw=0;data_out=X06;state=toggle_e;n_stateen=1;rs=1;rw=0;data_out=X3 & h1;state=toggle_e;n_stateen=1;rs=1;rw=0;data_out=X3 & h0;state=toggle_e;n_stateen=1;rs=1;rw=0;data_out=X3a;state=toggle_e;n_stateen=1;rs=1;rw=0;data_out=X3 & m1;state=toggle_e;n_stateen=1;rs=1;rw=0;data_out=X3 & m0;state=toggle_e;n_stateen=1;rs=1;rw=0;data_out=X3a;state=toggle_e;n_stateen=1;rs=1;rw=0;data_out=X3 & s1;state=toggle_e;n_stateen=1;rs=1;rw=0;data_out=X3 & s0;state=toggle_e;n_stateen=1;rs=1;rw=0;data_out=X2e;state=toggle_e;n_stateen=1;rs=1;rw=0;data_out=X3 & t;state=toggle_e;n_stateen=1;rs=0;rw=0;data_out=X80;state=toggle_e;n_state en =0; statestate =n_state; -保持 end case; end if;end process;PROCESS(clk_40Hz)VARIABLE COUNT1 : INTEGER RANGE 0 TO 7 ;VARIABLE COUNT2 : STD_LOGIC_VECTOR (1 DOWNTO 0);VARIABLE COUNT3 : STD_LOGIC_VECTOR (1 DOWNTO 0);variable cnt3: integer range 0 to 19;VARIABLE COUNT4 : STD_LOGIC_VECTOR(3 DOWNTO 0); VARIABLE COUNT5 : STD_LOGIC_VECTOR(2 DOWNTO 0); VARIABLE COUNT6 : STD_LOGIC_VECTOR(2 DOWNTO 0);BEGIN if rst=0 then cnt3:=0;clk_40Hz=0; elsif clk_400HzEVENT and clk_400HZ=1 then if cnt319 then cnt3:=cnt3+1; else cnt3:=0;clk_40HZCASE COUNT2 ISWHEN 00 = CONT_TEMP=CONT_I; SCLK=0; IO=CONT_I(COUNT1); COUNT2:=01; -写地址rst SCLK SCLK=0; IO SCLK=1; COUNT2:=00; COUNT3:=01; IOBCASE COUNT2 ISWHEN 00 = SCLK=0; COUNT2:=01; COUNT1:=0;IO SCLK=1; DATA_TEMP(COUNT1) SCLK=0; COUNT1:=COUNT1+1;IO DATA_TEMP(COUNT1)=IO; COUNT3:=10; COUNT2:=00; DATA_O= DATA_TEMP; IOB DATA_O= DATA_TEMP; COUNT1:=0; IOB =0;- rst NULL;END CASE;END IF;IF WR =1AND RD =0 THEN -写数据CASE COUNT3 ISWHEN 00 =CASE COUNT2 ISWHEN 00 = CONT_TEMP=CONT_I; DATA_TEMP=DATA_I;SCLK=0; IO=CONT_I(0); COUNT2:=01; COUNT1:=0;- RST SCLK SCLK=0; IO SCLKCASE COUNT2 ISWHEN 00 = SCLK=0; IO SCLK SCLK=0; IO SCLK=1; COUNT2:=00; COUNT3:=10; COUNT1:=0; IOB COUNT1:=0; IOB=0; -RST NULL;END CASE;END IF;IF RD =0 AND WR =0 THEN SCLK=0; COUNT1:=0; COUNT3:=00; COUNT2:=00; DATA_O=ZZZZZZZZ; END IF;END IF;h1= X0;h0= X0;m1= X0;m0= X0;s1= X0;s0= X0;IF k1 =1 THENIF COUNT5 CONT_O=SECOND_WRITE; DATA_O COUNT5:=010; WHEN 010 = CONT_O=MINUTE_WRITE; DATA_O COUNT5:=100; WHEN 100 = CONT_O=HOUR_WRITE; DATA_O COUNT5:=110; WHEN 110 = CONT_O=DAY_WRITE; DATA_ONULL;END CASE;END IF

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论