畢業(yè)設計做網(wǎng)站怎么答辯千牛怎么做免費推廣引流
目錄
注意!
a) 本工程采用野火征途PRO開發(fā)板,外接LCD12864部件進行測試。
b) 有償提供代碼!!!可以定制功能!!!有需要私信!!!
c) 本文測試采用的是并口模式,只寫不讀
????????d) 12864與1602的指令有很多相似之處,但功能以及使用方法差異還是比較大的
????????e) 先放效果圖
一、基礎知識
1.1 引腳信息
1.2 指令
1.2.1 清屏
1.2.2 歸位(返回)
1.2.3 進入設定點
1.2.4 顯示模式控制
1.2.5 光標、畫面位移
1.2.6 功能設置
1.2.7 CG RAM地址設置
1.2.8 DD RAM地址設置
1.2.9 寫數(shù)據(jù)
1.2.10 進入擴展功能模式
1.2.11 設置畫圖地址
1.3 常用指令
1.4 內(nèi)置字符、自定義字符以及畫圖顯示原理
1.5 LCD16384初始化過程
二、部分代碼
2.1?LCD12864滾動顯示字符
2.2?LCD12864顯示自定義字符“仰以殊觀”
2.3?LCD12864顯示圖像
三、實測
3.1 LCD12864滾動顯示字符
3.2?LCD12864顯示自定義漢字
3.3 LCD12864顯示圖像
注意!
a) 本工程采用野火征途PRO開發(fā)板,外接LCD12864部件進行測試。
b) 有償提供代碼!!!可以定制功能!!!有需要私信!!!
c) 本文測試采用的是并口模式,只寫不讀
d) 12864與1602的指令有很多相似之處,但功能以及使用方法差異還是比較大的
e) 先放效果圖
一、基礎知識
1.1 引腳信息
VSS | 電源地 |
VDD/VCC | 電源正極 |
V0 | 偏壓(可不接或接地或接電位器調(diào)整電壓) |
RS | 寄存器選擇(Register Select,選擇數(shù)據(jù)或命令寄存器) |
RW | 讀/寫 |
E | 使能 |
D0-D7 | 8位數(shù)據(jù) |
A | 背光正極 |
K | 背光負極 |
PSB | 給高電平 |
RST | 給高電平 |
1.2 指令
1.2.1 清屏
1.2.2 歸位(返回)
1.2.3 進入設定點
1.2.4 顯示模式控制
1.2.5 光標、畫面位移
1.2.6 功能設置
1.2.7 CG RAM地址設置
1.2.8 DD RAM地址設置
1.2.9 寫數(shù)據(jù)
1.2.10 進入擴展功能模式
1.2.11 設置畫圖地址
1.3 常用指令
'h30:功能設置(初始化指令)
'h34:進入擴展指令模式(畫圖關)
'h01:顯示清屏(清DDRAM和AC(AddressCount地址計數(shù)器)值-1.3.1)
'h18:畫面左移(1.3.5)
1.4 內(nèi)置字符、自定義字符以及畫圖顯示原理
這部分個人感覺有點復雜,還需要時間思考一下怎樣才能表述清楚,過兩天寫
1.5 LCD16384初始化過程
? ? ? ? a)? ? ? ? 程序燒錄到FPGA后首先復位15ms
? ? ? ? b)? ? ? ? 15ms后進入INIT初始化狀態(tài)
? ? ? ? c)? ? ? ? INIT初始化狀態(tài)分別寫0x34?0x34?0x01
每次寫指令或數(shù)據(jù)間隔時間均遠大于處理時間,故不用考慮讀忙信號
二、部分代碼
2.1?LCD12864滾動顯示字符
// -------------------字符顯示寄存器S_data_display賦值
/*
兩行循環(huán)顯示0-9-a-z-A-D*/always @(*) begincase(S_char_cnt)'d0: S_data_display = "0";'d1: S_data_display = "1";'d2: S_data_display = "2";'d3: S_data_display = "3";'d4: S_data_display = "4";'d5: S_data_display = "5";'d6: S_data_display = "6";'d7: S_data_display = "7";'d8: S_data_display = "8";'d9: S_data_display = "9";'d10: S_data_display = "a";'d11: S_data_display = "b";'d12: S_data_display = "c";'d13: S_data_display = "d";'d14: S_data_display = "e";'d15: S_data_display = "f";'d16: S_data_display = "f";'d17: S_data_display = "e";'d18: S_data_display = "d";'d19: S_data_display = "c";'d20: S_data_display = "b";'d21: S_data_display = "a";'d22: S_data_display = "9";'d23: S_data_display = "8";'d24: S_data_display = "7";'d25: S_data_display = "6";'d26: S_data_display = "5";'d27: S_data_display = "4";'d28: S_data_display = "3";'d29: S_data_display = "2";'d30: S_data_display = "1";'d31: S_data_display = "0";'d32: S_data_display = "A";'d33: S_data_display = "B";'d34: S_data_display = "C";'d35: S_data_display = "D";'d36: S_data_display = "E";S2 :begin O_lcd_data <= 8'h06; O_lcd_rs <= 0;end//控制讀寫后AC自動增減一,控制畫面不動S3 :begin O_lcd_data <= 8'h0E; O_lcd_rs <= 0;end//控制顯示開/0c關游標顯示,oe開游標顯示ROW1_ADDR :begin O_lcd_data <= 8'h80; O_lcd_rs <= 0;endWRITE :begin O_lcd_data <= S_data_display; O_lcd_rs <= 1;endROW2_ADDR :begin O_lcd_data <= 8'h90; O_lcd_rs <= 0;endROW3_ADDR :begin O_lcd_data <= 8'h88; O_lcd_rs <= 0;endROW4_ADDR :begin O_lcd_data <= 8'h98; O_lcd_rs <= 0;endstop :begin O_lcd_data <= 8'h18; O_lcd_rs <= 0;end//控制畫面左移// stop :begin O_lcd_data <= 8'h30; O_lcd_rs <= 0;end//控制畫面左移stop1 :begin O_lcd_data <= 8'h30; O_lcd_rs <= 0;end//控制畫面左移stop2 :begin O_lcd_data <= 8'h30; O_lcd_rs <= 0;end//控制畫面左移default:;endcaseendend
endmodule
2.2?LCD12864顯示自定義字符“仰以殊觀”
//-------------------寄存器定義reg [31:0] S_clk_cnt ;//時鐘計數(shù)器,用來對系統(tǒng)時鐘分頻reg [4:0] S_state_c ;//狀態(tài)機reg [4:0] S_state_n ;//狀態(tài)機reg [7:0] S_char_cnt ;//字符計數(shù)器reg [7:0] S_data_display ;//字符顯示寄存器//-------------------定義狀態(tài)localparamIDLE = 'd0 ,INIT = 'd1 ,S0 = 'd2 ,S1 = 'd3 ,S2 = 'd4 ,S3 = 'd5 ,WR_CGRAM_ADDR = 'd6 ,WRITE = 'd7 ,RD_CGRAM_ADDR1 = 'd8 ,RD_CGRAM_ADDR2 = 'd22 ,RD_CGRAM_H0 = 'd9 ,RD_CGRAM_H1 = 'd10 ,/*
顯示自定義字形//仰
{0x08,0x00,0x08,0x80,0x0B,0x3C,0x12,0x24,0x12,0x24,0x32,0x24,0x32,0x24,0x52,0x24},
{0x92,0x24,0x12,0x24,0x12,0xB4,0x13,0x28,0x12,0x20,0x10,0x20,0x10,0x20,0x10,0x20},
//以
{0x00,0x10,0x04,0x10,0x22,0x10,0x21,0x10,0x21,0x10,0x20,0x10,0x20,0x10,0x20,0x20},
{0x20,0x20,0x20,0x20,0x24,0x40,0x28,0x50,0x30,0x88,0x21,0x04,0x02,0x02,0x04,0x02},
//殊
{0x00,0x20,0x01,0x20,0xFD,0x20,0x21,0xFC,0x21,0x20,0x3E,0x20,0x44,0x20,0x47,0xFE},
{0x64,0x70,0x94,0xA8,0x08,0xA8,0x09,0x24,0x11,0x24,0x22,0x22,0x40,0x20,0x80,0x20},
//觀
{0x00,0x00,0x01,0xFC,0x01,0x04,0xFD,0x04,0x05,0x24,0x05,0x24,0x49,0x24,0x29,0x24},
{0x11,0x24,0x11,0x54,0x28,0x50,0x24,0x90,0x44,0x90,0x81,0x12,0x02,0x12,0x04,0x0E},*/RD_CGRAM_ADDR1:begin O_lcd_data <= 8'h93; O_lcd_rs <= 0;end//設置DDRAM顯示地址RD_CGRAM_ADDR2:begin O_lcd_data <= 8'h8b; O_lcd_rs <= 0;end//設置DDRAM顯示地址RD_CGRAM_H0 :begin O_lcd_data <= 8'h00; O_lcd_rs <= 1;end//讀CGRAM顯示RD_CGRAM_H1 :begin O_lcd_data <= 8'h00; O_lcd_rs <= 1;end//讀CGRAM顯示RD_CGRAM_H2 :begin O_lcd_data <= 8'h00; O_lcd_rs <= 1;end//讀CGRAM顯示RD_CGRAM_H3 :begin O_lcd_data <= 8'h00; O_lcd_rs <= 1;end//讀CGRAM顯示RD_CGRAM_L0 :begin O_lcd_data <= 8'h00; O_lcd_rs <= 1;end//讀CGRAM顯示RD_CGRAM_L1 :begin O_lcd_data <= 8'h02; O_lcd_rs <= 1;end//讀CGRAM顯示RD_CGRAM_L2 :begin O_lcd_data <= 8'h04; O_lcd_rs <= 1;end//讀CGRAM顯示RD_CGRAM_L3 :begin O_lcd_data <= 8'h06; O_lcd_rs <= 1;end//讀CGRAM顯示
2.3?LCD12864顯示圖像
//-------------------寄存器定義reg [31:0] S_clk_cnt ;//時鐘計數(shù)器,用來對系統(tǒng)時鐘分頻reg [7:0] S_state_c ;//狀態(tài)機reg [7:0] S_state_n ;//狀態(tài)機reg [15:0] S_char_cnt ;//字符計數(shù)器reg [7:0] S_data_display ;//字符顯示寄存器//-------------------定義狀態(tài)localparamIDLE = 'd0 ,INIT = 'd1 ,S0 = 'd2 ,S1 = 'd3 ,S2 = 'd4 ,S3 = 'd5 ,WR_X_ADDR0 = 'd6 ,WR_Y_ADDR0 = 'd7 ,WR_Y_ADDR1 = 'd8 ,WR_DATA = 'd9 ,OPEN = 'd10 ,stop = 'd11 ;// -------------------字符顯示寄存器S_data_display賦值
/*
顯示自定義圖像'h00'h00'h00'h36'h00'h60'h38'h00'hC0'h03'hF8'h00'h00'h00'h00'h00
'h00'h00'h00'h7F'hF8'h64'h39'hFF'hC0'hFF'hF8'h00'h00'h00'h00'h00
'h00'h00'h00'h7D'hF8'h6E'h39'hFF'hF8'hFF'h18'h00'h00'h00'h00'h00
'h00'h00'h00'h7D'hD8'h67'h38'h67'hFC'h1B'h78'h00'h00'h00'h00'h00
'h00'h00'h00'hFD'hD8'h63'hB0'h7E'hC0'hDB'h78'h00'h00'h00'h00'h00
'h00'h00'h01'hFD'hD8'h61'h30'hFE'hC0'hFB'h78'h00'h00'h00'h40'h00
'h00'h00'h01'hFD'hD8'h60'h30'hDF'hFC'h7B'h78'h00'h00'h0F'hF8'h00
'h00'h00'h01'hFD'hD8'h6C'h31'hFF'hFC'h3B'h78'h00'h00'h7F'hF8'h00
'h00'h00'h00'hFF'hD8'h7C'h71'hFB'hE0'h3B'hF8'h00'h01'hFF'hF8'h00
'h00'h00'h00'hFF'hD8'h78'h70'h33'hF0'h7C'hE0'h00'h0F'hFF'hF0'h00
'h00'h00'h00'hFF'hF8'h70'hF8'h77'hF8'hED'hE0'h00'h3F'hFF'hE0'h00
'h00'h00'h00'hFD'hF8'hE3'hDC'hEE'hDD'hC3'hEE'h00'hFF'hFF'hC0'h00
'h00'h00'h00'hF9'hC0'h7F'h8D'hDC'hCC'h8F'h7E'h03'hFF'hFF'h80'h00
'h00'h00'h00'hC1'hC0'h0E'h08'h88'hC0'h0E'h7C'h0F'hFF'hFF'h00'h00
'h00'h00'h00'h00'h00'h01'h80'h00'hC0'h00'h00'h3F'hFF'hFE'h00'h00
'h00'h00'h00'h00'h00'h1F'hE0'h00'h00'h00'h00'hFF'hFF'hF8'h00'h00
'h00'h00'h00'h00'h00'hFF'hE0'h07'h80'h00'h03'hFF'hFF'hF0'h00'h00
'h00'h00'h3F'hFF'h83'hFF'hC0'h3F'hC0'h00'h0F'hFF'hFF'hC0'h00'h00
'h00'h00'h7F'hFF'hFF'hFF'h81'hFF'hC0'h00'h3F'hFF'hFF'h80'h00'h00
'h00'h03'hFF'hFF'hFF'hFF'hFF'hFF'h80'h00'hFF'hFF'hFE'h00'h00'h00
'h00'h03'hFF'hFF'hFF'hFF'hFF'hFF'hFF'h83'hFF'hFF'hFC'h00'h00'h00
'h00'h00'hFF'hFF'hFF'hFF'hFF'hFF'hFF'hFF'hFF'hFF'hF0'h00'h00'h00
'h00'h00'h07'hFF'hFF'hFF'hFF'hFF'hFF'hFF'hFF'hFF'hC0'h00'h00'h00
'h00'h00'h00'h3F'hFF'hFF'hFF'hFF'hFF'hFF'hFF'hFF'h80'h00'h00'h00
'h00'h00'h00'h03'hFF'hFF'hFF'hFF'hFF'hFF'hFF'hFE'h00'h00'h00'h00
'h00'h00'h00'h00'h1F'hFF'hFF'hFF'hFF'hFF'hFF'hF8'h00'h00'h00'h00
'h00'h00'h00'h00'h00'hFF'hFF'hFF'hFF'hFF'hFF'hE0'h00'h00'h00'h00
'h00'h00'h00'h00'h00'h07'hFF'hFF'hFF'hFF'hFF'hC0'h00'h00'h00'h00
'h00'h00'h00'h00'h00'h00'h7F'hFF'hFF'hFF'hFF'h80'h00'h00'h00'h00
'h00'h00'h00'h00'h00'h00'h03'hFF'hFF'hFF'hFF'hC0'h00'h00'h00'h00
'h00'h00'h00'h00'h00'h00'h00'h0F'hFF'hFF'hFF'hC0'h00'h00'h00'h00
'h00'h00'h00'h00'h00'h00'h00'h0F'hFF'hFF'hFF'hC0'h00'h00'h00'h00
'h00'h00'h00'h00'h00'h00'h00'h3F'hFF'hFF'hFF'hE0'h00'h00'h00'h00
'h00'h00'h00'h00'h00'h00'h00'h7F'hFF'hFF'hFF'hE0'h00'h00'h00'h00
'h00'h00'h00'h00'h00'h00'h01'hFF'hFF'hFF'hFF'hFF'hC0'h00'h00'h00
'h00'h00'h00'h00'h00'h00'h07'hFF'hFF'hFF'hFF'hFF'hC0'h00'h00'h00
'h00'h00'h00'h00'h00'h00'h0F'hFF'hFF'hFF'hFF'hFF'h80'h00'h00'h00
'h00'h00'h00'h00'h00'h00'h3F'hFF'hFC'hFF'hFF'hFF'h80'h00'h00'h00
'h00'h00'h00'h00'h00'h00'h7F'hFF'hF0'h7F'hFF'hFF'h00'h00'h00'h00
'h00'h00'h00'h00'h00'h01'hFF'hFF'hC0'h3F'hFF'hFC'h00'h00'h00'h00
'h00'h00'h00'h00'h00'h03'hFF'hFF'h00'h3F'hFF'hF8'h00'h00'h00'h00
'h00'h00'h00'h00'h00'h0F'hFF'hFC'h00'h1F'hFF'hF8'h00'h00'h00'h00
'h00'h00'h00'h00'h00'h1F'hFF'hE0'h00'h0F'hFF'hF9'hF0'h00'h00'h00
'h00'h00'h00'h00'h00'h7F'hFF'h80'h00'h0F'hFF'hFF'hF8'h00'h00'h00
'h00'h00'h03'hE0'h00'hFF'hFE'h00'h00'h07'hFF'hFF'hF8'h00'h00'h00
'h00'h00'h07'hFF'hFF'hFF'hF8'h00'h00'h03'hFF'hFF'hF0'h00'h00'h00
'h00'h00'h1F'hFF'hFF'hFF'hE0'h00'h00'h03'hFF'hFF'hE0'h00'h00'h00
'h00'h00'h3F'hFF'hFF'hFF'h80'h00'h00'h01'hFF'hFF'hC0'h00'h00'h00
'h00'h00'h07'hFF'hFF'hFE'h00'h00'h00'h00'hFF'hFF'h80'h00'h00'h00
'h00'h00'h00'hFF'hFF'hF8'h00'h00'h00'h00'h7F'hFE'h00'h00'h00'h00
'h00'h00'h00'h0F'hFF'hF8'h00'h00'h00'h00'h7F'hFE'h00'h00'h00'h00
'h00'h00'h00'h00'hFF'hFC'h00'h00'h00'h00'h3F'hFE'h00'h00'h00'h00
'h00'h00'h00'h00'h3F'hFC'h00'h00'h00'h00'h1F'hFF'h00'h00'h00'h00
'h00'h00'h00'h00'h1F'hFC'h00'h00'h00'h00'h1F'hFF'h00'h00'h00'h00
'h00'h00'h00'h00'h0F'hFC'h00'h00'h00'h00'h0F'hFF'h00'h00'h00'h00
'h00'h00'h00'h00'h07'hFC'h00'h00'h00'h00'h07'hFF'h00'h00'h00'h00
'h00'h00'h00'h00'h03'hFE'h00'h00'h00'h00'h07'hFF'h00'h00'h00'h00
'h00'h00'h00'h00'h01'hFE'h00'h00'h00'h00'h03'hFF'h80'h00'h00'h00
'h00'h00'h00'h00'h01'hF8'h00'h00'h00'h00'h01'hFF'h80'h00'h00'h00
'h00'h00'h00'h00'h00'hF0'h00'h00'h00'h00'h01'hFF'h80'h00'h00'h00
'h00'h00'h00'h00'h00'h40'h00'h00'h00'h00'h00'hFE'h00'h00'h00'h00
'h00'h00'h00'h00'h00'h00'h00'h00'h00'h00'h00'h78'h00'h00'h00'h00
'h00'h00'h00'h00'h00'h00'h00'h00'h00'h00'h00'h70'h00'h00'h00'h00
'h00'h00'h00'h00'h00'h00'h00'h00'h00'h00'h00'h00'h00'h00'h00'h00C:\Users\26058\Desktop\1.bmp0*/
三、實測
3.1 LCD12864滾動顯示字符
LCD12864滾動顯示字符
3.2?LCD12864顯示自定義漢字
3.3 LCD12864顯示圖像
左側(cè)的白線消除不了,只要往第二部分的圖像部分進行賦值,就會有這道白線(兩個字節(jié)),暫時不清楚是邏輯問題還是硬件問題,不過不影響整體效果。