1、 1 1 编写的程序 (一)功能模块: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; -实体 - entity at24c08 is port( clk : in std_logic; -时钟信号 rst : in std_logic; -复位信号 scl : out std_logic; -i2c 时钟线 sda : inout std_logic; -i2c 数据线 urv_1 : in std_logic; -上限值 1 u
2、rv_2 : in std_logic; -上限值 2 sel : out std_logic_vector(3 downto 0); seg : out std_logic_vector(7 downto 0); beep : out std_logic -蜂鸣器输出信号线 ); end at24c08; -结构体 - architecture arch_at24c08 of at24c08 is signal clk_sslow : std_logic; 2 signal counter : std_logic_vector(23 downto 0); signal readdata_re
3、g_buf : std_logic_vector(15 downto 0); signal readdata_ten : integer range 0 to 24564; signal readdata_std : std_logic_vector(15 downto 0); signal qian : std_logic_vector(3 downto 0); signal bai : std_logic_vector(3 downto 0); signal shi : std_logic_vector(3 downto 0); signal ge : std_logic_vector(3
4、 downto 0); signal qian_0 : integer range 0 to 10; signal bai_0 : integer range 0 to 10; signal shi_0 : integer range 0 to 10; signal ge_0 : integer range 0 to 10; -数码管部分信号 signal sel_0 : std_logic_vector(3 downto 0); signal seg_0 : std_logic_vector(7 downto 0); signal count : std_logic_vector(13 do
5、wnto 0); signal clk_slow : std_logic; signal scan_num : std_logic_vector(1 downto 0); signal seg_data_buf : std_logic_vector(3 downto 0); -i2c 部分信号 signal sda_buf : std_logic; -i2c 输入 /输出数据寄存器 signal link : std_logic; -sda 输入输出方向寄存器 signal readdata_reg : std_logic_vector(15 downto 0);-i2c 读回的数据寄存器 s
6、ignal sda_0 : std_logic; -与 sda 端口连接信号 signal scl_0 : std_logic; -与 scl 端口连接信号 -按键消抖部分信号 3 signal delay_cnt : std_logic_vector(19 downto 0); -消抖延时计数器 signal start_delay : std_logic; -按键延时开始 -分频部分信号 signal clk_div : std_logic_vector(12 downto 0); - 分频计数器, 5000 分频, 10khz -蜂鸣器部分信号 signal beep_en : std_
7、logic; -蜂鸣器使能信号 signal beep_buf : std_logic; -与 beep 端口连接的信号 -时钟部分信号 signal level_high : std_logic; -高电平中间值, 1249 signal level_low : std_logic; -低电平中间值, 3749 signal level_hig_edge : std_logic; -上升沿, 4999 signal level_low_edge : std_logic; -下降沿, 2499 -状态机部分信号 signal main_state : std_logic_vector(1 do
8、wnto 0); -状态机主状态 signal i2c_state : std_logic_vector(2 downto 0); -i2c 状态 signal i2c_per_state : std_logic_vector(3 downto 0); -i2c 每一步状态 -分频部分常量 constant div_parameter : std_logic_vector(12 downto 0):=“1001110001000“;-分频系数, 500 -状态机部分常量 -操作状态常量 constant read_init : std_logic_vector(2 downto 0) :=“0
9、00“;-EEPORM初始化 4 constant read_high : std_logic_vector(2 downto 0) :=“001“;-读高位数据状态 constant read_low : std_logic_vector(2 downto 0) :=“010“;-读低位数据状态 -i2c 每一步状态常量 constant start : std_logic_vector(3 downto 0) :=“0000“; -开始位 constant first : std_logic_vector(3 downto 0) :=“0001“; -数据第一位 constant seco
10、nd : std_logic_vector(3 downto 0) :=“0010“; -数据第二位 constant third : std_logic_vector(3 downto 0) :=“0011“; -数据第三位 constant fourth : std_logic_vector(3 downto 0) :=“0100“; -数据第四位 constant fifth : std_logic_vector(3 downto 0) :=“0101“; -数据第五位 constant sixth : std_logic_vector(3 downto 0) :=“0110“; -数据
11、第六位 constant seventh : std_logic_vector(3 downto 0) :=“0111“; -数据第七位 constant eighth : std_logic_vector(3 downto 0) :=“1000“; -数据第八位 constant ack : std_logic_vector(3 downto 0) :=“1001“; -应答位 constant stop : std_logic_vector(3 downto 0) :=“1010“; -停止位 -结构体开始 5 begin scl 0); elsif (clkevent and clk=1
12、) then if start_delay=1 then if(delay_cnt /= “11110100001001000000“) then -20ms 延时 delay_cnt 0); end if; end if; end if; end process key; -分频部分 div : process(rst,clk) begin if(not rst=1) then clk_div -等待读写要求 scl_0 if(level_hig_edge=1) then scl_0 -读命令地址 case i2c_per_state is when start = if(level_high=1) then sda_buf if(level_low=1) then sda_buf if(level_low=1) then sda_buf if(level_low=1) then sda_buf if(level_low=1) then sda_buf if(level_low=1) then sda_buf if(level_low=1) then sda_buf if(level_low=1) then sda_buf if(level_low=1) then link if(level_hig_edge=1) then sda_buf null; end case;
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。