本帖最后由 慢慢思考 于 2025-12-1 11:36 編輯
什么叫做手工玩轉(zhuǎn)?就是不要單片機(jī),只要幾個(gè)撥碼開關(guān)一個(gè)按鈕開關(guān)加幾個(gè)電阻,就能在12864屏上顯示出你想要顯示的東西。 看下圖,這個(gè)就是已完成的實(shí)物,就這點(diǎn)東西哦:
實(shí)物圖.jpg (210.62 KB, 下載次數(shù): 0)
下載附件
2025-11-30 15:55 上傳
12864屏能干什么?它能顯示字符包括漢字,也能顯示圖形。 顯示屏嘛,目前為止,都是點(diǎn)陣式的,靠亮滅一個(gè)個(gè)的點(diǎn)來(lái)顯示字符或圖形。12864,就是說(shuō)它的點(diǎn)陣,是橫向128個(gè)點(diǎn)縱向64個(gè)點(diǎn),形成一個(gè)矩陣。 這個(gè)12864屏屬于單色屏,于是每個(gè)點(diǎn)的狀態(tài)參數(shù)只有兩個(gè)即亮與不亮,可以標(biāo)記為1與0,所以,對(duì)每個(gè)點(diǎn)的控制只需一位就夠了,也就是說(shuō)你輸入一比特即8位數(shù)據(jù)就可以控制8個(gè)點(diǎn)。 在它本身的功能設(shè)計(jì)上,它有兩種工作模式,一種是字符顯示模式,一個(gè)是圖形顯示模式。 所謂字符顯示模式,就是你想讓它顯示一個(gè)什么字符,你直接輸入這個(gè)字符的編碼就行了,比如你要輸入“2”這個(gè)數(shù)字,你查表,它的編碼是十六進(jìn)制數(shù)0x32,你把這個(gè)0x32按12864屏的操作規(guī)定輸入進(jìn)去就可以顯示出來(lái)了。這個(gè)屏在字符顯示模式下,它是被設(shè)計(jì)成8*4個(gè)小方塊的,也就是說(shuō)它被分成了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è)字符的編碼來(lái)控制它的顯示,比如上面說(shuō)的你要顯示數(shù)字2,則0x32(二進(jìn)制數(shù)00110010)就是它的完整的編碼值。 所謂圖形顯示模式,就是說(shuō)若是你要想在屏在顯示什么東西,包括字符,你得先把這個(gè)你要顯示的東西變成由許多點(diǎn)組成的圖形,然后你得一個(gè)點(diǎn)一個(gè)點(diǎn)地去操作點(diǎn)亮它們以在屏幕上顯示出來(lái)。 這兩個(gè)顯示模式是可以切換的,向顯示屏輸入相關(guān)指令就行了。很重要的一點(diǎn),這個(gè)屏上電復(fù)位后,它的顯示模式是字符模式,也就是說(shuō),它上電后你就可以直接使用字符模式了。 好了,我們先來(lái)實(shí)驗(yàn)它的字符顯示功能,我們來(lái)讓它顯示數(shù)字“2”。 想要使用一種電路模塊,當(dāng)然先得看看它的使用說(shuō)明書,說(shuō)明書先看什么?接口啊,看了它,才好先把電路圖搭建起來(lái)。
接口表.png (4.66 MB, 下載次數(shù): 0)
下載附件
2025-11-30 15:59 上傳
這個(gè)電路這樣搭建:為了增強(qiáng)對(duì)它的功能和實(shí)現(xiàn)方法的體驗(yàn)感,也為了讓實(shí)驗(yàn)更加簡(jiǎn)單,我們不走尋常路,不用單片機(jī)來(lái)控制它,而是用撥碼開關(guān)和按鈕開關(guān)來(lái)控制。具體電路圖如下:
12864屏手工電路圖.png (1.41 MB, 下載次數(shù): 0)
下載附件
2025-11-30 16:00 上傳
此電路中,開關(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ā)信號(hào)要求它讀取數(shù)據(jù)口的數(shù)據(jù),撥動(dòng)開關(guān)放置好數(shù)據(jù)之后,按一下就行了;KDB0~KDB7的作用是改變數(shù)據(jù)端口電位的高低來(lái)實(shí)現(xiàn)向這個(gè)端口上放置我們想要輸入的數(shù)據(jù)的目的,開關(guān)ON位置為置0。 搭建好的電路實(shí)物圖已經(jīng)在前面給出了。 電路搭建完成并通電后,首先要調(diào)節(jié)可調(diào)電阻R1以調(diào)節(jié)其對(duì)比度到能顯示內(nèi)容,這個(gè)要是沒(méi)調(diào)節(jié)到位,那是顯示不出內(nèi)容的,那接下來(lái)的實(shí)驗(yàn)必然失敗。調(diào)節(jié)的方法是邊調(diào)節(jié)邊肉眼觀察屏幕,如果全屏是均勻一色,那不對(duì),應(yīng)該是可以看到一個(gè)個(gè)的小方格,它應(yīng)該是128*64個(gè)小方格,如下圖就算調(diào)節(jié)到位了:
調(diào)整屏.jpg (292.8 KB, 下載次數(shù): 0)
下載附件
2025-11-30 16:02 上傳
好了,下面我們就開始做實(shí)驗(yàn)了,先試試輸入它的命令,試哪一條呢?這時(shí)自然是要查它的指令表了,先看字符模式下的命令表,也就是手冊(cè)上說(shuō)的基本指令表:
基本指令集.png (6.69 MB, 下載次數(shù): 0)
下載附件
2025-12-1 11:36 上傳
我們先前不是說(shuō)要顯示數(shù)字2么?它的二進(jìn)制編碼我們已經(jīng)知道是00110010,接下來(lái),我們把撥碼開關(guān)撥到這個(gè)狀態(tài),然后KRS開關(guān)為OFF,KRW開關(guān)為ON,完畢,按一下KEN,沒(méi)顯示?怎么回事?是我們這個(gè)手工實(shí)驗(yàn)的思路不成立么?不慌,再查上述指令表,發(fā)現(xiàn)里面有一個(gè)“顯示狀態(tài)開/關(guān)”指令,是不是因?yàn)檫@個(gè)指令沒(méi)有設(shè)置而導(dǎo)致其不顯示呢?管它呢,試試不就知道了。 這個(gè)指令的二進(jìn)制,已經(jīng)在上述表中寫得很清楚了,全開就是00001111,我們把這個(gè)撥碼開關(guān)撥到這個(gè)狀態(tài),然后我們看到這個(gè)屬于命令類、輸入式,那自然得將KRS改撥到ON位置,再按KEN,好,我們就看到了一個(gè)閃爍的白色的方塊,看來(lái)我們的思路是沒(méi)有問(wèn)題的。 關(guān)于這個(gè)按按鈕輸入數(shù)據(jù)的方法,前面一篇已經(jīng)講過(guò)實(shí)驗(yàn)了,在這里能用到這個(gè)屏的身上,說(shuō)明這個(gè)屏內(nèi)部應(yīng)該也有個(gè)中央控制單元。 接下來(lái),我們?cè)僮寯?shù)據(jù)端口處于00110010的狀態(tài),KRS為OFF,再按KEN,2就出來(lái)了不是?再按,再按,我們發(fā)現(xiàn),屏幕上會(huì)從左到右顯示出一個(gè)一個(gè)的“2”,然后,一行滿了之后,它跑到第三行去了,然后是才是第二行,然后是第四行。這個(gè),誰(shuí)的問(wèn)題?屏幕本身的問(wèn)題,它的設(shè)計(jì)就是這樣的,有點(diǎn)傷腦筋,我們?cè)谝院蟮膽?yīng)用中得注意處理這個(gè)問(wèn)題,不然的話,你知道的。 還有,我們?cè)诎窗粹o時(shí),我們有可能發(fā)現(xiàn)按一下按鈕會(huì)出現(xiàn)兩個(gè)及以上的“2”,這個(gè)問(wèn)題,就是按鈕的問(wèn)題了,它可能接觸不良,正宗的說(shuō)法叫“抖動(dòng)”,這個(gè)抖動(dòng),在我們以后的按鍵應(yīng)用程序中,是有相應(yīng)的處理方法的。在這里,我們可以思考一下,在我們進(jìn)行命令輸入時(shí),這個(gè)抖動(dòng)會(huì)不會(huì)有什么影響?為什么?然后做實(shí)驗(yàn)來(lái)驗(yàn)證你的判斷。 想試試它能不能輸入漢字么?簡(jiǎn)單,查中文字型表(顯示屏手冊(cè)后附),隨便查一個(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,看,“北”字出來(lái)了。 好了,手工控制12864屏算是成功了,接下來(lái),看你的興趣,試一試對(duì)“顯示狀態(tài)開/關(guān)”指令改變DB0~DB2的電位狀態(tài)再進(jìn)行輸入,看看會(huì)出現(xiàn)什么現(xiàn)象。其它的指令,你也可以按這個(gè)方法一一試試,這個(gè)方法,比用單片機(jī)去操作,簡(jiǎn)單直觀快捷得多。 這里補(bǔ)充一點(diǎn)知識(shí),手冊(cè)上沒(méi)說(shuō)清楚的:這個(gè)12864屏的設(shè)計(jì),怎么說(shuō)呢,你把它當(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)容的定位問(wèn)題,也就是在屏幕上的顯示位置問(wèn)題。 在應(yīng)用這個(gè)屏?xí)r,我們想在自己設(shè)想的位置上顯示一個(gè)內(nèi)容,就得先知道這個(gè)屏在設(shè)計(jì)上的定位方式,在字符顯示模式下,我們前面已經(jīng)說(shuō)了,它是被分成了橫向8縱向4共32個(gè)方塊的,也就是說(shuō),給它32個(gè)地址就可以全部定位了,于是,在設(shè)計(jì)上,它采用了一維定位方式,也就是把這32個(gè)方塊按排成一行的方式來(lái)編排地址,這個(gè)字符地址指令的標(biāo)志位是DB7位,也即這DB7位為1時(shí),即表示這條指令后面DB6~DB0([DB6:DB0])為字符的坐標(biāo)值(地址值),顯示屏上左上角的第一個(gè)方塊為首個(gè)顯示方塊,其地址值為0,加上DB7標(biāo)志位的1值,就是十六進(jìn)制的80,所以,我們?cè)诒砩峡吹皆谧址J较拢ㄎ皇讉(gè)方塊時(shí),要求輸入的是0x80,而最后一個(gè)字符的坐標(biāo)則是0x9F。 這個(gè)屏的設(shè)計(jì)是很奇特的,前面我們已經(jīng)說(shuō)過(guò)了,它的每個(gè)方塊在字符模式下是可以顯示兩個(gè)8*16點(diǎn)陣字符的,也就是說(shuō)每一行它可以顯示16個(gè)8*16點(diǎn)陣字符,但它的定位方式在橫向上又只有8個(gè)值,那每一塊的第二個(gè)字符的定位是怎么確定的呢?首先定位這一個(gè)方塊,然后前后兩個(gè)字符的編碼連續(xù)輸入,真是有點(diǎn)傷腦筋。 這個(gè)在屏的字符模式下的手工控制看來(lái)是成功的,做到這里,是不是有那種本來(lái)覺得很高大上很神秘的單片機(jī),原來(lái)卻是如此的簡(jiǎn)單?接下來(lái),你是不是應(yīng)該很有把握地連上單片機(jī)去操控它了?在這里提醒一下,連上單片機(jī)之后你不一定能一次成功,你得先把這個(gè)屏的手冊(cè)看仔細(xì)想明白,這個(gè)看手冊(cè)的習(xí)慣應(yīng)該養(yǎng)好。如果你手工過(guò)了卻過(guò)不了程序,那你可得好好查查手冊(cè)。 圖形模式就是手冊(cè)里說(shuō)的擴(kuò)充指令模式。關(guān)于圖形模式下的手工控制,我就不講了,有興趣的可以自己試試。這里要提示的是,在圖形模式下,定位不再是一維的,而是二維的,X方向是256個(gè)點(diǎn),每16個(gè)點(diǎn)增量一個(gè)坐標(biāo)值,也就是說(shuō)X向的每一個(gè)坐標(biāo)值,它管著16個(gè)點(diǎn),所以,X向的坐標(biāo)值是0~15;Y方向是32個(gè)點(diǎn),每1個(gè)點(diǎn)增量一個(gè)坐標(biāo)值,也就是說(shuō)它的32行點(diǎn)的每一行都有一個(gè)Y坐標(biāo)值,范圍是從0~31。為什么會(huì)是這個(gè)值?前面說(shuō)過(guò)了,你可以把它看成是256*32的屏給分成兩半后再拼起來(lái)的,這個(gè)屏的設(shè)計(jì)反正就是這么奇怪。 圖形模式下坐標(biāo)的輸入方式也很奇特,它是同樣表達(dá)方式的指令,即標(biāo)志位同樣是DB7,后面跟的才是坐標(biāo)值,區(qū)分的方式就是輸入的先后順序,先輸入的數(shù)據(jù)為X坐標(biāo),后輸入的數(shù)據(jù)為Y坐標(biāo),說(shuō)是必須兩個(gè)緊跟著輸入。然后要顯示的內(nèi)容數(shù)據(jù)也是兩個(gè)8位數(shù)據(jù)緊跟著輸入,控制該坐標(biāo)下的16個(gè)點(diǎn)的亮滅。 小貼士:撥碼開關(guān)的操作,用鑷子比較合適,徒手操作有點(diǎn)麻煩的。 想在字符模式下顯示漢字的話,該屏必須自帶中文字庫(kù),否則,你只能在圖形模式下自己編制漢字顯示數(shù)據(jù)包。 請(qǐng)諸君批評(píng)指正,先謝了。
|