欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 51單片機(jī)初學(xué)之手工玩轉(zhuǎn)12864顯示屏 [打印本頁]

作者: 慢慢思考    時(shí)間: 2025-11-30 16:22
標(biāo)題: 51單片機(jī)初學(xué)之手工玩轉(zhuǎn)12864顯示屏
本帖最后由 慢慢思考 于 2025-12-1 11:36 編輯

什么叫做手工玩轉(zhuǎn)?就是不要單片機(jī),只要幾個(gè)撥碼開關(guān)一個(gè)按鈕開關(guān)加幾個(gè)電阻,就能在12864屏上顯示出你想要顯示的東西。
看下圖,這個(gè)就是已完成的實(shí)物,就這點(diǎn)東西哦:
12864屏能干什么?它能顯示字符包括漢字,也能顯示圖形。
顯示屏嘛,目前為止,都是點(diǎn)陣式的,靠亮滅一個(gè)個(gè)的點(diǎn)來顯示字符或圖形。12864,就是說它的點(diǎn)陣,是橫向128個(gè)點(diǎn)縱向64個(gè)點(diǎn),形成一個(gè)矩陣。
這個(gè)12864屏屬于單色屏,于是每個(gè)點(diǎn)的狀態(tài)參數(shù)只有兩個(gè)即亮與不亮,可以標(biāo)記為10,所以,對每個(gè)點(diǎn)的控制只需一位就夠了,也就是說你輸入一比特即8位數(shù)據(jù)就可以控制8個(gè)點(diǎn)。
在它本身的功能設(shè)計(jì)上,它有兩種工作模式,一種是字符顯示模式,一個(gè)是圖形顯示模式。
所謂字符顯示模式,就是你想讓它顯示一個(gè)什么字符,你直接輸入這個(gè)字符的編碼就行了,比如你要輸入2”這個(gè)數(shù)字,你查表,它的編碼是十六進(jìn)制數(shù)0x32,你把這個(gè)0x3212864屏的操作規(guī)定輸入進(jìn)去就可以顯示出來了。這個(gè)屏在字符顯示模式下,它是被設(shè)計(jì)成8*4個(gè)小方塊的,也就是說它被分成了4行,每行分成8個(gè)小方塊,則每個(gè)小方塊就是橫向16個(gè)點(diǎn)縱向16個(gè)點(diǎn)。每個(gè)小方塊又被分成了左右兩塊,每塊都可以顯示一個(gè)8*16點(diǎn)陣的字符,每個(gè)8*16點(diǎn)陣字符由一個(gè)8位二進(jìn)制數(shù)作為這個(gè)字符的編碼來控制它的顯示,比如上面說的你要顯示數(shù)字2,則0x32(二進(jìn)制數(shù)00110010)就是它的完整的編碼值。
所謂圖形顯示模式,就是說若是你要想在屏在顯示什么東西,包括字符,你得先把這個(gè)你要顯示的東西變成由許多點(diǎn)組成的圖形,然后你得一個(gè)點(diǎn)一個(gè)點(diǎn)地去操作點(diǎn)亮它們以在屏幕上顯示出來。
這兩個(gè)顯示模式是可以切換的,向顯示屏輸入相關(guān)指令就行了。很重要的一點(diǎn),這個(gè)屏上電復(fù)位后,它的顯示模式是字符模式,也就是說,它上電后你就可以直接使用字符模式了。
好了,我們先來實(shí)驗(yàn)它的字符顯示功能,我們來讓它顯示數(shù)字2”。
想要使用一種電路模塊,當(dāng)然先得看看它的使用說明書,說明書先看什么?接口啊,看了它,才好先把電路圖搭建起來。

這個(gè)電路這樣搭建:為了增強(qiáng)對它的功能和實(shí)現(xiàn)方法的體驗(yàn)感,也為了讓實(shí)驗(yàn)更加簡單,我們不走尋常路,不用單片機(jī)來控制它,而是用撥碼開關(guān)和按鈕開關(guān)來控制。具體電路圖如下:
此電路中,開關(guān)KRW的作用是用于告訴該屏我現(xiàn)在是要向你寫入數(shù)據(jù)還是讀取你內(nèi)部的數(shù)據(jù),本電路中開關(guān)的ON位置為寫入;KRS的作用是確定放在數(shù)據(jù)端口的數(shù)據(jù)是命令類數(shù)據(jù)還是即將要顯示的內(nèi)容,開關(guān)ON的位置為命令;KEN的作用是給屏發(fā)信號要求它讀取數(shù)據(jù)口的數(shù)據(jù),撥動開關(guān)放置好數(shù)據(jù)之后,按一下就行了;KDB0~KDB7的作用是改變數(shù)據(jù)端口電位的高低來實(shí)現(xiàn)向這個(gè)端口上放置我們想要輸入的數(shù)據(jù)的目的,開關(guān)ON位置為置0
搭建好的電路實(shí)物圖已經(jīng)在前面給出了。
電路搭建完成并通電后,首先要調(diào)節(jié)可調(diào)電阻R1以調(diào)節(jié)其對比度到能顯示內(nèi)容,這個(gè)要是沒調(diào)節(jié)到位,那是顯示不出內(nèi)容的,那接下來的實(shí)驗(yàn)必然失敗。調(diào)節(jié)的方法是邊調(diào)節(jié)邊肉眼觀察屏幕,如果全屏是均勻一色,那不對,應(yīng)該是可以看到一個(gè)個(gè)的小方格,它應(yīng)該是128*64個(gè)小方格,如下圖就算調(diào)節(jié)到位了:

好了,下面我們就開始做實(shí)驗(yàn)了,先試試輸入它的命令,試哪一條呢?這時(shí)自然是要查它的指令表了,先看字符模式下的命令表,也就是手冊上說的基本指令表:

我們先前不是說要顯示數(shù)字2么?它的二進(jìn)制編碼我們已經(jīng)知道是00110010,接下來,我們把撥碼開關(guān)撥到這個(gè)狀態(tài),然后KRS開關(guān)為OFFKRW開關(guān)為ON,完畢,按一下KEN,沒顯示?怎么回事?是我們這個(gè)手工實(shí)驗(yàn)的思路不成立么?不慌,再查上述指令表,發(fā)現(xiàn)里面有一個(gè)“顯示狀態(tài)開/關(guān)”指令,是不是因?yàn)檫@個(gè)指令沒有設(shè)置而導(dǎo)致其不顯示呢?管它呢,試試不就知道了。
這個(gè)指令的二進(jìn)制,已經(jīng)在上述表中寫得很清楚了,全開就是00001111,我們把這個(gè)撥碼開關(guān)撥到這個(gè)狀態(tài),然后我們看到這個(gè)屬于命令類、輸入式,那自然得將KRS改撥到ON位置,再按KEN,好,我們就看到了一個(gè)閃爍的白色的方塊,看來我們的思路是沒有問題的。
關(guān)于這個(gè)按按鈕輸入數(shù)據(jù)的方法,前面一篇已經(jīng)講過實(shí)驗(yàn)了,在這里能用到這個(gè)屏的身上,說明這個(gè)屏內(nèi)部應(yīng)該也有個(gè)中央控制單元。
接下來,我們再讓數(shù)據(jù)端口處于00110010的狀態(tài),KRSOFF,再按KEN2就出來了不是?再按,再按,我們發(fā)現(xiàn),屏幕上會從左到右顯示出一個(gè)一個(gè)的“2”,然后,一行滿了之后,它跑到第三行去了,然后是才是第二行,然后是第四行。這個(gè),誰的問題?屏幕本身的問題,它的設(shè)計(jì)就是這樣的,有點(diǎn)傷腦筋,我們在以后的應(yīng)用中得注意處理這個(gè)問題,不然的話,你知道的。
還有,我們在按按鈕時(shí),我們有可能發(fā)現(xiàn)按一下按鈕會出現(xiàn)兩個(gè)及以上的2”,這個(gè)問題,就是按鈕的問題了,它可能接觸不良,正宗的說法叫“抖動”,這個(gè)抖動,在我們以后的按鍵應(yīng)用程序中,是有相應(yīng)的處理方法的。在這里,我們可以思考一下,在我們進(jìn)行命令輸入時(shí),這個(gè)抖動會不會有什么影響?為什么?然后做實(shí)驗(yàn)來驗(yàn)證你的判斷。
想試試它能不能輸入漢字么?簡單,查中文字型表(顯示屏手冊后附),隨便查一個(gè)字,比如“北”字,編碼十六進(jìn)制數(shù)是B1B1,換算成二進(jìn)制數(shù)就是10110001 10110001,然后我們把撥碼開關(guān)調(diào)成10110001狀態(tài),KRS為數(shù)據(jù)狀態(tài),KRW為輸入狀態(tài),完成后按兩下KEN,看,“北”字出來了。
好了,手工控制12864屏算是成功了,接下來,看你的興趣,試一試對“顯示狀態(tài)開/關(guān)”指令改變DB0~DB2的電位狀態(tài)再進(jìn)行輸入,看看會出現(xiàn)什么現(xiàn)象。其它的指令,你也可以按這個(gè)方法一一試試,這個(gè)方法,比用單片機(jī)去操作,簡單直觀快捷得多。
這里補(bǔ)充一點(diǎn)知識,手冊上沒說清楚的:這個(gè)12864屏的設(shè)計(jì),怎么說呢,你把它當(dāng)作一個(gè)256*32的點(diǎn)陣屏,然后它被豎向劃了一刀,分成了左右兩個(gè)屏,然后設(shè)計(jì)者把右邊的那半個(gè)屏放在了左半邊屏的下方,組成了一個(gè)128*64的屏,所以,我們看到連續(xù)輸入時(shí),它是從第一行跑到了第三行,再去的第二行。這個(gè)理解很重要,它不僅關(guān)系到在字符模式下的應(yīng)用,也關(guān)系到其在圖形模式下的應(yīng)用,它直接關(guān)系到要顯示的內(nèi)容的定位問題,也就是在屏幕上的顯示位置問題。
在應(yīng)用這個(gè)屏?xí)r,我們想在自己設(shè)想的位置上顯示一個(gè)內(nèi)容,就得先知道這個(gè)屏在設(shè)計(jì)上的定位方式,在字符顯示模式下,我們前面已經(jīng)說了,它是被分成了橫向8縱向432個(gè)方塊的,也就是說,給它32個(gè)地址就可以全部定位了,于是,在設(shè)計(jì)上,它采用了一維定位方式,也就是把這32個(gè)方塊按排成一行的方式來編排地址,這個(gè)字符地址指令的標(biāo)志位是DB7位,也即這DB7位為1時(shí),即表示這條指令后面DB6~DB0([DB6:DB0])為字符的坐標(biāo)值(地址值),顯示屏上左上角的第一個(gè)方塊為首個(gè)顯示方塊,其地址值為0,加上DB7標(biāo)志位的1值,就是十六進(jìn)制的80,所以,我們在表上看到在字符模式下,定位首個(gè)方塊時(shí),要求輸入的是0x80,而最后一個(gè)字符的坐標(biāo)則是0x9F
這個(gè)屏的設(shè)計(jì)是很奇特的,前面我們已經(jīng)說過了,它的每個(gè)方塊在字符模式下是可以顯示兩個(gè)8*16點(diǎn)陣字符的,也就是說每一行它可以顯示16個(gè)8*16點(diǎn)陣字符,但它的定位方式在橫向上又只有8個(gè)值,那每一塊的第二個(gè)字符的定位是怎么確定的呢?首先定位這一個(gè)方塊,然后前后兩個(gè)字符的編碼連續(xù)輸入,真是有點(diǎn)傷腦筋。
這個(gè)在屏的字符模式下的手工控制看來是成功的,做到這里,是不是有那種本來覺得很高大上很神秘的單片機(jī),原來卻是如此的簡單?接下來,你是不是應(yīng)該很有把握地連上單片機(jī)去操控它了?在這里提醒一下,連上單片機(jī)之后你不一定能一次成功,你得先把這個(gè)屏的手冊看仔細(xì)想明白,這個(gè)看手冊的習(xí)慣應(yīng)該養(yǎng)好。如果你手工過了卻過不了程序,那你可得好好查查手冊。
圖形模式就是手冊里說的擴(kuò)充指令模式。關(guān)于圖形模式下的手工控制,我就不講了,有興趣的可以自己試試。這里要提示的是,在圖形模式下,定位不再是一維的,而是二維的,X方向是256個(gè)點(diǎn),每16個(gè)點(diǎn)增量一個(gè)坐標(biāo)值,也就是說X向的每一個(gè)坐標(biāo)值,它管著16個(gè)點(diǎn),所以,X向的坐標(biāo)值是0~15Y方向是32個(gè)點(diǎn),每1個(gè)點(diǎn)增量一個(gè)坐標(biāo)值,也就是說它的32行點(diǎn)的每一行都有一個(gè)Y坐標(biāo)值,范圍是從0~31。為什么會是這個(gè)值?前面說過了,你可以把它看成是256*32的屏給分成兩半后再拼起來的,這個(gè)屏的設(shè)計(jì)反正就是這么奇怪。
圖形模式下坐標(biāo)的輸入方式也很奇特,它是同樣表達(dá)方式的指令,即標(biāo)志位同樣是DB7,后面跟的才是坐標(biāo)值,區(qū)分的方式就是輸入的先后順序,先輸入的數(shù)據(jù)為X坐標(biāo),后輸入的數(shù)據(jù)為Y坐標(biāo),說是必須兩個(gè)緊跟著輸入。然后要顯示的內(nèi)容數(shù)據(jù)也是兩個(gè)8位數(shù)據(jù)緊跟著輸入,控制該坐標(biāo)下的16個(gè)點(diǎn)的亮滅。
小貼士:撥碼開關(guān)的操作,用鑷子比較合適,徒手操作有點(diǎn)麻煩的。
想在字符模式下顯示漢字的話,該屏必須自帶中文字庫,否則,你只能在圖形模式下自己編制漢字顯示數(shù)據(jù)包。
請諸君批評指正,先謝了。


基本指令集.png (1.09 MB, 下載次數(shù): 0)

基本指令集.png

作者: wjfw    時(shí)間: 2025-12-1 10:01
非常好的資料,太感謝了
作者: 慢慢思考    時(shí)間: 2025-12-1 11:43
本帖最后由 慢慢思考 于 2025-12-1 21:23 編輯

補(bǔ)充說明一下,電路圖中的KEN按鈕開關(guān)其實(shí)還是應(yīng)該用常開開關(guān),這個(gè)可以看它的時(shí)序圖,它是平時(shí)為低電位,放置數(shù)據(jù)之前先拉高電位,放置數(shù)據(jù)之后保持一定時(shí)間待數(shù)據(jù)端口電位穩(wěn)定之后,再拉低KENT處電位,此屏在此時(shí)讀取數(shù)據(jù),也就是說,這個(gè)屏是下降沿讀取數(shù)據(jù)。當(dāng)然,在這個(gè)實(shí)驗(yàn)中,常閉開關(guān)也同樣會產(chǎn)生下降沿,所以也是可以用的,但是不規(guī)范。這個(gè)可以在這個(gè)實(shí)驗(yàn)中來驗(yàn)證。
作者: 慢慢思考    時(shí)間: 2025-12-1 22:43
還是想給大家提個(gè)醒,手冊上時(shí)序圖很清楚,寫入數(shù)據(jù)時(shí),規(guī)范的做法是要先拉高EN后再放置數(shù)據(jù),然后再拉低EN;讀忙信號時(shí),一定要先交出DB7端口的電位控制權(quán),也就是單片機(jī)要向這個(gè)端口輸出高電平,不然的話,你前面輸入的數(shù)據(jù)若是把這個(gè)端口的電位給拉低了,那你什么時(shí)候檢測它都是個(gè)低電位。如果你要讀出屏的其它數(shù)據(jù),則這一組端口的控制權(quán)都要先交出去。
我所看過的賣家提供的這個(gè)屏的例程,很難看到寫得很規(guī)范的,有的甚至不交出忙檢測端口的電位控制權(quán)就去做檢測。
天下文章一大抄,如果不了解清楚模塊的一些具體規(guī)定,抄對抄錯(cuò)都不知道。
程序上機(jī)能通過,不等于程序沒毛病。
作者: man1234567    時(shí)間: 2025-12-2 11:35
初始化的命令也是這么搞上去的么
作者: 慢慢思考    時(shí)間: 2025-12-2 21:25
man1234567 發(fā)表于 2025-12-2 11:35
初始化的命令也是這么搞上去的么

帖子中那個(gè)控制屏幕與光標(biāo)的命令00001111(0x0F)不就是初始化的命令之一么?
本來就是個(gè)很簡單的玩藝,用單片機(jī)控制時(shí),它的任何命令都是這么搞上去的。




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1