/weixiao

  • 2018-05-22
  • 回复了主题帖: 本人FPGA萌新一枚,跪求各位大神帮忙查看问题

    huo_hu 发表于 2018-5-19 21:34 抬起按键的时候能恢复吗? 能恢复多半是管脚冲突,不能的话就可能是软件问题了,12864是spi口还是并行数 ...
    摁键抬起来也是花屏。

  • 2018-05-18
  • 回复了主题帖: 本人FPGA萌新一枚,跪求各位大神帮忙查看问题

    huo_hu 发表于 2018-5-18 17:01 什么叫 "只有当摁下6 7两个数字的时候,屏幕就出现花屏的情...." 看糊涂了
    我要实现的功能就是利用键盘控制LCD显示,12345890这几个摁键摁下 都没有问题 唯独6 7两个数字摁下就出现花屏的情况。

  • 回复了主题帖: 本人FPGA萌新一枚,跪求各位大神帮忙查看问题

    ienglgge 发表于 2018-5-17 12:42 如果是自己做的板子。就好好检查一下硬件连接。虚焊,短路等。最好测一下,花屏时,发送到LCD12864的波形  ...
    好的 谢谢

  • 回复了主题帖: 本人FPGA萌新一枚,跪求各位大神帮忙查看问题

    huo_hu 发表于 2018-5-17 14:40 估计是管脚冲突了
    不会的,这块板子是问一个老师借的,他给的电路图没有问题

  • 回复了主题帖: 本人FPGA萌新一枚,跪求各位大神帮忙查看问题

    chunyang 发表于 2018-5-17 11:00 先检查有没有焊接问题等导致的短路、接触不良之类,按键按下时监看电源电压和IO口电平即可。如果没有这方面 ...
    但是软件仿真做出来没问题。。。。 硬件目测来看也没有问题  而且就只是 6 7两个数字出现了问题

  • 2018-05-17
  • 回复了主题帖: 【FPGA助学系列-12864显示的verilog实现】

    版主 你好 我是FPGA的萌新一枚  斗胆不才根据你的程序进行改编了一下,想做一个键盘控制12864显示,但是发现,但键盘摁下6和7 时  12864就会出现花屏的情况。 能帮忙看一下是那边出的问题吗  下面附有我改的代码 module lcd(//针对型号为RT12864-S                           input Sys_Clk,                           input Rst,                         input down,                         input right,                         input data_in,                         input clear,                         input [7:0] data,                         output reg LCD_RS,                           output LCD_RW,                           output LCD_E,                         output LCD_psb,                                  output LCD_Rst,                                output [7:0]lcd_data   //      output PSB//串并控制端口,H为并行,L为串行,直接接5v   //      output LCD_Rst,//液晶的复位端口,低电平有效   //由于端口不够,暂时让其悬空                           );   assign lcd_data = lcd_data_out; reg [7:0] lcd_data_out; reg LCD_Clk;   reg[7:0] state;//状态机寄存器   reg [23:0] cnt;//计数器   reg flag;//显示完成标志   reg[5:0]char_cnt;   reg[7:0]data_disp;//一个字节是八位,一个英文字符是一个字节,中文是俩个字节   reg [2:0] x; reg [3:0] y; parameter T500KHZ=24'd12287;   //  parameter T500KHZ=24'd24_999_999;//测试低频现象   //  parameter T500KHZ=24'd24_9;//仿真专用   //首先先对系统频率分频,液晶所需频率不用这么高,但是是多少呢?由datasheet可得出该液晶的最大频率是590kHZ   //典型值为530KH,为了好算取个值500KHZ,50M/500KHZ=10HZ,计数5M/2变化一次方向   assign LCD_psb = 1'b1; assign LCD_Rst = 1'b1; always@(posedge Sys_Clk or negedge Rst)   begin           if(!Rst)  begin                   cnt<=24'd0;                   LCD_Clk<=1'b0;           end           else if(cnt==T500KHZ)  begin                   cnt<=24'd0;                   LCD_Clk<=~LCD_Clk;           end           else                   cnt<=cnt+1'b1;   end           reg down_delay; reg right_delay; reg data_in_delay; reg clear_delay; reg down1; reg right1; reg data_in1; reg clear1; wire down_rise; wire right_rise; wire data_in_rise; wire clear_rise; always@(posedge Sys_Clk or negedge Rst)   begin         if (Rst == 1'b0)         begin                 down1 <= 1'b0;                 right1   <= 1'b0;                 data_in1                <= 1'b0;                 clear1                <= 1'b0;         end         else         begin                 down1 <= down;                 right1   <= right;                 data_in1     <= data_in;                 clear1 <= clear;         end end assign down_rise = (down == 1'b1) && (down1 == 1'b0); assign right_rise = (right == 1'b1) && (right1 == 1'b0); assign data_in_rise = (data_in == 1'b1) && (data_in1 == 1'b0); assign clear_rise = (clear == 1'b1) && (clear1 == 1'b0); always@(posedge Sys_Clk or negedge Rst)   begin           if(!Rst)  begin                    down_delay<=1'b0;           end           else if(down_rise==1'b1)                 down_delay<=1'b1;           else if(state != IDLE)                 down_delay<=1'b0;         else                 down_delay<=down_delay;   end always@(posedge Sys_Clk or negedge Rst)   begin           if(!Rst)  begin                    right_delay<=1'b0;           end           else if(right_rise==1'b1)                 right_delay<=1'b1;           else if(state != IDLE)                 right_delay<=1'b0;         else                 right_delay<=right_delay;   end always@(posedge Sys_Clk or negedge Rst)   begin           if(!Rst)  begin                    data_in_delay<=1'b0;           end           else if(data_in_rise==1'b1)                 data_in_delay<=1'b1;           else if(state != IDLE)                 data_in_delay<=1'b0;         else                 data_in_delay<=data_in_delay;   end   always@(posedge Sys_Clk or negedge Rst)   begin           if(!Rst)  begin                    clear_delay<=1'b0;           end           else if(clear_rise==1'b1)                 clear_delay<=1'b1;           else if(state != IDLE)                 clear_delay<=1'b0;         else                 clear_delay<=clear_delay;   end //state machine description,8个状态 只要用把位二进制就可以全部表示   parameter IDLE=8'b00_000_000;//初始状态   parameter SETFUNCTION=8'b00_000_001;//功能设置,8-bit+基本指令集0x30   parameter SETFUNCTION2=8'b00_000_010;//同上   parameter SWITCHMODE=8'b00_000_100;//设置显示开和光标闪烁关闭   parameter CLEAR=8'b00_001_000;//清屏操作   parameter SETMODE=8'b00_010_000;//点设置   parameter SETDDRAM=8'b00_100_000;//起始行设置   parameter WRITERAM=8'b01_000_000;//写设置   parameter STOP=8'b10_000_000;//LCD操作停止,释放其控制   parameter POWERUP =8'b00_000_011;//初始状态         //设置好RS、RW、E   always@(posedge LCD_Clk or negedge Rst)   begin           if(!Rst)                   LCD_RS<=1'b0;           else if(state==WRITERAM)                   LCD_RS<=1'b1;            else                   LCD_RS<=1'b0;   end           //如果定义了LCD_Rst俩个端口的话,可做如下设置   //assign LCD_Rst=1'b1;   //assign PSB=1'b1;   assign LCD_RW=1'b0;//只是写操作,不需要读操作   assign LCD_E=(flag==1)?LCD_Clk:1'b0;//使能信号与液晶时钟同步           //descible the state machine   always@(posedge LCD_Clk or negedge Rst)   begin           if(!Rst)  begin                   state<=POWERUP;                   lcd_data_out<=8'bzz_zzz_zzz;                 x <= 3'b1;                 y <= 4'b0;                 flag<=1'b1;          end           else  begin                   case(state)                           POWERUP:  begin                                    state<=SETFUNCTION;                                    lcd_data_out<=8'h30;                                  flag<=1'b1;                         end                           IDLE:  begin                                     flag<=1'b1;                                  if(down_delay == 1'b1) begin                                         if(x == 3'd4)                                                 x <= 3'b1;                                         else                                                 x <= x +3'b1;                                         state <= SETDDRAM;                                  end                                  else if(right_delay == 1'b1) begin                                         state <= SETDDRAM;                                         y <= y +4'b1;                                         if((x == 3'd4) &&(y == 4'd15))                                                 x <= 3'd1;                                         else if(y == 4'd15)                                                 x <= x +3'b1;                                         else                                                 x <= x;                                 end                                 else if(data_in_delay == 1'b1) begin                                         state <= WRITERAM;                                         y <= y +4'b1;                                         if((x == 3'd4) &&(y == 4'd15))                                                 x <= 3'd1;                                         else if(y == 4'd15)                                                 x <= x +3'b1;                                         else                                                 x <= x;                                 end                                 else if(clear_delay == 1'b1) begin                                         state<=SETFUNCTION;                                           lcd_data_out<=8'h30;                                         flag<=1'b1;                                         x <= 1;                                         y <= 0;                                 end                                 else begin                                         x <= x;                                         y <= y;                                 end                         end                         SETFUNCTION: begin                                   state<=SWITCHMODE;                                   state<=SETFUNCTION2;                                   lcd_data_out<=8'h30;                           end                           SETFUNCTION2:begin                                      state<=SWITCHMODE;                                   lcd_data_out<=8'h30;                           end                           SWITCHMODE:begin                                   state<=CLEAR;                                   lcd_data_out<=8'h0f;//显示设置,全显示开,光标和闪烁关                           end                           CLEAR:begin                                   state<=SETMODE;                                   lcd_data_out<=8'h01;//清屏、                           end                           SETMODE: begin                                   state<=SETDDRAM;                                   lcd_data_out<=8'h06;//点设置,光标右移,地址加一,整体不动                           end                           SETDDRAM: begin //设置起始位置                                   state<=IDLE;                                   if(x==3'd1)                                           lcd_data_out<=8'h80 +y;//line1                                   else  if(x==3'd2)                                         lcd_data_out<=8'h90 +y;//line2                                 else  if(x==3'd3)                                         lcd_data_out<=8'h88 +y;//line3                                 else  if(x==3'd4)                                         lcd_data_out<=8'h98 +y;//line4                                 else                                         lcd_data_out<=8'h80;                         end                           WRITERAM: begin                                    lcd_data_out <= data;                                   if(y==4'b0)                                         state <= SETMODE;                                 else                                         state <= IDLE;                         end                           STOP:   state<=IDLE;                           default: state<=IDLE;                   endcase           end                                      end   always@(char_cnt)   begin                           case(char_cnt)                                    6'd0:data_disp="G";                                    6'd1:data_disp="U";                                    6'd2:data_disp="X";                                    6'd3:data_disp="I";                                    6'd4:data_disp="A";                                    6'd5:data_disp="N";                                    6'd6:data_disp="Y";                                    6'd7:data_disp="I";                                    6'd8:data_disp="L";                                    6'd9:data_disp="C";                                    6'd10:data_disp="D";                                    6'd11:data_disp="!";                                                                            6'd12:data_disp="H";                                    6'd13:data_disp="E";                                    6'd14:data_disp="L";                                    6'd15:data_disp="L";                                    6'd16:data_disp="O";                                    6'd17:data_disp="E";                                    6'd18:data_disp="V";                                    6'd19:data_disp="E";                                    6'd20:data_disp="R";                                    6'd21:data_disp="Y";                                    6'd22:data_disp="O";                                    6'd23:data_disp="N";                                    6'd24:data_disp="E";             //      default:data_disp=8'h32;                           endcase                              end           endmodule

  • 发表了主题帖: 本人FPGA萌新一枚,跪求各位大神帮忙查看问题

       自己动手做矩阵键盘控制LCD12864,其他摁键的功能都可以正常显示,只有当摁下6 7两个数字的时候,屏幕就出现花屏的情况,但是屏幕里面可以隐隐约约的看到里面的数字。

    1. 【求助】 本人FPGA萌新一枚,跪求各位大神帮忙查看问题 13/2364 【stm32/stm8】 2018-05-17
    1. huo_hu 发表于 2018-5-19 21:34 抬起按键的时候能恢复吗? 能恢复多半是管脚冲突,不能的话就可能是软件问题了,12864是spi口还是并行数 ...
      摁键抬起来也是花屏。
    2. huo_hu 发表于 2018-5-18 17:01 什么叫 "只有当摁下6 7两个数字的时候,屏幕就出现花屏的情...." 看糊涂了
      我要实现的功能就是利用键盘控制LCD显示,12345890这几个摁键摁下 都没有问题 唯独6 7两个数字摁下就出现花屏的情况。
    3. ienglgge 发表于 2018-5-17 12:42 如果是自己做的板子。就好好检查一下硬件连接。虚焊,短路等。最好测一下,花屏时,发送到LCD12864的波形  ...
      好的 谢谢
    4. huo_hu 发表于 2018-5-17 14:40 估计是管脚冲突了
      不会的,这块板子是问一个老师借的,他给的电路图没有问题
    5. chunyang 发表于 2018-5-17 11:00 先检查有没有焊接问题等导致的短路、接触不良之类,按键按下时监看电源电压和IO口电平即可。如果没有这方面 ...
      但是软件仿真做出来没问题。。。。 硬件目测来看也没有问题  而且就只是 6 7两个数字出现了问题
    6. 【FPGA助学系列-12864显示的verilog实现】 51/19170 【Espier专区】 2018-05-17
      版主 你好 我是FPGA的萌新一枚  斗胆不才根据你的程序进行改编了一下,想做一个键盘控制12864显示,但是发现,但键盘摁下6和7 时  12864就会出现花屏的情况。 能帮忙看一下是那边出的问题吗  下面附有我改的代码 module lcd(//针对型号为RT12864-S                           input Sys_Clk,                           input Rst,                         input down,                         input right,                         input data_in,                         input clear,                         input [7:0] data,                         output reg LCD_RS,                           output LCD_RW,                           output LCD_E,                         output LCD_psb,                                  output LCD_Rst,                                output [7:0]lcd_data   //      output PSB//串并控制端口,H为并行,L为串行,直接接5v   //      output LCD_Rst,//液晶的复位端口,低电平有效   //由于端口不够,暂时让其悬空                           );   assign lcd_data = lcd_data_out; reg [7:0] lcd_data_out; reg LCD_Clk;   reg[7:0] state;//状态机寄存器   reg [23:0] cnt;//计数器   reg flag;//显示完成标志   reg[5:0]char_cnt;   reg[7:0]data_disp;//一个字节是八位,一个英文字符是一个字节,中文是俩个字节   reg [2:0] x; reg [3:0] y; parameter T500KHZ=24'd12287;   //  parameter T500KHZ=24'd24_999_999;//测试低频现象   //  parameter T500KHZ=24'd24_9;//仿真专用   //首先先对系统频率分频,液晶所需频率不用这么高,但是是多少呢?由datasheet可得出该液晶的最大频率是590kHZ   //典型值为530KH,为了好算取个值500KHZ,50M/500KHZ=10HZ,计数5M/2变化一次方向   assign LCD_psb = 1'b1; assign LCD_Rst = 1'b1; always@(posedge Sys_Clk or negedge Rst)   begin           if(!Rst)  begin                   cnt<=24'd0;                   LCD_Clk<=1'b0;           end           else if(cnt==T500KHZ)  begin                   cnt<=24'd0;                   LCD_Clk<=~LCD_Clk;           end           else                   cnt<=cnt+1'b1;   end           reg down_delay; reg right_delay; reg data_in_delay; reg clear_delay; reg down1; reg right1; reg data_in1; reg clear1; wire down_rise; wire right_rise; wire data_in_rise; wire clear_rise; always@(posedge Sys_Clk or negedge Rst)   begin         if (Rst == 1'b0)         begin                 down1 <= 1'b0;                 right1   <= 1'b0;                 data_in1                <= 1'b0;                 clear1                <= 1'b0;         end         else         begin                 down1 <= down;                 right1   <= right;                 data_in1     <= data_in;                 clear1 <= clear;         end end assign down_rise = (down == 1'b1) && (down1 == 1'b0); assign right_rise = (right == 1'b1) && (right1 == 1'b0); assign data_in_rise = (data_in == 1'b1) && (data_in1 == 1'b0); assign clear_rise = (clear == 1'b1) && (clear1 == 1'b0); always@(posedge Sys_Clk or negedge Rst)   begin           if(!Rst)  begin                    down_delay<=1'b0;           end           else if(down_rise==1'b1)                 down_delay<=1'b1;           else if(state != IDLE)                 down_delay<=1'b0;         else                 down_delay<=down_delay;   end always@(posedge Sys_Clk or negedge Rst)   begin           if(!Rst)  begin                    right_delay<=1'b0;           end           else if(right_rise==1'b1)                 right_delay<=1'b1;           else if(state != IDLE)                 right_delay<=1'b0;         else                 right_delay<=right_delay;   end always@(posedge Sys_Clk or negedge Rst)   begin           if(!Rst)  begin                    data_in_delay<=1'b0;           end           else if(data_in_rise==1'b1)                 data_in_delay<=1'b1;           else if(state != IDLE)                 data_in_delay<=1'b0;         else                 data_in_delay<=data_in_delay;   end   always@(posedge Sys_Clk or negedge Rst)   begin           if(!Rst)  begin                    clear_delay<=1'b0;           end           else if(clear_rise==1'b1)                 clear_delay<=1'b1;           else if(state != IDLE)                 clear_delay<=1'b0;         else                 clear_delay<=clear_delay;   end //state machine description,8个状态 只要用把位二进制就可以全部表示   parameter IDLE=8'b00_000_000;//初始状态   parameter SETFUNCTION=8'b00_000_001;//功能设置,8-bit+基本指令集0x30   parameter SETFUNCTION2=8'b00_000_010;//同上   parameter SWITCHMODE=8'b00_000_100;//设置显示开和光标闪烁关闭   parameter CLEAR=8'b00_001_000;//清屏操作   parameter SETMODE=8'b00_010_000;//点设置   parameter SETDDRAM=8'b00_100_000;//起始行设置   parameter WRITERAM=8'b01_000_000;//写设置   parameter STOP=8'b10_000_000;//LCD操作停止,释放其控制   parameter POWERUP =8'b00_000_011;//初始状态         //设置好RS、RW、E   always@(posedge LCD_Clk or negedge Rst)   begin           if(!Rst)                   LCD_RS<=1'b0;           else if(state==WRITERAM)                   LCD_RS<=1'b1;            else                   LCD_RS<=1'b0;   end           //如果定义了LCD_Rst俩个端口的话,可做如下设置   //assign LCD_Rst=1'b1;   //assign PSB=1'b1;   assign LCD_RW=1'b0;//只是写操作,不需要读操作   assign LCD_E=(flag==1)?LCD_Clk:1'b0;//使能信号与液晶时钟同步           //descible the state machine   always@(posedge LCD_Clk or negedge Rst)   begin           if(!Rst)  begin                   state<=POWERUP;                   lcd_data_out<=8'bzz_zzz_zzz;                 x <= 3'b1;                 y <= 4'b0;                 flag<=1'b1;          end           else  begin                   case(state)                           POWERUP:  begin                                    state<=SETFUNCTION;                                    lcd_data_out<=8'h30;                                  flag<=1'b1;                         end                           IDLE:  begin                                     flag<=1'b1;                                  if(down_delay == 1'b1) begin                                         if(x == 3'd4)                                                 x <= 3'b1;                                         else                                                 x <= x +3'b1;                                         state <= SETDDRAM;                                  end                                  else if(right_delay == 1'b1) begin                                         state <= SETDDRAM;                                         y <= y +4'b1;                                         if((x == 3'd4) &&(y == 4'd15))                                                 x <= 3'd1;                                         else if(y == 4'd15)                                                 x <= x +3'b1;                                         else                                                 x <= x;                                 end                                 else if(data_in_delay == 1'b1) begin                                         state <= WRITERAM;                                         y <= y +4'b1;                                         if((x == 3'd4) &&(y == 4'd15))                                                 x <= 3'd1;                                         else if(y == 4'd15)                                                 x <= x +3'b1;                                         else                                                 x <= x;                                 end                                 else if(clear_delay == 1'b1) begin                                         state<=SETFUNCTION;                                           lcd_data_out<=8'h30;                                         flag<=1'b1;                                         x <= 1;                                         y <= 0;                                 end                                 else begin                                         x <= x;                                         y <= y;                                 end                         end                         SETFUNCTION: begin                                   state<=SWITCHMODE;                                   state<=SETFUNCTION2;                                   lcd_data_out<=8'h30;                           end                           SETFUNCTION2:begin                                      state<=SWITCHMODE;                                   lcd_data_out<=8'h30;                           end                           SWITCHMODE:begin                                   state<=CLEAR;                                   lcd_data_out<=8'h0f;//显示设置,全显示开,光标和闪烁关                           end                           CLEAR:begin                                   state<=SETMODE;                                   lcd_data_out<=8'h01;//清屏、                           end                           SETMODE: begin                                   state<=SETDDRAM;                                   lcd_data_out<=8'h06;//点设置,光标右移,地址加一,整体不动                           end                           SETDDRAM: begin //设置起始位置                                   state<=IDLE;                                   if(x==3'd1)                                           lcd_data_out<=8'h80 +y;//line1                                   else  if(x==3'd2)                                         lcd_data_out<=8'h90 +y;//line2                                 else  if(x==3'd3)                                         lcd_data_out<=8'h88 +y;//line3                                 else  if(x==3'd4)                                         lcd_data_out<=8'h98 +y;//line4                                 else                                         lcd_data_out<=8'h80;                         end                           WRITERAM: begin                                    lcd_data_out <= data;                                   if(y==4'b0)                                         state <= SETMODE;                                 else                                         state <= IDLE;                         end                           STOP:   state<=IDLE;                           default: state<=IDLE;                   endcase           end                                      end   always@(char_cnt)   begin                           case(char_cnt)                                    6'd0:data_disp="G";                                    6'd1:data_disp="U";                                    6'd2:data_disp="X";                                    6'd3:data_disp="I";                                    6'd4:data_disp="A";                                    6'd5:data_disp="N";                                    6'd6:data_disp="Y";                                    6'd7:data_disp="I";                                    6'd8:data_disp="L";                                    6'd9:data_disp="C";                                    6'd10:data_disp="D";                                    6'd11:data_disp="!";                                                                            6'd12:data_disp="H";                                    6'd13:data_disp="E";                                    6'd14:data_disp="L";                                    6'd15:data_disp="L";                                    6'd16:data_disp="O";                                    6'd17:data_disp="E";                                    6'd18:data_disp="V";                                    6'd19:data_disp="E";                                    6'd20:data_disp="R";                                    6'd21:data_disp="Y";                                    6'd22:data_disp="O";                                    6'd23:data_disp="N";                                    6'd24:data_disp="E";             //      default:data_disp=8'h32;                           endcase                              end           endmodule
  • TA暂时无记录哦~
  • TA暂时无记录哦~
  • TA暂时无记录哦~
TA暂时无记录哦~

最近访客

< 1/1 >

统计信息

已有1人来访过

  • 芯币:24
  • 好友:--
  • 主题:1
  • 回复:6
  • 课时:--
  • 资源:--

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言