i2c u1(.clock_i2c(clock_20k),
.reset_n(reset_n),
.ack(ack),
.i2c_data(i2c_data),
.start(start),
.tr_end(tr_end),
.i2c_sclk(i2c_sclk),
.i2c_sdat(i2c_sdat));
assign {xs1,xs2}=reg2_data[6:0];
always@(posedge clock_50m or negedge reset_n) //产生i2c控制时钟-20khz
begin
if(!reset_n)
begin
clock_20k<=0;
clock_20k_cnt<=0;
end
else if(clock_20k_cnt<2499)
clock_20k_cnt<=clock_20k_cnt+1;
else
begin
clock_20k<=!clock_20k;
clock_20k_cnt<=0;
end
end
always@(posedge clock_20k or negedge reset_n) //配置过程控制
if(!reset_n)
begin
config_step<=0;
start<=0;
reg_index<=0;
reg2_data<=16'h054d;
bz<=1'b0;
bx<=1'b1;
end
else if(!key[0])
begin
if(bx==1)
begin
bx<=0;
config_step<=0;
start<=0;
reg_index<=0;
begin
if(bz==0)
begin
if(reg2_data[6:0]==7'b1111111)
bz<=1'b1;
else
reg2_data[6:0]<=reg2_data[6:0]+5;
end
else if(bz==1)
begin
if(reg2_data[6:0]<=7'b0101111)
bz<=1'b0;
else
reg2_data[6:0]<=reg2_data[6:0]-5;
end
end
end
end
else if(clock_20k)
begin
if(key[0]==1)
bx<=1'b1;
if(reg_index<10)
begin
case(config_step)
0:begin
i2c_data<={8'h34,reg_data};
start<=1;
config_step<=1;
end
1:
if(tr_end)
begin
if(!ack)
begin
config_step<=2;
start<=0;
end
else
begin
config_step<=0;
start<=0;