數(shù)碼相框設(shè)計(jì)-英文字母、漢字點(diǎn)陣的顯示
掃描二維碼
隨時(shí)隨地手機(jī)看文章
目的: 在LCD上顯示一個(gè)英文字母和一個(gè)中文。<從字母和漢字的點(diǎn)陣?yán)锩嫒〕鏊臄?shù)據(jù),然后搬到LCD上面去>
原理:在內(nèi)存中劃出一塊空間(FrameBuffer或顯存),工作的時(shí)候LCD控制器會從FrameBuffer中取出若干字節(jié)的數(shù)據(jù)(若干字節(jié)的數(shù)據(jù)代表一個(gè)像素),發(fā)到LCD顯示屏上
回顧:以前我們在LCD驅(qū)動(dòng)中測試,顯示hello字符:echo hello > /dev/tty1
(對于/dev/tty說明點(diǎn)我跳轉(zhuǎn)), 顯然在lcd上顯示一個(gè)字符,肯定有它的點(diǎn)陣。echo hello
只輸入了hello
的ascii碼,那么怎么根據(jù)這個(gè)ascii碼怎么得到它的點(diǎn)陣。->推測在內(nèi)核中肯定含有英文字母的點(diǎn)陣。
8x16
(選這個(gè)和16*16的中文點(diǎn)陣高度匹配)
②顯示中文字符 中文字符點(diǎn)陣在HZK里面,每個(gè)占據(jù)((16 x 16bit / 8)) = 32字節(jié);存儲詳情點(diǎn)我跳轉(zhuǎn) 以’中’為例:D6(區(qū)碼) D0(位碼)描繪一下字母’A’:16字節(jié)((8 x 16bit / 8))每一個(gè)英文字母用16字節(jié)表示;對于英文字符非常簡單,直接給出一個(gè)數(shù)組,搜索一下A的點(diǎn)陣0x41:
區(qū):表示哪一塊
為了兼容英文字符,并不是從0開始而是從A1開始
位:一塊里面的哪一個(gè)
D6 - A1
就可以得到哪一塊;D0 - A1
表示這一塊里面的哪一個(gè)
- 編譯show_font.c:這個(gè)結(jié)構(gòu)體我們需要包含一個(gè)頭文件
fb.h
,看一下我們的交叉編譯工具鏈有沒有fb.h
有的,那么證明linux3.4.2下肯定有fb.h,如圖:
那我們直接包含進(jìn)show_font.c中就可以解決。
arm-linux-gcc -o show_font show_font.c
④ 在開發(fā)板中的文件系統(tǒng)上掛載ubnubtu的文件夾。
mount -t nfs -o nolock 192.168.2.3:/work/nfs_root/smxk /mnt
詳細(xì)掛載方法點(diǎn)我跳轉(zhuǎn)
⑤把程序拷貝到我們的網(wǎng)絡(luò)文件系統(tǒng)中:
cp HZK16 show_font /work/nfs_root/smxk
—————>
⑥ 測試: Ⅰ、配置內(nèi)核:我們內(nèi)核里面沒有加入LCD的支持,配置、修改內(nèi)核支持把lcd.c編譯進(jìn)去(代碼在上面)。<關(guān)于lcd.c驅(qū)動(dòng)編寫點(diǎn)我跳轉(zhuǎn)> cp /mnt/hgfs/czg/smxk/002*/lcd.c drivers/video/Ⅱ、使用新內(nèi)核啟動(dòng)
vim drivers/video/Makefile
/2410 把原來的lcd驅(qū)動(dòng)給注釋掉 -> lcd.o
make menuconfig : 配置內(nèi)核把LCD給包含進(jìn)去
Device Drivers -> Graphics support ->Support for frame buffer devices
–>Y> s3c2410 LCD framebuffer support (以前是作為模塊,現(xiàn)在輸入Y編譯進(jìn)內(nèi)核里面去)
EXIT保存
make uImage
編譯完成后 把內(nèi)核拷貝到網(wǎng)絡(luò)文件系統(tǒng)中去:cp arch/arm/boot/uImage /work/nfs_root/smxk
使用新內(nèi)核來啟動(dòng):nfs 32000000 192.168.2.3:/work/nfs_root/smxk/uImage; bootm 32000000
解決:換成畢業(yè)班視頻的uboot:u-boot_new.bin詳情見:畢業(yè)班視屏https://edu.csdn.net/course/play/2597/40770
然后set set machid 7CF
進(jìn)而nfs 32000000 192.168.2.3:/work/nfs_root/smxk/uImage; bootm 32000000