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

📄 lcd_control.v

📁 ise9.1官方的使用手册中配套用的fpga入门代码
💻 V
📖 第 1 页 / 共 3 页
字号:
`timescale 1ns / 1ps////////////////////////////////////////////////////////////////////////////////// Company: 		 Xilinx//// Create Date:    10:05:26 03/07/07// Design Name:    Stopwatch// Module Name:    lcd_control// Project Name:   ISE In Depth Tutorial// Target Device:  xc3sA700-4fg484// Tool versions:  ISE 9.1i// Description: controls LCD display for Spartan-3A demo board//////////////////////////////////////////////////////////////////////////////////module lcd_control(rst,clk,lap,mode,hundredths,tenths,ones,                     tens,minutes,control,sf_d);    input    rst;    input    clk;   input    lap;	input	 	mode;	input	 	[3:0] hundredths;	input	 	[3:0] tenths;	input	 	[3:0] ones;	input	 	[3:0] tens;	input	 	[3:0] minutes;    output   [2:0] control; // LCD_RS, LCD_RW, LCD_E   output   [7:0] sf_d; //LCD data bus	reg [5:0] state,next_state;	`define waiting 			6'b000000	`define init1	         6'b000001	`define init2	         6'b000010	`define init3	         6'b000011	`define init4           6'b000100	`define init5           6'b000101	`define init6	         6'b000110	`define init7           6'b000111	`define word1           6'b001000	`define word2	         6'b001001	`define word3           6'b001010	`define word4           6'b001011	`define word5			 	6'b001100	`define alt_word5       6'b001101	`define word6           6'b001110	`define word7           6'b001111	`define word8           6'b010000	`define word9           6'b010001	`define word10          6'b010010	`define time_display1   6'b010011	`define time_display2   6'b010100	`define time_display3   6'b010101	`define time_display4   6'b010110	`define time_display5   6'b010111	`define time_display6	6'b011000	`define time_display7   6'b011001	`define time_display8   6'b011010	`define time_display9   6'b011011	`define time_display10  6'b011100	`define time_display11  6'b011101	`define time_display12  6'b011110	`define time_display13  6'b011111	`define time_display14  6'b100000	`define lap_display1    6'b100001	`define lap_display2    6'b100010	`define lap_display3    6'b100011	`define lap_display4		6'b100100	`define lap_display5    6'b100101	`define lap_display6    6'b100110	`define lap_display7    6'b100111	`define lap_display8    6'b101000	`define lap_display9    6'b101001	`define lap_display10   6'b101010	`define lap_display11   6'b101011	`define lap_display12   6'b101100	`define lap_display13   6'b101101	`define lap_display14   6'b101110	`define donestate       6'b101111		reg [2:0] control;	reg mode_state,next_mode_state;	reg [7:0] sf_d_temp, sf_d;	reg [3:0] lap_min,lap_tens,lap_ones,lap_tenths,lap_hundredths;	reg [20:0] count, count_temp;	reg state_flag;	reg lap_flag, set_lap_flag;	reg set_timer_flag, timer_flag;	reg set_clock_flag, clock_flag;	`define TIME1 20'd750000	`define TIME2 1'b1	`define TIME3 20'd210000	`define TIME4 20'd420000always @ (clk or state or count or minutes or tens or ones or tenths or hundredths or lap_flag or lap_min or lap_tens or				lap_ones or lap_tenths or lap_hundredths or timer_flag or clock_flag or mode)begin   set_lap_flag <= lap_flag;	set_timer_flag = timer_flag;	set_clock_flag = clock_flag;	next_state <= `init1;	state_flag <= 1'b1;	control = 3'b000;	sf_d_temp = 8'b00000000;	case (state) 	 		// Initialization Starts --------------------------------		`waiting : begin			sf_d_temp = 8'b00000000;			control = 3'b000; 								// RS, RW, E		 			if (count >= `TIME1) begin					next_state <= `init1;  state_flag <= 1'b1;  end			else	begin next_state <= `waiting; state_flag <= 1'b0; end			end // case		`init1 : begin 			sf_d_temp = 8'b00111100;	//Function set DL = 8bit, NL = 2, Font = 5x11			if 	(count == `TIME4) begin					next_state <= `init2;	control = 3'b001; state_flag <= 1'b1; end			else if ((count > `TIME2) & (count <= `TIME4)) begin					next_state <= `init1; control = 3'b000; state_flag <= 1'b0; end 			else begin next_state <= `init1; control = 3'b001; state_flag <= 1'b0; end			end // case		`init2 : begin 			sf_d_temp = 8'b00111100;	//Function set DL = 8bit, NL = 2, Font = 5x11			if 	(count == `TIME4) begin					next_state <= `init3;	control = 3'b001; state_flag <= 1'b1; end			else if ((count > `TIME2) & (count <= `TIME4)) begin					next_state <= `init2; control = 3'b000; state_flag <= 1'b0; end			else begin next_state <= `init2; control = 3'b001; state_flag <= 1'b0; end			end // case		`init3 : begin			sf_d_temp = 8'b00111100;	 //Function set DL = 8bit, NL = 2, Font = 5x11			if 	(count == `TIME4) begin					next_state <= `init4;	control = 3'b001; state_flag <= 1'b1; end			else if ((count > `TIME2) & (count <= `TIME4)) begin					next_state <= `init3; control = 3'b000; state_flag <= 1'b0; end			else begin next_state <= `init3; control = 3'b001; state_flag <= 1'b0; end			end // case		`init4 : begin			sf_d_temp = 8'b00111100;	 //Function set DL = 8bit, NL = 2, Font = 5x11			if 	(count == `TIME3) begin					next_state <= `init5;	control = 3'b001; state_flag <= 1'b1; end 			else if ((count > `TIME2) & (count <= `TIME3)) begin					next_state <= `init4; control = 3'b000; state_flag <= 1'b0;  end 			else begin next_state <= `init4; control = 3'b001; state_flag <= 1'b0;  end			end // case		`init5 : begin			sf_d_temp = 8'b00001100;	 //Set Display Display=on, Cursor=off, cursor_position=off			if 	(count == `TIME3) begin					next_state <= `init6; control = 3'b001; state_flag <= 1'b1; end			else if ((count > `TIME2) & (count <= `TIME3)) begin					next_state <= `init5; control = 3'b000; state_flag <= 1'b0; end  			else begin next_state <= `init5; control = 3'b001; state_flag <= 1'b0; end			end //case		`init6 : begin			sf_d_temp = 8'b00000001;	 //Clear Display			set_timer_flag = 1'b0; set_clock_flag = 1'b0;  //reset display flags						if 	(count == `TIME3) begin					next_state <= `init7; control = 3'b001; state_flag <= 1'b1; end			else if ((count > `TIME2) & (count <= `TIME3)) begin					next_state <= `init6; control = 3'b000; state_flag <= 1'b0; end  			else begin next_state <= `init6; control = 3'b001; state_flag <= 1'b0; end			end // case		`init7 : begin			sf_d_temp = 8'b00000110;	 //Entry Mode set ID=1, S=0			if 	(count == `TIME3) begin					next_state <= `word1; control = 3'b001; state_flag <= 1'b1; end			else if ((count > `TIME2) & (count <= `TIME3)) begin					next_state <= `init7; control = 3'b000; state_flag <= 1'b0; end  			else begin next_state <= `init7; control = 3'b001; state_flag <= 1'b0; end			end // case		// Initialization Ends -----------------------------------//-----------------------Write out 'Time:'-----------------------		`word1 : begin			sf_d_temp = 8'b01010100; // T	 			if 	(count == `TIME3) begin					next_state <= `word2; control = 3'b101; state_flag <= 1'b1; end			else if ((count > `TIME2) && (count <= `TIME3)) begin					next_state <= `word1; control = 3'b100; state_flag <= 1'b0; end			else begin next_state <= `word1; control = 3'b101; state_flag <= 1'b0; end			end // case			`word2 : begin			sf_d_temp = 8'b01101001; // i	 			if 	(count == `TIME3) begin					next_state <= `word3; control = 3'b101; state_flag <= 1'b1; end			else if ((count > `TIME2) & (count <= `TIME3)) begin					next_state <= `word2; control = 3'b100; state_flag <= 1'b0; end			else begin next_state <= `word2; control = 3'b101; state_flag <= 1'b0; end			end // case			`word3 : begin			sf_d_temp = 8'b01101101; // m	 			if 	(count == `TIME3) begin					next_state <= `word4; control = 3'b101; state_flag <= 1'b1; end			else if ((count > `TIME2) & (count <= `TIME3)) begin					next_state <= `word3; control = 3'b100; state_flag <= 1'b0; end  			else begin next_state <= `word3; control = 3'b101; state_flag <= 1'b0; end			end // case			`word4 : begin			sf_d_temp = 8'b01100101; // e	 			if (count == `TIME3) begin				if (mode == 1'b1) begin  // Clock mode					next_state <= `word5; control = 3'b101; state_flag <= 1'b1; end				else begin 		// Timer Mode					next_state <= `alt_word5; control = 3'b101; state_flag <= 1'b1; end				end // if			else if ((count > `TIME2) & (count <= `TIME3)) begin					next_state <= `word4; control = 3'b100; state_flag <= 1'b0; end  			else begin next_state <= `word4; control = 3'b101; state_flag <= 1'b0; end			end // case			`alt_word5 : begin			sf_d_temp = 8'b01110010; // r written if in timer mode					if 	(count == `TIME3) begin					next_state <= `time_display1; control = 3'b101; state_flag <= 1'b1; end			else if ((count > `TIME2) & (count <= `TIME3)) begin					next_state <= `alt_word5; control = 3'b100; state_flag <= 1'b0; end  			else begin next_state <= `alt_word5; control = 3'b101; state_flag <= 1'b0; end			end // case 			`word5 : begin			sf_d_temp = 8'b00111010; // [colon]					if 	(count == `TIME3) begin					next_state <= `word6; control = 3'b101; state_flag <= 1'b1; end			else if ((count > `TIME2) & (count <= `TIME3)) begin					next_state <= `word5; control = 3'b100; state_flag <= 1'b0; end 			else begin next_state <= `word5; control = 3'b101; state_flag <= 1'b0; end			end // case	//-----------------------Write out 'Lap:'-----------------------					`word6 : begin			sf_d_temp = 8'b11000000; // Set Address hx40	 			if 	(count == `TIME3) begin					next_state <= `word7; control = 3'b001; state_flag <= 1'b1; end			else if ((count > `TIME2) & (count <= `TIME3)) begin					next_state <= `word6; control = 3'b000; state_flag <= 1'b0; end  			else begin next_state <= `word6; control = 3'b001; state_flag <= 1'b0; end			end // case			`word7 : begin

⌨️ 快捷键说明

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