微控制器lcd實現滾屏

時間 2021-11-04 16:39:25

1樓:

看lcd的介面情況,並口需要資料線8位、片選、讀使能、寫使能等。

如果lcd為串列埠,資料線1,資料同步時鐘1,片選1。

使用定時器,啟動定時滾屏動作

如果lcd支援滾屏,只要重新整理一行即可。

否則,只能重畫了

2樓:

;………………………………………………

;16*16顯示一個漢字,向左移動

;只能顯示8個漢字,受8位控制

;………………………………………………

;資源分析

;………………………………………………

;r0指向資料快取地址,r1顯示地址指標,r2資料增加指向指標,r3顯示掃描次數

;r4、r5延時程式,r6掃描延時,50h作片選字,51h右片選字

;52h、53h、54h、55h、56h螢幕流動積存器,57h第二個字首地址

;30h~4fh顯示快取

;………………………………………………

;引腳定義

;………………………………………………

clk bit p2.0 ;74hc164清零,低電平清零

rck bit p2.1 ;74hc595移出脈衝,上升沿有效

srclr bit p2.2 ;74hc595清零,低電平清零

g bit p2.3 ;74hc595使能輸出,低電平輸出

;………………………………………………

;定義變數

;………………………………………………

d_list equ (8) ;單個資料顯示時間延時,即向右流動速度

;………………………………………………

;視訊記憶體初始化

;………………………………………………

chuli: mov r6,#d_list ;單個資料顯示時間延時

mov r2,#0 ;定義編碼資料指標,從0開始

mov r0,#30h ;首視訊記憶體地址送r0,定義視訊記憶體地址指標

loop3: mov a,r2 ;編碼資料指標送a

mov dptr,#tab ;表首地址送dptr

movc a,@a+dptr ;查表取顯示編碼

mov @r0,a ;顯示編碼送現視訊記憶體

inc r2 ;編碼資料指標+1

inc r0 ;指向下一地址

cjne r2,#32,loop3 ;判斷是否完成一次資料重新整理

loop6: acall start ;呼叫顯示程式作延時

djnz r6,loop6 ;判斷是否完成延時

mov r6,#d_list ;恢復延時時間

;………………………………………………

;顯示流動

;………………………………………………

mov 57h,#32 ;第二個字的編碼首地址

loop1: mov r2,#15 ;定義資料移動指標

mov r0,#30h ;視訊記憶體首地址送r0

loop5: mov 52h,r0 ;地址指標快取

inc r0 ;地址指標加1,指向下一地址

mov 53h,r0 ;地址指標快取

inc r0 ;指向下一地址

mov 55h,r0 ;地址指標快取

mov 54h,@r0 ;取指標地址裡的資料存54h

mov r0,52h ;取回地址指標

mov @r0,54h ;重新整理地址指標指向地址的資料

mov r0,55h ;取回地址指標

inc r0 ;地址指標+1,指向下一地址

mov 56h,@r0 ;取指標地址裡的資料存56h

mov r0,53h ;取回地址指標

mov @r0,56h ;重新整理地址指標指向地址的資料

mov r0,55h ;地址指標快取

djnz r2,loop5 ;完成15次重新整理地址

mov dptr,#tab ;表首地址送dptr

mov a,57h ;取回地址指標給a

movc a,@a+dptr ;查表取數

mov r0,#4eh ;送最後一列上地址指標

mov @r0,a ;a送給最後一列上地址

inc 57h ;編碼資料地址加1

mov a,57h ;取回地址指標給a

movc a,@a+dptr ;查表取數

mov r0,#4fh ;送最後一列下地址指標

mov @r0,a ;a送給最後一列下地址

inc 57h ;指向下一地址

loop4: acall start ;呼叫顯示程式作延時

djnz r6,loop4 ;判斷是否完成延時

mov r6,#d_list ;恢復延時時間

sjmp loop1 ;返回lop1,繼續重新整理地址裡的資料,使顯示右移

;………………………………………………

;顯示子程式

;………………………………………………

start: clr clk ;74hc164清零

setb clk

clr srclr ;74hc595清零

setb srclr

loop2: mov r3,#16 ;掃描次數送r3

mov r1,#30h ;視訊記憶體首地址送r1

clr c ;c置1

mov 50h,#0ffh ;左片選字

mov 51h,#0ffh ;右片選字

;………………………………………………

loop: clr rck ;74hc595移出脈衝準備

setb g ;置高74hc595使能端,使輸出呈高阻

mov a,@r1 ;取視訊記憶體首地址裡的是數

mov scon,#00h ;選串列埠以方式0工作

mov sbuf,a ;把a從串列埠傳送

jnb ti,$ ;等待傳送完一幀

clr ti ;清標誌位

inc r1 ;地址指標加1

mov a,@r1 ;取視訊記憶體r0所指向地址裡的是數

; mov scon,#00h ;選串列埠以方式0工作

mov sbuf,a ;把a從串列埠傳送

jnb ti,$ ;等待傳送完一幀

clr ti ;清標誌位

inc r1 ;地址指標加1

mov a,50h ;左片選字送a

rrc a ;帶進位位右移,選中第一列,低電平有效

; mov scon,#00h ;選串列埠以方式0工作

mov sbuf,a ;把a從串列埠傳送

jnb ti,$ ;等待傳送完一幀

clr ti ;清標誌位

mov 50h,a ;左片選字送回暫存器

mov a,51h ;右片選字送a

rrc a ;帶進位位右移,選中第九列,低電平有效

; mov scon,#00h ;選串列埠以方式0工作

mov sbuf,a ;把a從串列埠傳送

jnb ti,$ ;等待傳送完一幀

clr ti ;清標誌位

mov 51h,a ;右片選字送回暫存器

setb rck ;74hc595移出脈衝呈上升沿,資料移出

clr g ;使能輸出

acall delay ;調延時子程式,是顯示定格1ms

djnz r3,loop

ret;………………………………………………

;1ms延時子程式

;………………………………………………

delay : mov r4,#1 ;延時毫秒數送r4

d2: mov r5,#250 ;1ms延時值

d1: nop

nopdjnz r5,d1 ;1ms延時迴圈

djnz r4,d2 ;毫秒數減1,不等於0則繼續迴圈,等於結束

ret;………………………………………………

;顯示編碼資料

;………………………………………………

tab: db 01h,00h,01h,00h,01h,00h,01h,00h,0ffh,0ffh,05h,02h,05h,84h,09h,48h;

db 09h,20h,11h,10h,21h,08h,41h,0ch,01h,06h,01h,04h,01h,00h,00h,00h;"長",0

db 08h,20h,08h,30h,0ffh,0e0h,08h,42h,08h,4ch,1fh,0f0h,12h,10h,12h,1ah;

db 13h,0f2h,10h,04h,0ffh,0c8h,10h,30h,50h,0cch,37h,02h,12h,1ch,00h,00h;"城",1

db 00h,00h,00h,00h,1fh,0f0h,12h,20h,12h,20h,12h,20h,12h,20h,0ffh,0fch;

db 12h,22h,12h,22h,12h,22h,12h,22h,1fh,0f2h,00h,02h,00h,0eh,00h,00h;"電",2

db 10h,40h,11h,80h,16h,00h,0ffh,0ffh,14h,00h,02h,04h,13h,0c8h,92h,50h;

db 72h,60h,1fh,0ffh,32h,40h,52h,40h,92h,48h,1eh,44h,00h,78h,00h,00h;"梯",3

db 00h,40h,20h,80h,21h,00h,22h,00h,27h,0ffh,2ch,90h,34h,90h,0e4h,90h;

db 24h,94h,24h,92h,24h,93h,27h,0feh,20h,00h,20h,00h,20h,00h,00h,00h;"有",4

db 7fh,0ffh,40h,00h,4ch,40h,72h,20h,41h,0c0h,00h,00h,7fh,0ffh,52h,02h;

db 53h,04h,52h,0c0h,52h,30h,52h,48h,7eh,84h,00h,06h,00h,04h,00h,00h;"限",5

db 00h,00h,00h,80h,01h,04h,02h,0eh,0ch,14h,70h,24h,21h,0c4h,00h,8ch;

db 00h,08h,70h,08h,08h,28h,06h,1eh,03h,0ch,01h,80h,01h,00h,00h,00h;"公",6

db 00h,00h,08h,00h,49h,0f8h,49h,20h,49h,20h,49h,20h,49h,20h,49h,20h;

db 49h,20h,49h,0f0h,48h,00h,40h,04h,40h,02h,7fh,0fch,00h,00h,00h,00h;"司",7

微控制器乘法的實現

帝都小女子 org 0000h jmp start start mov sp,60h mov r2,20h mov r3,34h mov a,99h lcall bhd lcall hbd nopnop 三位元組除以單位元組子程式 入口條件 被除數在r3 r4 r5中,除數在r7中。出口資訊 ov ...

微控制器12864如何讀取,LCD12864怎麼和微控制器連線,是如何傳輸資料的?

走慢了 其實建議你不要讀lcd的資料,原因有以下幾點 1.要雙向傳輸資料 2.有時結構設計需要很長的連線線,這時就得加強lcd的驅動了,雙向的加強驅動電路麻煩,也浪費io,造成程式的通用性不強。3.要查詢lcd的資料,說明沒有建立lcd資料顯示快取,實時查詢處理更新資料很困難 建議如下 1.建立一個...

求教51微控制器程式LCD電子時鐘)

看要一下你是個什麼開發板,上面有沒有時鐘ic了,沒有專用的時鐘ic,時間做出來有可能不是很準確 給我個郵箱 給你程式.我用的是時鐘ds1302 求一個為 51 微控制器編寫的 lcd 1602電子時鐘的設計 我在學習板上調的,沒有流程圖啊。可見 一個51微控制器電子鐘程式,求詳細的解釋啊急急急!你這...