基於FPGA的16位crc編碼,僞隨機數的生成,基於LCD顯示(中文註釋版)

module lcd_crc(
CLOCK_50 ,//50Mhz的系統時鐘
RST_N ,
LCD_EN ,//啓用LCD
LCD_RW , //因爲只執行寫操作,所以永遠爲0.
LCD_RS , //LCD 命令和數據選擇0 命令 1數據
LCD_DATA,//8路數據輸入
SW
);
input CLOCK_50 ;
input RST_N ;

input [1:0]SW;//定義了SW[0]和sw[1]

output LCD_EN ;
output LCD_RW ;
output LCD_RS ;
output [7:0] LCD_DATA;
wire CLOCK_50 ;
wire RST_N ;
wire LCD_EN ;
wire LCD_RW;
reg [7:0] LCD_DATA;
reg LCD_RS ;
reg [5:0] c_state ;
reg [5:0] n_state ;
wire [127:0] row_1;
wire [127:0] row_2;

reg R_crc_reg1;
reg R_crc_reg2;
reg R_crc_reg3;
reg R_crc_reg4;
reg R_crc_reg5;
reg R_crc_reg6;
reg R_crc_reg7;
reg R_crc_reg8;
reg R_crc_reg9;
reg R_crc_reg10;
reg R_crc_reg11;
reg R_crc_reg12;
reg R_crc_reg13;
reg R_crc_reg14;
reg R_crc_reg15;
reg R_crc_reg16;
reg R_crc_sign;
reg[5:0] R_count_a;
reg[15:0] O_crc_datab;
reg I_crc_dataa;
reg [31:0] P_crc_data;
//parameter[31:0] P_crc_data=32’b10110010011011011011111100110111;

//assign row_1 =”i am liu xiao yi” ; //第一行顯示的內容
//assign row_2 =”happy everyday !”; //第二行顯示的內容
//———————————————————————-
//initialize
//first step is waitng more than 20 ms. 數據手冊要求的,目的是等待系統上電穩定。
parameter TIME_20MS = 1000_000 ; //20000000/20=1000_000
//parameter TIME_15MS = 9’h100 ; //just for test
parameter TIME_500HZ= 100_000 ; //
//parameter TIME_500HZ= 4’hf; //just for test
//use gray code
parameter IDLE= 8’h00 ; //因爲此狀態機一共有40個狀態,所以這裏用了格雷碼,一次只有1位發生改變。00 01 03 02
parameter SET_FUNCTION= 8’h01 ; //0000 0001
parameter DISP_OFF= 8’h03 ; //0000 0011
parameter DISP_CLEAR= 8’h02 ; //0000 0010
parameter ENTRY_MODE= 8’h06 ;
parameter DISP_ON = 8’h07 ;
parameter ROW1_ADDR= 8’h05 ;
parameter ROW1_0= 8’h04 ;//lcd 第一行
parameter ROW1_1= 8’h0C ;
parameter ROW1_2= 8’h0D ;
parameter ROW1_3= 8’h0F ;
parameter ROW1_4= 8’h0E ;
parameter ROW1_5= 8’h0A ;
parameter ROW1_6= 8’h0B ;
parameter ROW1_7= 8’h09 ;
parameter ROW1_8= 8’h08 ;
parameter ROW1_9= 8’h18 ;
parameter ROW1_A= 8’h19 ;
parameter ROW1_B= 8’h1B ;
parameter ROW1_C= 8’h1A ;
parameter ROW1_D= 8’h1E ;
parameter ROW1_E= 8’h1F ;
parameter ROW1_F= 8’h1D ;

parameter ROW2_ADDR= 8’h1C ;
parameter ROW2_0= 8’h14 ;
parameter ROW2_1= 8’h15 ;
parameter ROW2_2= 8’h17 ;
parameter ROW2_3= 8’h16 ;
parameter ROW2_4= 8’h12 ;
parameter ROW2_5= 8’h13 ;
parameter ROW2_6= 8’h11 ;
parameter ROW2_7= 8’h10 ;
parameter ROW2_8= 8’h30 ;
parameter ROW2_9= 8’h31 ;
parameter ROW2_A= 8’h33 ;
parameter ROW2_B= 8’h32 ;
parameter ROW2_C= 8’h36 ;
parameter ROW2_D= 8’h37 ;
parameter ROW2_E= 8’h35 ;
parameter ROW2_F= 8’h34 ;

//20ms的計數器,即初始化第一步
reg [19:0] cnt_20ms ;
always @(posedge CLOCK_50 or negedge RST_N)
begin //異步復位
if(RST_N==1’b0)
begin
cnt_20ms<=0;//RST_N 低電平有效的復位信號
end
else if(cnt_20ms == TIME_20MS -1)//1000_000 -1
begin
cnt_20ms<=cnt_20ms;
end
else
cnt_20ms<=cnt_20ms + 1 ;//和time_20ms時間同步
end
wire delay_done = (cnt_20ms==TIME_20MS-1)? 1’b1 : 1’b0 ;//此時delay_done=1;
//———————————————————————-
//500ns 這裏是分頻,因爲LCD1602的工作頻率是500HZ,而FPGA是50Mhz,所以要分頻
reg [19:0] cnt_500hz;
always @(posedge CLOCK_50 or negedge RST_N)
begin
if(RST_N==1’b0)
begin
cnt_500hz <= 0;//低電平有效的復位信號
end
else if(delay_done==1)//滿足時間同步了
begin
if(cnt_500hz== TIME_500HZ - 1)//100_000 -1
cnt_500hz<=0;//從0開始計數
else
cnt_500hz<=cnt_500hz + 1 ;
end
else
cnt_500hz<=0;//RST_N=1也至爲0
end

assign LCD_EN = (cnt_500hz>(TIME_500HZ-1)/2)? 1’b0 : 1’b1; //下降沿 LCD_EN=1 cnt500小於1000/2=500hz
assign write_flag = (cnt_500hz==TIME_500HZ - 1) ? 1’b1 : 1’b0 ;// write_flag=0

//set_function ,display off ,display clear ,entry mode set
//———————————————————————-狀態機
always @(posedge CLOCK_50 or negedge RST_N)
begin
if(RST_N==1’b0)
begin
c_state <= IDLE ;// RST_N 低電平時0 c_state=0000 0000
end
else if(write_flag==1)
begin
c_state<= n_state ; // c_state[5:0]和n_state[5;0]
end
else
c_state<=c_state ;
end

always @(*)begin //這是對LCD進行的設置
case (c_state)//c_state 從0開始掃描掃到500hz時,write_flag=1,c_state=0;再重新開始
IDLE: n_state = SET_FUNCTION ;//c_state=0000 0000
SET_FUNCTION: n_state = DISP_OFF ;//c_state=0000 0001
DISP_OFF: n_state = DISP_CLEAR ;
DISP_CLEAR: n_state = ENTRY_MODE ;
ENTRY_MODE: n_state = DISP_ON ;
DISP_ON : n_state = ROW1_ADDR ;
ROW1_ADDR: n_state = ROW1_0 ;
ROW1_0: n_state = ROW1_1 ;
ROW1_1: n_state = ROW1_2 ;
ROW1_2: n_state = ROW1_3 ;
ROW1_3: n_state = ROW1_4 ;
ROW1_4: n_state = ROW1_5 ;
ROW1_5: n_state = ROW1_6 ;
ROW1_6: n_state = ROW1_7 ;
ROW1_7: n_state = ROW1_8 ;
ROW1_8: n_state = ROW1_9 ;
ROW1_9: n_state = ROW1_A ;
ROW1_A: n_state = ROW1_B ;
ROW1_B: n_state = ROW1_C ;
ROW1_C: n_state = ROW1_D ;
ROW1_D: n_state = ROW1_E ;
ROW1_E: n_state = ROW1_F ;
ROW1_F: n_state = ROW2_ADDR ;

ROW2_ADDR: n_state = ROW2_0 ;
ROW2_0: n_state = ROW2_1 ;
ROW2_1: n_state = ROW2_2 ;
ROW2_2: n_state = ROW2_3 ;
ROW2_3: n_state = ROW2_4 ;
ROW2_4: n_state = ROW2_5 ;
ROW2_5: n_state = ROW2_6 ;
ROW2_6: n_state = ROW2_7 ;
ROW2_7: n_state = ROW2_8 ;
ROW2_8: n_state = ROW2_9 ;
ROW2_9: n_state = ROW2_A ;
ROW2_A: n_state = ROW2_B ;
ROW2_B: n_state = ROW2_C ;
ROW2_C: n_state = ROW2_D ;
ROW2_D: n_state = ROW2_E ;
ROW2_E: n_state = ROW2_F ;
ROW2_F: n_state = ROW1_ADDR ;
default: n_state = n_state ;
endcase
end

assign LCD_RW = 0;//lcd 進行寫操作
always @(posedge CLOCK_50 or negedge RST_N)
begin
if(RST_N ==1’b0) // 如果rstn低電平有效
begin
LCD_RS <= 0 ; //order or data 0: order 1:data LCD進入命令輸入模式 上述的掃描過程
end
else if(write_flag == 1)// 此時時鐘數到500hz
begin
if((n_state==SET_FUNCTION)||(n_state==DISP_OFF)||
(n_state==DISP_CLEAR)||(n_state==ENTRY_MODE)||
(n_state==DISP_ON ) ||(n_state==ROW1_ADDR)||
(n_state==ROW2_ADDR)) //滿足任何一條LCD 命令時
begin
LCD_RS<=0 ;// LCD開始輸入命令 上述7條任何一條
end
else
begin
LCD_RS<= 1; //進入數據輸入模式
end
end
else//write_flag=0;時鐘在繼續掃描,繼續輸入,直到數到500hz
begin
LCD_RS<=LCD_RS;//lcd_RS=1;輸入數據模式
end
end

//------------------------crc
always @(posedge CLOCK_50 or negedge RST_N)

begin
if(~RST_N)//RST_N爲低電平
begin
R_crc_reg1<=1’b0;
R_crc_reg2<=1’b0;
R_crc_reg3<=1’b0;
R_crc_reg4<=1’b0;
R_crc_reg5<=1’b0;
R_crc_reg6<=1’b0;
R_crc_reg7<=1’b0;
R_crc_reg8<=1’b0;
R_crc_reg9<=1’b0;//R_Crc_reg[17:1]全部初始化爲0;
R_crc_reg10<=1’b0;
R_crc_reg11<=1’b0;
R_crc_reg12<=1’b0;
R_crc_reg13<=1’b0;
R_crc_reg14<=1’b0;
R_crc_reg15<=1’b0;
R_crc_reg16<=1’b0;

   end
else//RST_N=1;
   begin
       if(R_crc_sign!=1'b1)//R_crc_sign不爲1
       begin
        R_crc_reg1<=I_crc_dataa^R_crc_reg16;//I_Crc_dataa外圍輸入的數據先和最高位異或
        R_crc_reg2<=R_crc_reg1;
        R_crc_reg3<=R_crc_reg2^R_crc_reg16;//有反饋
        R_crc_reg4<=R_crc_reg3;
        R_crc_reg5<=R_crc_reg4;
        R_crc_reg6<=R_crc_reg5;//採用的是crc16位編碼,其生成多項式爲x16+x15+x2+1
        R_crc_reg7<=R_crc_reg6;
        R_crc_reg8<=R_crc_reg7;//移位操作,右移
        R_crc_reg9<=R_crc_reg8;
        R_crc_reg10<=R_crc_reg9;
        R_crc_reg11<=R_crc_reg10;
        R_crc_reg12<=R_crc_reg11;
        R_crc_reg13<=R_crc_reg12;
        R_crc_reg14<=R_crc_reg13;
        R_crc_reg15<=R_crc_reg14^R_crc_reg16;
        R_crc_reg16<=R_crc_reg15^R_crc_reg16;
       end
       else//R_crc_sign=1
       begin
       //O_crc_datab[16]<=R_crc_reg17;
        O_crc_datab[15]<=R_crc_reg16;//將R_crc_reg存在o_crc_datab[15:0]中
        O_crc_datab[14]<=R_crc_reg15;
        O_crc_datab[13]<=R_crc_reg14;
        O_crc_datab[12]<=R_crc_reg13;
       O_crc_datab[11]<=R_crc_reg12;
        O_crc_datab[10]<=R_crc_reg11;
        O_crc_datab[9]<=R_crc_reg10;
        O_crc_datab[8]<=R_crc_reg9;
        O_crc_datab[7]<=R_crc_reg8;
        O_crc_datab[6]<=R_crc_reg7;
        O_crc_datab[5]<=R_crc_reg6;
        O_crc_datab[4]<=R_crc_reg5;
        O_crc_datab[3]<=R_crc_reg4;
        O_crc_datab[2]<=R_crc_reg3;
        O_crc_datab[1]<=R_crc_reg2;
        O_crc_datab[0]<=R_crc_reg1;
        R_crc_reg1<=1'b0;
        R_crc_reg2<=1'b0;
        R_crc_reg3<=1'b0;
        R_crc_reg4<=1'b0;
        R_crc_reg5<=1'b0;
        R_crc_reg6<=1'b0;
        R_crc_reg7<=1'b0;
        R_crc_reg8<=1'b0;//R_crc_reg全部賦爲0
        R_crc_reg9<=1'b0;
        R_crc_reg10<=1'b0;
        R_crc_reg11<=1'b0;
        R_crc_reg12<=1'b0;
        R_crc_reg13<=1'b0;
        R_crc_reg14<=1'b0;
        R_crc_reg15<=1'b0;
        R_crc_reg16<=1'b0;
    end
end

end

always @(posedge CLOCK_50 or negedge RST_N)
begin
if(~RST_N)// RST_N爲低電平
begin
P_crc_data<=32’b10110010011011011011111100110111;
R_count_a<=6’b000000;
R_crc_sign<=1’b0;
end
else//RST_N爲1 RST_N爲1
begin
if(R_count_a==6’b110001)//32位的隨機數+16位的crc編碼共有48個計數週期
begin
R_count_a<=6’b000000;
R_crc_sign<=1’b1;
if(SW[1])
begin//撥動sw[1]生成了32位隨機數,保存在p_crc_data[31:0]
P_crc_data<={P_crc_data[0]^P_crc_data[8]^P_crc_data[10]^P_crc_data[18]^P_crc_data[5],
P_crc_data[4]^P_crc_data[10]^P_crc_data[12]^P_crc_data[27]^P_crc_data[28],
P_crc_data[4]^P_crc_data[15]^P_crc_data[7]^P_crc_data[3]^P_crc_data[10],
P_crc_data[30]^P_crc_data[17]^P_crc_data[4]^P_crc_data[26]^P_crc_data[23],
P_crc_data[24]^P_crc_data[24]^P_crc_data[23]^P_crc_data[25]^P_crc_data[22],
P_crc_data[22]^P_crc_data[21]^P_crc_data[29]^P_crc_data[9]^P_crc_data[9],
P_crc_data[5]^P_crc_data[3]^P_crc_data[17]^P_crc_data[14]^P_crc_data[15],
P_crc_data[16]^P_crc_data[1]^P_crc_data[11]^P_crc_data[8]^P_crc_data[17],
P_crc_data[18]^P_crc_data[0]^P_crc_data[18]^P_crc_data[13]^P_crc_data[1],
P_crc_data[31]^P_crc_data[17]^P_crc_data[6]^P_crc_data[12]^P_crc_data[30],
P_crc_data[20]^P_crc_data[18]^P_crc_data[1]^P_crc_data[11]^P_crc_data[7],
P_crc_data[14]^P_crc_data[21]^P_crc_data[1]^P_crc_data[1]^P_crc_data[2],
P_crc_data[11]^P_crc_data[28]^P_crc_data[30]^P_crc_data[22]^P_crc_data[13],
P_crc_data[7]^P_crc_data[16]^P_crc_data[17]^P_crc_data[31]^P_crc_data[26],
P_crc_data[16]^P_crc_data[30]^P_crc_data[31]^P_crc_data[29]^P_crc_data[3],
P_crc_data[9]^P_crc_data[27]^P_crc_data[25]^P_crc_data[2]^P_crc_data[18],
P_crc_data[4]^P_crc_data[31]^P_crc_data[6]^P_crc_data[14]^P_crc_data[27],
P_crc_data[30]^P_crc_data[9]^P_crc_data[2]^P_crc_data[5]^P_crc_data[31],
P_crc_data[1]^P_crc_data[5]^P_crc_data[25]^P_crc_data[8]^P_crc_data[17],
P_crc_data[5]^P_crc_data[15]^P_crc_data[0]^P_crc_data[0]^P_crc_data[22],
P_crc_data[9]^P_crc_data[21]^P_crc_data[4]^P_crc_data[13]^P_crc_data[15],
P_crc_data[26]^P_crc_data[20]^P_crc_data[3]^P_crc_data[11]^P_crc_data[26],
P_crc_data[19]^P_crc_data[0]^P_crc_data[20]^P_crc_data[21]^P_crc_data[5],
P_crc_data[3]^P_crc_data[19]^P_crc_data[17]^P_crc_data[7]^P_crc_data[18],
P_crc_data[14]^P_crc_data[16]^P_crc_data[16]^P_crc_data[10]^P_crc_data[23],
P_crc_data[8]^P_crc_data[7]^P_crc_data[22]^P_crc_data[28]^P_crc_data[10],
P_crc_data[21]^P_crc_data[30]^P_crc_data[26]^P_crc_data[15]^P_crc_data[29],
P_crc_data[0]^P_crc_data[2]^P_crc_data[7]^P_crc_data[24]^P_crc_data[16],
P_crc_data[20]^P_crc_data[17]^P_crc_data[21]^P_crc_data[3]^P_crc_data[11],
P_crc_data[12]^P_crc_data[24]^P_crc_data[29]^P_crc_data[25]^P_crc_data[0],
P_crc_data[13]^P_crc_data[28]^P_crc_data[28]^P_crc_data[26]^P_crc_data[4],
P_crc_data[24]^P_crc_data[4]^P_crc_data[1]^P_crc_data[4]^P_crc_data[21]
};
end
end
else//r_count_a不爲48,則每次加1
begin
R_count_a<=R_count_a+6’d1;
R_crc_sign<=1’b0;//進行上面的crc編碼操作
end
end
end

always @(posedge CLOCK_50 or negedge RST_N)
begin
if(~RST_N)//RST_N=0
begin
I_crc_dataa<=1’b0;//開始輸入的數據爲0
end
else
begin
case(R_count_a)
6’b000000:I_crc_dataa<=P_crc_data[31];//將32位的隨機數送入I_crc_dataa裏進行16crc編碼
6’b000001:I_crc_dataa<=P_crc_data[30];
6’b000010:I_crc_dataa<=P_crc_data[29];
6’b000011:I_crc_dataa<=P_crc_data[28];
6’b000100:I_crc_dataa<=P_crc_data[27];
6’b000101:I_crc_dataa<=P_crc_data[26];
6’b000110:I_crc_dataa<=P_crc_data[25];
6’b000111:I_crc_dataa<=P_crc_data[24];
6’b001000:I_crc_dataa<=P_crc_data[23];
6’b001001:I_crc_dataa<=P_crc_data[22];
6’b001010:I_crc_dataa<=P_crc_data[21];
6’b001011:I_crc_dataa<=P_crc_data[20];
6’b001100:I_crc_dataa<=P_crc_data[19];
6’b001101:I_crc_dataa<=P_crc_data[18];
6’b001110:I_crc_dataa<=P_crc_data[17];
6’b001111:I_crc_dataa<=P_crc_data[16];
6’b010000:I_crc_dataa<=P_crc_data[15];
6’b010001:I_crc_dataa<=P_crc_data[14];
6’b010010:I_crc_dataa<=P_crc_data[13];
6’b010011:I_crc_dataa<=P_crc_data[12];
6’b010100:I_crc_dataa<=P_crc_data[11];
6’b010101:I_crc_dataa<=P_crc_data[10];
6’b010110:I_crc_dataa<=P_crc_data[9];
6’b010111:I_crc_dataa<=P_crc_data[8];
6’b011000:I_crc_dataa<=P_crc_data[7];
6’b011001:I_crc_dataa<=P_crc_data[6];
6’b011010:I_crc_dataa<=P_crc_data[5];
6’b011011:I_crc_dataa<=P_crc_data[4];
6’b011100:I_crc_dataa<=P_crc_data[3];
6’b011101:I_crc_dataa<=P_crc_data[2];
6’b011110:I_crc_dataa<=P_crc_data[1];
6’b011111:I_crc_dataa<=P_crc_data[0];
6’b100000:I_crc_dataa<=1’b0;//補0操作
6’b100001:I_crc_dataa<=1’b0;
6’b100010:I_crc_dataa<=1’b0;
6’b100011:I_crc_dataa<=1’b0;
6’b100100:I_crc_dataa<=1’b0;
6’b100101:I_crc_dataa<=1’b0;
6’b100110:I_crc_dataa<=1’b0;
6’b100111:I_crc_dataa<=1’b0;
6’b101000:I_crc_dataa<=1’b0;
6’b101001:I_crc_dataa<=1’b0;
6’b101010:I_crc_dataa<=1’b0;
6’b101011:I_crc_dataa<=1’b0;
6’b101100:I_crc_dataa<=1’b0;
6’b101101:I_crc_dataa<=1’b0;
6’b101110:I_crc_dataa<=1’b0;
6’b101111:I_crc_dataa<=1’b0;
6’b110000:I_crc_dataa<=1’b0;
default:I_crc_dataa<=1’b0;
endcase
end
end
//————————

always @(posedge CLOCK_50 or negedge RST_N)
begin
if(RST_N==1’b0)
begin
LCD_DATA<=0 ;
end
else if(write_flag)//
begin
case(n_state)

             IDLE: LCD_DATA <= 8'hxx;
     SET_FUNCTION: LCD_DATA <= 8'h38; //2*16 5*8 8位數據
         DISP_OFF: LCD_DATA <= 8'h08;
       DISP_CLEAR: LCD_DATA <= 8'h01;
       ENTRY_MODE: LCD_DATA <= 8'h06;

       DISP_ON   : LCD_DATA <= 8'h0c;  //顯示功能開,沒有光標,且不閃爍,
        ROW1_ADDR: LCD_DATA <= 8'h80; //00+80
           ROW1_0: if(SW[0]==0)begin LCD_DATA <= O_crc_datab[15]+8'd48;end
                          else begin LCD_DATA <= P_crc_data[31]+8'd48;end
           ROW1_1: if(SW[0]==0)begin LCD_DATA <= O_crc_datab[14]+8'd48;end
                          else begin LCD_DATA <= P_crc_data[30]+8'd48;end
           ROW1_2: if(SW[0]==0)begin LCD_DATA <= O_crc_datab[13]+8'd48;end
                          else begin LCD_DATA <= P_crc_data[29]+8'd48;end
           ROW1_3: if(SW[0]==0)begin LCD_DATA <= O_crc_datab[12]+8'd48;end
                          else begin LCD_DATA <= P_crc_data[28]+8'd48;end
           ROW1_4: if(SW[0]==0)begin LCD_DATA <= O_crc_datab[11]+8'd48;end
                          else begin LCD_DATA <= P_crc_data[27]+8'd48;end
           ROW1_5: if(SW[0]==0)begin LCD_DATA <= O_crc_datab[10]+8'd48;end
                          else begin LCD_DATA <= P_crc_data[26]+8'd48;end
           ROW1_6: if(SW[0]==0)begin LCD_DATA <= O_crc_datab[9]+8'd48;end
                          else begin LCD_DATA <= P_crc_data[25]+8'd48;end
           ROW1_7: if(SW[0]==0)begin LCD_DATA <= O_crc_datab[8]+8'd48;end
                          else begin LCD_DATA <= P_crc_data[24]+8'd48;end
           ROW1_8: if(SW[0]==0)begin LCD_DATA <= O_crc_datab[7]+8'd48;end
                          else begin LCD_DATA <= P_crc_data[23]+8'd48;end
           ROW1_9: if(SW[0]==0)begin LCD_DATA <= O_crc_datab[6]+8'd48;end
                          else begin LCD_DATA <= P_crc_data[22]+8'd48;end
           ROW1_A: if(SW[0]==0)begin LCD_DATA <= O_crc_datab[5]+8'd48;end
                          else begin LCD_DATA <= P_crc_data[21]+8'd48;end
           ROW1_B: if(SW[0]==0)begin LCD_DATA <= O_crc_datab[4]+8'd48;end
                          else begin LCD_DATA <= P_crc_data[20]+8'd48;end
           ROW1_C: if(SW[0]==0)begin LCD_DATA <= O_crc_datab[3]+8'd48;end
                          else begin LCD_DATA <= P_crc_data[19]+8'd48;end
           ROW1_D: if(SW[0]==0)begin LCD_DATA <= O_crc_datab[2]+8'd48;end
                          else begin LCD_DATA <= P_crc_data[18]+8'd48;end
           ROW1_E: if(SW[0]==0)begin LCD_DATA <= O_crc_datab[1]+8'd48;end
                          else begin LCD_DATA <= P_crc_data[17]+8'd48;end
           ROW1_F: if(SW[0]==0)begin LCD_DATA <= O_crc_datab[0]+8'd48;end
                          else begin LCD_DATA <= P_crc_data[16]+8'd48;end

        ROW2_ADDR: LCD_DATA <= 8'hc0;      //40+80
           ROW2_0: if(SW[0]==0)begin LCD_DATA <= 8'd32;end
                          else begin LCD_DATA <= P_crc_data[15]+8'd48;end
           ROW2_1: if(SW[0]==0)begin LCD_DATA <= 8'd32;end
                          else begin LCD_DATA <= P_crc_data[14]+8'd48;end
           ROW2_2: if(SW[0]==0)begin LCD_DATA <= 8'd32;end
                          else begin LCD_DATA <= P_crc_data[13]+8'd48;end
           ROW2_3: if(SW[0]==0)begin LCD_DATA <= 8'd32;end
                          else begin LCD_DATA <= P_crc_data[12]+8'd48;end
           ROW2_4: if(SW[0]==0)begin LCD_DATA <= 8'd32;end
                          else begin LCD_DATA <= P_crc_data[11]+8'd48;end
           ROW2_5: if(SW[0]==0)begin LCD_DATA <= 8'd32;end
                          else begin LCD_DATA <= P_crc_data[10]+8'd48;end
           ROW2_6: if(SW[0]==0)begin LCD_DATA <= 8'd32;end
                          else begin LCD_DATA <= P_crc_data[9]+8'd48;end
           ROW2_7: if(SW[0]==0)begin LCD_DATA <= 8'd32;end
                          else begin LCD_DATA <= P_crc_data[8]+8'd48;end
           ROW2_8: if(SW[0]==0)begin LCD_DATA <= 8'd32;end
                          else begin LCD_DATA <= P_crc_data[7]+8'd48;end
           ROW2_9: if(SW[0]==0)begin LCD_DATA <= 8'd32;end
                          else begin LCD_DATA <= P_crc_data[6]+8'd48;end
           ROW2_A: if(SW[0]==0)begin LCD_DATA <= 8'd32;end
                          else begin LCD_DATA <= P_crc_data[5]+8'd48;end
           ROW2_B: if(SW[0]==0)begin LCD_DATA <= 8'd32;end
                          else begin LCD_DATA <= P_crc_data[4]+8'd48;end
           ROW2_C: if(SW[0]==0)begin LCD_DATA <= 8'd32;end
                          else begin LCD_DATA <= P_crc_data[3]+8'd48;end
           ROW2_D: if(SW[0]==0)begin LCD_DATA <= 8'd32;end
                          else begin LCD_DATA <= P_crc_data[2]+8'd48;end
           ROW2_E: if(SW[0]==0)begin LCD_DATA <= 8'd32;end
                          else begin LCD_DATA <= P_crc_data[1]+8'd48;end
           ROW2_F: if(SW[0]==0)begin LCD_DATA <= 8'd32;end
                          else begin LCD_DATA <= P_crc_data[0]+8'd48;end
       endcase                     
   end
   else
          LCD_DATA<=LCD_DATA ;

end

endmodule

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章