⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tlc549.v

📁 verilog TLC549AD采样程序
💻 V
字号:
//11wolf
//04.09  TLC549AD采样程序 ,速度200K,在LED和数码管上显示
module TLC549(clk,ioclk,data,cs,reset,ledout,ledcs,segcs,segdata);
input clk,data,reset;
output ledcs,cs,ioclk;
output[7:0]ledout,segdata;
output[3:0]segcs;
reg cs,ioclk,clk1k,clk1ms;
reg[15:0] count;
reg[24:0]count1ms;
reg[3:0] cnt;
reg[2:0]number;
reg[1:0] state;
reg[3:0] segcs;
reg ledcs;
reg [7:0]ledout,segdata;
reg[7:0]dataout;
reg[16:0]tenvalue;
parameter sample=2'b00,
          display=2'b01;
/**********产生200K的信号*********/
always@(posedge clk)
  begin
    if(count<16'd1000) //200k  
      count<=count+1'b1;    
    else
      begin 
      count<=0; 
      ioclk<=~ioclk; 
      end
 end
/*******获取1MS的信号*********/
always@(posedge clk)
  begin 
    if(count1ms>25'd1000_0)//1ms的时间
      begin
      clk1ms<=~clk1ms;
      count1ms<=0;
      end
    else
      count1ms<=count1ms+1;
  end
/*********AD采样程序**************/
always@(negedge ioclk)
   begin
     case(state)
      sample:
       begin
        cs<=0;
        dataout[7:0]<={dataout[6:0],data}; 
        if(cnt>4'd7) 
           begin
           cnt<=0;
           state<=display;  
           end  
        else
           begin
           cnt<=cnt+1;
           state<=sample;
           end
        end
       display:/**用于LED上显示**/
          begin
           cs<=1;//关AD片选
           ledcs<=1;
           ledout<=dataout; 
           tenvalue<=(tendata((dataout>>4)&8'b0000_1111)*16+tendata(dataout&8'b0000_1111))*195;//
           state<=sample;
          end
      default: state<=display;
    endcase
  end
/***********2进制转十进制函数*************/
function[7:0] tendata;//返回一个4位的数字
input[7:0]   datain;
begin
 case(datain)
    4'b00000000: tendata=4'd0;//0
    4'b00000001: tendata=4'd1;//1
 	4'bd00000010: tendata=4'd2;//2
    4'b00000011: tendata=4'd3;//3
    4'b00000100: tendata=4'd4;//4
    4'b00000101: tendata=4'd5;//5
    4'b00000110: tendata=4'd6;//6
    4'bd00000111: tendata=4'd7;//7
    4'b00001000: tendata=4'd8;//8
    4'b00001001: tendata=4'd9;//9
    4'b00001010: tendata=4'd10;//
    4'b00001011: tendata=4'd11;//
    4'b00001100: tendata=4'd12;
    4'b00001101: tendata=4'd13;
    4'b00001110: tendata=4'd14;
    4'b00001111: tendata=4'd15;
   default:tendata=4'bzzzz_zzzz;
 endcase
end
endfunction




/*********十进制转LED段选函数*********/
function[7:0] leddata;//返回一个8位的数字
input[3:0]    datain;
begin
  case(datain)
    4'd0: leddata=8'b11000000;//0
    4'd1: leddata=8'b11111001;//1
 	4'd2: leddata=8'b10100100;//2
    4'd3: leddata=8'b10110000;//3
    4'd4: leddata=8'b10011001;//4
    4'd5: leddata=8'b10010010;//5
    4'd6: leddata=8'b10000010;//6
    4'd7: leddata=8'b11111000;//7
    4'd8: leddata=8'b10000000;//8
    4'd9: leddata=8'b10010000;//9
    4'd10: leddata=8'b10111111;//-
    4'd11: leddata=8'b01111111;//.
    default:leddata=8'bzzzz_zzzz;
   endcase
end
endfunction


/********扫描函数*************/
always@(posedge clk1ms)
 begin
    if(number==5) number<=0;
    else 
    begin 
	    number<=number+1;
	    case(number) 
	     4'd0:
	        begin
	        segdata<=leddata((tenvalue/10)%10);//个位
	        segcs<=4'b0001;
	        end
	     4'd1:
	        begin
	        segdata<=leddata((tenvalue/100)%10);//十位
	        segcs<=4'b0010;
	        end
	     4'd2:
	        begin
	        segdata<=leddata((tenvalue/1000)%10); //百位
	        segcs<=4'b0100;
	        end
	     4'd3:
	        begin
	        segdata<=leddata(tenvalue/10000);//千位
	        segcs<=4'b1000;
	        end
	     4'd4:
	        begin
	        segdata<=leddata(4'd11);//.
	        segcs<=4'b1000;
	        end
		endcase
	end
end    
 
endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -