電子制作小心得:
電子書(shū)要用到滾屏,在寫lcd12864底層驅(qū)動(dòng)的時(shí)候就開(kāi)始研究如何能實(shí)現(xiàn)滾屏,可惜液晶屏的寄存器所描述的滾屏只能實(shí)現(xiàn)一次滾,第2次滾的時(shí)候就失效了,再把滾屏禁止,原來(lái)的數(shù)據(jù)又回來(lái)了,弄了好久滾屏這塊還是沒(méi)弄懂。最后我只能每次翻一頁(yè),每次重新刷數(shù)據(jù)。還有一個(gè)問(wèn)題是這樣的,因?yàn)橐粋(gè)文檔里可以有英文、漢字、特殊符號(hào)(ascii里 小于32的那些)這樣一屏顯示多少數(shù)據(jù)是不固定的,有可能是540 也有可能是530 或者更少,所以每次翻頁(yè)文件指針移動(dòng)的多少都不固定,向下翻頁(yè)的時(shí)候很簡(jiǎn)單,只要記錄上一屏給lcd上顯示了幾個(gè)數(shù)據(jù),然后下翻的時(shí)候只要把文件指針向后移動(dòng)多少就行了。但向上翻頁(yè)時(shí)怎么辦?必須要知道上上一屏的數(shù)據(jù)是從哪個(gè)文件指針開(kāi)始讀的,這就要做記錄。可以開(kāi)一個(gè)20 長(zhǎng)度的unsigned long型數(shù)據(jù)來(lái)存儲(chǔ),當(dāng)然這只能支持向上翻18頁(yè),其實(shí)這塊完全可以根據(jù)要讀的txt文檔的大小來(lái)計(jì)算出最壞情況下需要的數(shù)據(jù)長(zhǎng)度,然后用malloc動(dòng)態(tài)分配出這么長(zhǎng)的內(nèi)存單元來(lái)做記錄(這要保證啟動(dòng)代碼里分配了足夠大的heap,因?yàn)閙alloc申請(qǐng)的內(nèi)存來(lái)源于堆) |