写数据到LCD显示器

LCD12864数据写入方式(16位字符如何通过8位变量写入)及时序问题 数据的写入,先高8位在低8位;数组的存储,从地址高到地地址;多字节数据,先高位,再低位;数组最后一位位‘‘\0’;如8位数组,写了4位,其余4位为空,最后一位为‘’\0’;(开始出现此问题,后面有没有了)循环写入数据到LCD12864,奇数位(8进制数)数组最后1位可能写不进去,因为需要满两个数(8进制数)才乐意显示,但是最后一位为‘'\0’而直接结束。1、字符串“你好AAA”需要加空格 2、table[5]={“你好你A”}; 阅读详情

本博文介绍如何向开发板上集成的LCD显示器写数据以显示。

一、实验效果

1、LCD显示器可以显示

Created by         和      clear lcd
        lulipeng                   lulipeng

2、通过滑动开关SW0(L13)和SW1(L14)可以在两种显示之间任意切换。

 

二、设计过程

1、LCD的控制器内部有DD RAM(显示字符存储器),用户就是向其中写入要显示的字符编码的(ASCII码)。

CG ROM内部已存储了字符集,每个字符的索引也就是其ASCII码。比如u的索引就是0111 0101。

2、在写之前就要把数据都存放到指定的位置。也就是要用户指定存储地址存储字符以便将来写。

3、LCD加电后其初始化是有一定的过程的。

初始化的第一步骤是建立FPGA与LCD的4位的数据接口,具体如下:

A:等待15ms或更长,尽管FPGA完成配置后显示屏一般处于准备就绪状态。在50MHz时,15ms时间等于750000时钟周期。

B:写SF_D<11:8>=0x3,LCD_E保持高电平12时钟周期。

C:等待4.1ms或更长,即在50MHz时,205000时钟周期。

D:写SF_D<11:8>=0x3,LCD_E保持高电平12时钟周期。

E:等待100us或更长,即在50MHz时,5000时钟周期。

F:写SF_D<11:8>=0x3,LCD_E保持高电平12时钟周期。

G:等待40us或更长,即在50MHz时,2000时钟周期。

H:写SF_D<11:8>=0x2,LCD_E保持高电平12时钟周期。

I:等待40us或更长,即在50MHz时,2000时钟周期。

4、初始化之后要配置显示屏

上电初始化完成后,4位的数据接口就建立了。下一步就是配置显示屏了:

A:发一个功能设置命令,0x28,配置显示屏。

B:发一个进入模式命令,0X06,设置显示屏自动增地址指针。

C:发一个显示开/断命令,0x0c,开显示屏并失能指针和光标。

D:最后,发清屏命令,此后等待至少1.64ms(82000时钟周期)。

5、此外,还要设置字符是否滚动显示,还是静止。大家可以参考用户指导手册自行决定。

 

三、代码集锦

1、verilog源码

module lcd_display(CLK, RST, LCD_E, LCD_RS, LCD_RW, SF_CE0, LCD_DATA, CLR );
input CLK; // System clk=50MHz
input RST; // system reset,high active
input CLR; // Clear display

output [3:0] LCD_DATA; // to lcd
output LCD_E; // Read/write Enable Pulse ,0:Disable ,1:Read/Write Operation enabled
output LCD_RS; // 0: Instruction register ,1: Data for read or write operations
output LCD_RW; // Read/Write control 0:write,1: read
output SF_CE0; // StrataFlash selected,0:enable,1:disable

reg LCD_E;
reg LCD_RS;
reg [3:0] LCD_DATA;
reg [24:0] cnt_num;
reg [24:0] counter;
reg [5:0] state;
reg [5:0] next_state;
reg flag;
integer i;
parameter longth_1 = 15;
parameter longth = 19;
parameter longth_2 = 17;
reg [3:0] mem [longth:0];
reg [3:0] char [longth_1:0];
reg [3:0] clear [longth_2:0];
initial begin
 i = 0;
 flag = 0;
 /*date to be writed to lcd
   Created by
           lulipeng*/
// C 
mem[0] = 4'h4;
mem[1] = 4'h3;
//r
mem[2] = 4'h7; 
mem[3] = 4'h2;
//e
mem[4] = 4'h6;
mem[5] = 4'h5;
//a
mem[6] = 4'h6;
mem[7] = 4'h1;
//t
mem[8] = 4'h7;
mem[9] = 4'h4;
//e
mem[10] = 4'h6;
mem[11] = 4'h5;
//d
mem[12] = 4'h6;
mem[13] = 4'h4;
//blank
mem[14] = 4'hf;
mem[15] = 4'he;
//b
mem[16] = 4'h6;
mem[17] = 4'h2;
//y
mem[18] = 4'h7;
mem[19] = 4'h9;

//l
char[0] = 4'h6;
char[1] = 4'hC;
//u
char[2] = 4'h7;
char[3] = 4'h5;
//l
char[4] = 4'h6;
char[5] = 4'hC;
//i
char[6] = 4'h6;
char[7] = 4'h9;
//p
char[8] = 4'h7;
char[9] = 4'h0;
//e
char[10] = 4'h6;
char[11] = 4'h5;
//n
char[12] = 4'h6;
char[13] = 4'hE;
//g
char[14] = 4'h6;
char[15] = 4'h7;

//c
clear[0] = 4'h6;
clear[1] = 4'h3;
//l
clear[2] = 4'h6;
clear[3] = 4'hC;
//e
clear[4] = 4'h6;
clear[5] = 4'h5;
//a
clear[6] = 4'h6;
clear[7] = 4'h1;
//r
clear[8] = 4'h7;
clear[9] = 4'h2;
//blank
clear[10] = 4'hf;
clear[11] = 4'he;
//l
clear[12] = 4'h6;
clear[13] = 4'hC;
//c
clear[14] = 4'h6;
clear[15] = 4'h3;
//d
clear[16] = 4'h6;
clear[17] = 4'h4;
end

parameter idle = 6'b000000,
          state1 = 6'd1,    state2 = 6'd2,    state3 = 6'd3,    state4 = 6'd4,
			 state5 = 6'd5,    state6 = 6'd6,    state7 = 6'd7,    state8 = 6'd8,
			 state9 = 6'd9,    state10 = 6'd10,  state11 = 6'd11,  state12 = 6'd12,
			 state13 = 6'd13,  state14 = 6'd14,  state15 = 6'd15,  state16 = 6'd16,
			 state17 = 6'd17,  state18 = 6'd18,  state19 = 6'd19,  state20 = 6'd20,
			 state21 = 6'd21,  state22 = 6'd22,  state23 = 6'd23,  state24 = 6'd24,
			 state25 = 6'd25,  state26 = 6'd26,  state27 = 6'd27,  state28 = 6'd28,
			 state29 = 6'd29,  state30 = 6'd30,  state31 = 6'd31,  state32 = 6'd32, 
			 state33 = 6'd33,	 state34 = 6'd34,  state35 = 6'd35,  state36 = 6'd36, 
			 state37 = 6'd37,  state38 = 6'd38,	 state39 = 6'd39,  state40 = 6'd40,  
			 state41 = 6'd41,  state42 = 6'd42,  state43 = 6'd43,  state44 = 6'd44,  
			 state45 = 6'd45,  state46 = 6'd46,  state47 = 6'd47,	 state48 = 6'd48,
			 state49 = 6'd49,  state50 = 6'd50,  state51 = 6'd51,	 state52 = 6'd52;
			 
assign LCD_RW = 0; // Write data to lcd only
assign SF_CE0 = 1; //Disable the StrataFlash

/* time delay,  when cnt_num equals to counter, the state 
   changes to the next state specified by next_state */
always @ (posedge CLK or posedge RST)begin
	if(RST)begin
		state <= idle;
		cnt_num <=25'd0;
	end
	else if(cnt_num == counter) begin
	    state <= next_state;
		 cnt_num <= 25'd0;
	end
	else cnt_num <= cnt_num + 1'b1;
end

/* initialize the lcd  after power on */
always @ (posedge CLK or posedge RST)begin
	if(RST)begin
		next_state <= idle;
		counter <= 25'd0;
	end
	else if(CLR) begin
		next_state <= idle;
		flag <= 1;
		i <= 0;
	end
	else begin
		case (state)
		idle: begin
				 next_state <= state1;
				 counter <= 25'd750000; //wait for 15ms
				 LCD_E <= 0;
				 LCD_RS <= 0;
		      end
		state1: begin
					next_state <= state2;
					LCD_E <= 1;
					LCD_DATA <= 4'h3; // write 0x3;
					counter <= 25'd12; //hold for 12 clocks
		        end
		state2: begin
					next_state <= state3;
					LCD_E <= 0;
					counter <= 25'd205000; //wait for 4.1ms
		        end
		state3: begin
					next_state <= state4;
					LCD_E <= 1;
					LCD_DATA <= 4'h3; // write 0x3;
					counter <= 25'd12;//hold for 12 clocks
		        end	
     	state4: begin
					next_state <= state5;
					LCD_E <= 0;
					counter <= 25'd5000; //wait for 100us
		        end
      state5: begin
					next_state <= state6;
					LCD_E <= 1;
					LCD_DATA <= 4'h3; // write 0x3;
					counter <= 25'd12; //hold for 12 clocks
		        end
		state6: begin
					next_state <= state7;
					LCD_E <= 0;
					counter <= 25'd2000; //wait for 40us
		        end	
		state7: begin
					next_state <= state8;
					LCD_E <= 1;
					LCD_DATA <= 4'h2; // write 0x2;
					counter <= 25'd12; //hold for 12 clocks
		        end
		state8: begin
					next_state <= state9;
					LCD_E <= 0;
					counter <= 25'd2000; //wait for 40us
		        end	
/* LCD initial finished , config LCD 0X28 */
      state9: begin
					next_state <= state10;
					LCD_E <= 1;
					LCD_RS <= 0;
					LCD_DATA <= 4'h2; // write 0x2;
					counter <= 25'd12; //hold for 12 clocks
		        end
		state10: begin
					next_state <= state11;
					LCD_E <= 0;
					counter <= 25'd50; //wait for 1us
		        end
      state11: begin
					next_state <= state12;
					LCD_E <= 1;
					LCD_DATA <= 4'h8; // write 0x8;
					counter <= 25'd12; //hold for 12 clocks
		        end
		state12: begin
					next_state <= state13;
					LCD_E <= 0;
					counter <= 25'd2000; //wait for 40us
		        end					  
/* Set entry mode 0x06 */
      state13: begin
					next_state <= state14;
					LCD_E <= 1;
					//LCD_RS <= 0;
					LCD_DATA <= 4'h0; // write 0x0;
					counter <= 25'd12; //hold for 12 clocks
		        end
		state14: begin
					next_state <= state15;
					LCD_E <= 0;
					counter <= 25'd50; //wait for 1us
		        end
      state15: begin
					next_state <= state16;
					LCD_E <= 1;
					LCD_DATA <= 4'h6; // write 0x6;
					counter <= 25'd12; //hold for 12 clocks
		        end
		state16: begin
					next_state <= state17;
					LCD_E <= 0;
					counter <= 25'd2000; //wait for 40us
		        end	
/* set display on, course off, blinking off 0x0c */
      state17: begin
					next_state <= state18;
					LCD_E <= 1;
					//LCD_RS <= 0;
					LCD_DATA <= 4'h0; // write 0x0;
					counter <= 25'd12; //hold for 12 clocks
		        end
		state18: begin
					next_state <= state19;
					LCD_E <= 0;
					counter <= 25'd50; //wait for 1us
		        end
      state19: begin
					next_state <= state20;
					LCD_E <= 1;
					LCD_DATA <= 4'hc; // write 0xc;
					counter <= 25'd12; //hold for 12 clocks
		        end
		state20: begin
					next_state <= state21;
					LCD_E <= 0;
					counter <= 25'd2000; //wait for 40us
		        end	
/* clear dispaly 0x01 */
      state21: begin
					next_state <= state22;
					LCD_E <= 1;
					//LCD_RS <= 0;
					LCD_DATA <= 4'h0; // write 0x0;
					counter <= 25'd12; //hold for 12 clocks
		        end
		state22: begin
					next_state <= state23;
					LCD_E <= 0;
					counter <= 25'd50; //wait for 1us
		        end
      state23: begin
					next_state <= state24;
					LCD_E <= 1;
					LCD_DATA <= 4'h1; // write 0x1;
					counter <= 25'd12; //hold for 12 clocks
		        end
		state24: begin
					next_state <= state25;
					LCD_E <= 0;
					counter <= 25'd82000; //wait for 1.64ms
		        end	
/* set DD RAM address 0x80 */
      state25: begin
					next_state <= state26;
					LCD_E <= 1;
					//LCD_RS <= 0;
					LCD_DATA <= 4'h8; // write 0x8;
					counter <= 25'd12; //hold for 12 clocks
		        end
		state26: begin
					next_state <= state27;
					LCD_E <= 0;
					counter <= 25'd50; //wait for 1us
		        end
      state27: begin
					next_state <= state28;
					LCD_E <= 1;
					LCD_DATA <= 4'h0; // write 0x0;
					counter <= 25'd12; //hold for 12 clocks
		        end
		state28: begin
					if ( flag )begin
					   next_state <= state29;
						//flag <= 0;   //flag写到这就不能达到切换的效果
					end
					else begin
						next_state <= state48;						
					end
					LCD_E <= 0;
					counter <= 25'd2000; //wait for 40us
		        end	
/* send character "Created by" */
      state29: begin
					flag <= 0;    //flag写到这则可以
		         if(i < longth) begin
					next_state <= state30;
					LCD_E <= 1;
					LCD_RS <= 1;
					LCD_DATA <= mem[i]; // write date to lcd
					counter <= 25'd12; //hold for 12 clocks
					end
					else begin
					  next_state <= state34;
					  counter <= 25'd2000; //wait for 40us
					end
		        end
		state30: begin
					next_state <= state31;
					LCD_E <= 0;
					counter <= 25'd50; //wait for 1us
		        end
      state31: begin
					next_state <= state32;
					LCD_E <= 1;
					LCD_DATA <= mem[i+1]; // write date to lcd;
					counter <= 25'd12; //hold for 12 clocks
		        end
		state32: begin
					next_state <= state33;
					LCD_E <= 0;
					counter <= 25'd2000; //wait for 40us
		        end	
		state33: begin
					 next_state <= state29;
					 i <= i + 1;
					 counter <= 25'd1; 
		         end
/* set DDRAM address 0xd8 */
		state34: begin
	         	i <= 0;
					next_state <= state35;
					LCD_E <= 1;
					LCD_RS <= 0;
					LCD_DATA <= 4'hc; // write 0xc;
					counter <= 25'd12; //hold for 12 clocks
		        end
		state35: begin
					next_state <= state36;
					LCD_E <= 0;
					counter <= 25'd50; //wait for 1us
		        end
      state36: begin
					next_state <= state37;
					LCD_E <= 1;
					LCD_DATA <= 4'h8; // write 0x8;
					counter <= 25'd12; //hold for 12 clocks
		        end
		state37: begin
					next_state <= state38;
					LCD_E <= 0;
					counter <= 25'd2000; //wait for 40us
		        end	
/* send "lulipeng" */
      state38: begin
		         if(i < longth_1) begin
					next_state <= state39;
					LCD_E <= 1;
					LCD_RS <= 1;
					LCD_DATA <= char[i]; // write date to lcd;
					counter <= 25'd12; //hold for 12 clocks
					end
					else begin
					  next_state <= state43;
					  counter <= 25'd2000; //wait for 40us
					end
		        end
		state39: begin
					next_state <= state40;
					LCD_E <= 0;
					counter <= 25'd50; //wait for 1us
		        end
      state40: begin
					next_state <= state41;
					LCD_E <= 1;
					LCD_DATA <= char[i+1]; // write date to lcd;
					counter <= 25'd12; //hold for 12 clocks
		        end
		state41: begin
					next_state <= state42;
					LCD_E <= 0;
					counter <= 25'd2000; //wait for 40us
		        end	
		state42: begin
					 next_state <= state38;
					 i <= i + 1;
					 counter <= 25'd1; 
		         end
/* send "clear lcd" */					
      state48: begin
		         if(i < longth_2) begin
					next_state <= state49;
					LCD_E <= 1;
					LCD_RS <= 1;
					LCD_DATA <= clear[i]; // write date to lcd;
					counter <= 25'd12; //hold for 12 clocks
					end
					else begin
					  next_state <= state34;
					  counter <= 25'd2000; //wait for 40us
					end
		        end
		state49: begin
					next_state <= state50;
					LCD_E <= 0;
					counter <= 25'd50; //wait for 1us
		        end
      state50: begin
					next_state <= state51;
					LCD_E <= 1;
					LCD_DATA <= clear[i+1]; // write date to lcd;
					counter <= 25'd12; //hold for 12 clocks
		        end
		state51: begin
					next_state <= state52;
					LCD_E <= 0;
					counter <= 25'd2000; //wait for 40us
		        end	
		state52: begin
					 next_state <= state48;
					 i <= i + 1;
					 counter <= 25'd1; 
		         end					
/* set course and display shift ,0x10 */
      state43: begin
	         	i <= 0;
					next_state <= state44;
					LCD_E <= 1;
					LCD_RS <= 0;
					LCD_DATA <= 4'h1; // write 0x1;
					counter <= 25'd12; //hold for 12 clocks
		        end
		state44: begin
					next_state <= state45;
					LCD_E <= 0;
					counter <= 25'd50; //wait for 1us
		        end
      state45: begin
					next_state <= state46;
					LCD_E <= 1;
					LCD_DATA <= 4'h0; // write 0x0;
					counter <= 25'd12; //hold for 12 clocks
		        end
		state46: begin
					next_state <= state47;
					LCD_E <= 0;
					counter <= 25'd2000; //wait for 40us
		        end	
/* delay for a while */
      state47: begin
					 next_state <= state43;
					 counter <= 25'd25000000;
		         end				  
		default: next_state <= idle;
      endcase				     
	end
end

endmodule

2、ucf文件

NET  "CLK"      LOC = "C9"   | IOSTANDARD = LVTTL ; 
NET  "RST"      LOC = "L13"  | IOSTANDARD = LVTTL    | PULLUP    | DRIVE = 2 ;
NET  "CLR"      LOC = "L14"  | IOSTANDARD = LVTTL    | PULLUP    | DRIVE = 2 ;
NET  "SF_CE0"   LOC = "D16"  | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = SLOW ; 
NET  "LCD_E"    LOC  = "M18" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = SLOW ;
NET  "LCD_RS"   LOC  = "L18" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = SLOW ;
NET  "LCD_RW"   LOC  = "L17" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = SLOW ;
NET  "LCD_DATA[0]"  LOC  = "R15" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = SLOW ;
NET  "LCD_DATA[1]"  LOC  = "R16" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = SLOW ;
NET  "LCD_DATA[2]"  LOC  = "P17" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = SLOW ;
NET  "LCD_DATA[3]"  LOC  = "M15" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = SLOW ;

3、激励文件

module test;

	// Inputs
	reg CLK;
	reg RST;
	reg CLR;

	// Outputs
	wire LCD_E;
	wire LCD_RS;
	wire LCD_RW;
	wire SF_CE0;
	wire [3:0] LCD_DATA;

	// Instantiate the Unit Under Test (UUT)
	lcd_display uut (
		.CLK(CLK), 
		.RST(RST), 
		.LCD_E(LCD_E), 
		.LCD_RS(LCD_RS), 
		.LCD_RW(LCD_RW), 
		.SF_CE0(SF_CE0), 
		.LCD_DATA(LCD_DATA), 
		.CLR(CLR)
	);

        always #5 CLK = ~CLK;

	initial begin
		// Initialize Inputs
		CLK = 0;
		RST = 1;
		CLR = 0;

		// Wait 100 ns for global reset to finish
		#100;
                RST = 0; 
		// Add stimulus here

	end
      
endmodule

 

四、开发板的基础资料。对板子上各个设备的用法都有介绍。

Spartan-3E_Starter_Kit_Board_User_Guide
 

基于C51单片机+DS18B20温度传感器+LCD1602显示器的智能水温控制系统(PID) void wr_data(uchar shuju)//LCD液晶写数据。+ p->Integral * p->SumError //积分项。return (p->Proportion * Error//比例。void ds1820wr(uchar wdata)//写数据。void wr_com(uchar ml)//LCD液晶写命令。void init() //按照时序操作的初始化。void dis_temp(int t)//显示温度。uchar ds1820rd(void)//读数据。 阅读详情

相关推荐

LCD1602(液晶显示屏)

1.Proteus 8 仿真器2.keil 5 编辑器。

爱吃编程的苦 2638

一文助你进阶使用 LCD1602 液晶显示屏

顾名思义,该函数就是根据字模库将数字转换为对应的十六进制数字。// 显示 0 break;// 显示 1 break;// 显示 2 break;// 显示 3 break;// 显示 4 break;//显示 5 break;// 显示 6 break;// 显示 7 break;// 显示 8 break;// 显示 9 break;

AnAn_New的博客 1891

LCD1602的数据写入及CGRAM的使用.pdf

LCD1602的数据写入及CGRAM的使用

51单片机学习7--LCD1602

首先确定位置,第1行第3列的地址是02,转换为2进制就是0000 0010,但是LCD1602有自己的规矩,就是写地址的时候,最高位必须是1,也就是说写进LCD的地址应该为1000 0010。LCD1602能同时显示2行16列,一共32个位置,每个位置都对应着一个地址,每个地址里面可以促一个字节的字符,需要在哪个位置显示某种字符,就在他对应的地址上写入某种字符。LCD1602的指令都理解之后,就是怎么应用了,自己多尝试吧,单独的LCD显示意义不大,一般用来显示项目中的某个或某些参数,后续慢慢展开。

m0_49968063的博客 5836

从ResNet到EfficientNet:特征金字塔网络(FPN)在不同骨干网中的适配指南

本文深入探讨了特征金字塔网络(FPN)与ResNet、VGG、EfficientNet等主流骨干网络的适配策略。文章详细解析了FPN的核心原理,并针对不同骨干网络的特征提取特性,提供了通道对齐、参数量估算及迁移学习的系统化指南,旨在帮助开发者在目标检测等视觉任务中构建高性能、高效率的模型。

weixin_29047919的博客 221

【驱动适配】高通sa522平台tac5x1x驱动适配全指南

本手册详细介绍了TAC5301-Q1音频编解码器在高通sa525平台Linux系统下的驱动适配流程。主要内容包括:1)TAC5301-Q1核心特性(车载级音频Codec、关键接口和功能);2)驱动适配依赖(高通声卡驱动、ALSA SoC框架等);3)I2S协议原理及主从模式说明;4)硬件准备与检查要点;5)完整的驱动移植步骤(代码移植、Kconfig/Makefile修改、设备树配置)。该手册适用于嵌入式音频开发工程师快速完成TAC5301-Q1芯片的驱动移植与验证工作。

嵌入式博哥的博客 305

关于在LCD上写字的这件事(字库串口录入加调用)

如何在LCD上写字 说明: 在LCD上显示ASCII码时,会先将ASCII码对应的图像数组录入到内部FLASH,再直接读取写入就好。但是由于字库过大,甚至比芯片内部FLASH的存储内存还大,所以需要将字库录入外部FLASH,由于字库中每个汉字的顺序也是固定的,所以可以定位到对应的FLASH存储区来读取汉字图像信息。 思路:我采用的是最简单粗暴的方式,通过串口发送字库的二进制文件到单片机中,单片机接收到信息再转存到FLASH中。 1.字库录入 (1)芯片清除 一般外部FLASH的封装库都会带有这个API函

weixin_45728705的博客 1555

深入解析JESD204B Subclass 1中的SYSREF与LMFC同步机制

本文深入解析了JESD204B Subclass 1协议中的核心同步机制,重点阐述了SYSREF信号如何作为系统级参考,对齐所有设备内部的本地多帧时钟(LMFC),从而实现高速多通道数据采集系统中的确定性延迟。文章结合实战经验,详细说明了硬件设计、时序要点及软件配置流程,是解决多ADC芯片同步对齐问题的关键指南。

weixin_29271263的博客 399

STM32——驱动LCD1602

LCD1602驱动测试

火红色祥云 3676

ubuntu虚拟机搭建OP-TEE

在网上找了一些搭建OP-TEE的过程,模仿着进行搭建,结果有好多报错,为了方便自己以后重新搭建,所以将整个过程记录下来。

weixin_44213847的博客 1001

FPGA音频处理入门:手把手教你用Verilog实现I2S接收模块(附完整代码)

本文详细介绍了如何使用Verilog在FPGA上实现I2S接收模块,涵盖I2S协议原理、Verilog架构设计、完整代码实现及优化技巧。通过实战案例,帮助开发者快速掌握数字音频处理技术,适用于嵌入式音频系统开发。

weixin_30335575的博客 419

10.lcd1602显示屏显示字符和字符串

LCD1602(Liquid Crystal Display)是一种工业字符型液晶,能够同时显示 16×02 即 32 字符(16列两行)

黄色的拉拉的博客 2549

教你如何阅读Autosar代码(6):常量变量定义

编译器抽象应该为常量的声明和定义定义CONST宏。编译器抽象应该定义VAR宏来声明和定义变量。memclass:常量本身的分类;memclass:变量本身的分类;vartype:变量的类型;type:常量的类型;

wdconan001的博客 958

基于51单片机+LCD1602显示

LCD1602显示介绍及程序LCD1602介绍写命令 代码写数据 代码LCD1602显示程序步骤及如何初始化具体需要初始化什么?具体指令相关介绍:初始化代码原理图及显示程序最终项目展示 LCD1602介绍 LCD1602相关引脚 LCD1602写命令、写数据相关操作图 根据上面时序图和时序参数图我们可以写出 写命令代码 和写数据代码 写命令 代码 写命令 void write_com(char command) { RS = 0; RW = 0; //高读低写 LCD = command;

weixin_47457689的博客 1万+

学 Simulink—— 基于高频方波电压注入的表贴式永磁电机无感控制仿真

本文手把手教授基于Simulink的高频方波电压注入法实现表贴式永磁同步电机(SPMSM)无传感器控制。针对表贴式电机微弱凸极特性(Lq/Ld≈1.05-1.15),详解方波注入相比正弦注入的优势:通过5kHz方波(PWM频率半值)集中能量提升信噪比,并采用相邻周期电流直接相减的零延迟分离技术。系统架构包含高频注入器、无滤波器信号分离模块、锁相环观测器和磁饱和极性辨识等关键环节,提供参数设置经验(如注入幅值10-15%Vdc)和典型性能指标(位置误差<0.2rad)。特别强调工程实现要点:PWM同步时

xiaoheshang_123的博客 168

探索激光焊接光束质量诊断系统:原理、应用与前沿

激光焊接光束质量诊断系统是一套专门用于精确评估和监测激光焊接过程中光束特性的精密设备。它宛如一个精密的 “光束医生”,能够全方位地对激光光束进行 “体检”,为焊接工艺提供关键的数据支持。探测器:作为系统的 “感知触角”,探测器负责捕捉激光光束的各种信息,其性能直接影响着诊断的准确性。例如,常见的 CCD(电荷耦合器件)探测器和 CMOS(互补金属氧化物半导体)探测器,它们能够将光信号转化为电信号,具有高灵敏度、高分辨率等特点,可精确探测光束的强度分布、光斑位置等参数。光学透镜。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 2586

驱动LCD液晶显示器

参考文章链接。

weixin_49038319的博客 664

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

单片机c语言1602怎么接线,lcd1602与单片机连接图 - lcd1602中文资料分享:lcd1602接线图_lcd1602与单片机连接图...

lcd1602中文资料-----LCD1602的3引脚VO怎么接VO为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。LCD1602的VO引脚必须不能悬空,要连接一个滑动变阻器来调节的,当然LCD1602有多种型号,但是大多数的VO脚只有两种情况:一个是VO脚接18欧的下拉电阻接地,一个是接1k欧的电阻接地,当...

weixin_29035147的博客 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

LCD1602液晶例程

LCD.H #ifndef uint #define uint unsigned int #endif /********************************** PIN口定义 **********************************/ #define LCD1602_DATAPINS P0 sbit LCD1602_E=P2^7; sbit LCD1602_RW...

weixin_46001221的博客 1649

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

protues软件仿真-LCD1602

proteus 软件仿真之LCD1602 大二电子专业小白一名,平时闲来无事在学校老师实验室自学,自学过程中发现一些有困扰到自己的地方,所以特来此记录。一是当作自己学习笔记;二是有幸帮助到有和自己遇到相同问题的童鞋,也是一大善事。应个人水平能力有限,错误之处还请及时纠正。 仿真原理图 以下为程序源代码 #include "stdio.h" #include "reg52.h" #define ......

weixin_42315192的博客 2万+

(详细注释)单片机lcd1602液晶显示

/单片机lcd1602液晶显示/ #include"reg52.h" #define u8 unsigned char //定义变量数据类型 #define u16 unsigned int sbit rs=P2^6;//写数据/命令Io口 sbit wr=P2^5;//读/写操作IO口 sbit lcd_en=P2^7;//lcd使能端 u16 i,j; u8 num; u8 code tabl...

qq_39768922的博客 3217

DSP之LCD1602笔记

dsp lcd1602驱动

qq_39048131的博客 3295

基于C51单片机设计的液晶LCD1602上显示两行字符软件源码

/相应坐标显示字节内容。/***********初始化********************************************************//********数据定义*************************************************************//********函数声明*************************************************************/void LCDInit(void);

GJZGRB的博客 1056

LCD 1602 稳定显示 [李园7舍_404]

1LCD 1602简介笔记整理 LCD1602可显示两行,每行16个字符,不能显示汉字。16脚的LCD 1602带背光,14脚的不带背光。   2LCD1602 端口引脚 不一一记录手册上面是咋个描述LCD 1602的了。记录一下操作过程,下图是LCD 1602在51单片机上面的连线。   图1 LCD 与单片机接线图 D0-D7引脚连接在单片机的P0端口。 LCD_RS

记一忘三二 1万+

LCD1602

【代码】LCD1602。

m0_60322134的博客 167

LCD滚动显示

/*----------------------------------------------- 名称:LCD1602 内容:通过标准程序移屏滚动显示字符 引脚定义如下:1-VSS 2-VDD 3-V0 4-RS 5-R/W 6-E 7-14 DB0-DB7 15-BLA 16-BLK ------------------------------------------------*/

XuLujun优快云 8641
上一篇: spartan-3e starter kit board 入门
下一篇: VGA接口之显示彩色条
lulipeng_cpp
博客等级 码龄15年 169粉丝 130原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值