www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 單片機 > FPGA之旅
[導(dǎo)讀]這是FPGA之旅設(shè)計的第十三例啦,本例是一個綜合性的例程,基于OLED屏幕顯示,和DHT11溫濕度采集,將DHT11采集到的溫濕度顯示到OLED屏幕上。

一. 簡介

這是FPGA之旅設(shè)計的第十三例啦,本例是一個綜合性的例程,基于OLED屏幕顯示,和DHT11溫濕度采集,將DHT11采集到的溫濕度顯示到OLED屏幕上。


在開始本例之前,先補充一下,在上例中,代碼中有個位置有錯誤,就是DHT11是先發(fā)送濕度然后發(fā)送溫度,代碼中給弄反了,已修改。


顯示效果如下


二. 字體的顯示

字體的制作,以及如何將生成的字符數(shù)據(jù)添加到FPGA中,在上一例已經(jīng)說明了,以及如何顯示16*8的大小的字符,也就是不需要換行字符。本例中著重介紹如何顯示16*16大小的字符,即在寫入字符的過程中,需要有換行的操作,即切換page。本例的漢字大小為16*16,英文和數(shù)字為8*16大小的,即兩種字體大小,這也是在顯示過程中需要注意的點。

1

字符數(shù)據(jù)輸出


這部分,還是和上例中一樣,不同的是額外添加了一個font_row參數(shù),因為本例中使用的字符都是需要換行的,所以需要添加這個參數(shù)。

always@(*)begin case(showfont_index) 'd0:  showfont_data_reg <= {8'h78,8'h00,8'hB0 + show_y + font_row}; 'd1:  showfont_data_reg <= {8'h78,8'h00,8'h00 + show_x[3:0]}; 'd2:  showfont_data_reg <= {8'h78,8'h00,8'h10 + show_x[7:4]}; default:  showfont_data_reg <= {8'h78,8'h40,fontdata}; //fontdata endcaseend

如何使用這個參數(shù)進行換行呢?

我們知道8*16大小的字符,一共用16個數(shù)據(jù),每行占八個數(shù)據(jù)。所以這里需要先發(fā)送八個數(shù)據(jù)后,然后進行換行,將font_row參數(shù)加一,以及將showfont_index置0即可。在取字符的時候,需要注意,我們是根據(jù)showfont_index的值來取的,而換行后,這個參數(shù)置0了,這個時候,需要將font_row也用上,也就是還要加上8*font_row,這樣就可以接著上次的位置繼續(xù)取字符數(shù)據(jù)了。


當font_size字符大小為0,即8*16時,showfont_index為10的時候,就需要進行換行了,3個設(shè)置顯示地址數(shù)據(jù) 加 8個正好是10(11)。

always@(posedge sys_clk or negedge rst_n)begin if(rst_n == 1'b0) font_row <= 1'b0; else if(onefont_finish == 1'b1) //一個字符顯示完 font_row <= 1'b0; else if(font_size == 'd0 && showfont_index == 'd10 && write_done == 1'b1) font_row <= 1'b1; else if(font_size == 'd1 && showfont_index == 'd18 && write_done == 1'b1) font_row <= 1'b1; else font_row <= font_row;endalways@(posedge sys_clk or negedge rst_n)begin if(rst_n == 1'b0) showfont_index <= 'd0; else if(onefont_finish == 1'b1) showfont_index <= 'd0; else if(font_size == 'd0 && showfont_index == 'd10 && write_done == 1'b1) showfont_index <= 'd0; else if(font_size == 'd1 && showfont_index == 'd18 && write_done == 1'b1) showfont_index <= 'd0; else if(write_done == 1'b1 && ShowFont_req == 1'b1) showfont_index <= showfont_index + 1'b1; else showfont_index <= showfont_index;end

取數(shù)據(jù)

data <= data0[index + 'd8 * font_row];

2

多個字符顯示

這里只需要看這兩行代碼。每次一個字符顯示完成后,font_index就加一,當顯示完14個字符的時候,將ShowFont_finish拉高即可。比較容易。

assign onefont_finish = ((showfont_index == ('d10 + 'd8 * font_size)) && (font_row == 1'b1) && write_done == 1'b1) ? 1'b1 : 1'b0;assign ShowFont_finish = (onefont_finish == 1'b1 && font_index == 'd14) ? 1'b1 : 1'b0;

三. 整體介紹

本例中,OLED顯示一共分為如下5個狀態(tài)。在初始化完成后,屏幕顯示的是雜亂無章的數(shù)據(jù),所以在初始化完成后,要進行一次刷新,將OLED中的數(shù)據(jù)全部寫0。然后進行顯示固定不變的支符,例如像溫度濕度這樣的字符。然后進入空閑態(tài),直到DHT11采集到數(shù)據(jù)后,就進入到數(shù)據(jù)顯示狀態(tài),數(shù)據(jù)顯示完成后,又回到空閑態(tài)。這是整個的一個流程。

localparam  OLED_INIT      = 'd0;      //初始化localparam  OLED_Refresh   =  'd1; //刷新,將oled全部寫0localparam  OLED_ShowFont  = 'd2;        //顯示字符localparam  OLED_IDLE      =  'd3; //空閑localparam  OLED_ShowData  = 'd4;        //顯示數(shù)據(jù)

總框圖如下,可以看到在top模塊,除了一些模塊,還有一些其他的內(nèi)容,這部分是專門針對DHT11的。測試過程中,發(fā)現(xiàn)每次采集數(shù)據(jù)的時間間隔不能太小,否則數(shù)據(jù)一直不變,查看手冊后,得知兩次采集的數(shù)據(jù)間隔不能小于1s,否則會有問題。


詳細可以看完整代碼,有疑問的可以私聊。


點個贊,再走吧



本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉