freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于單片機(jī)的led顯示屏設(shè)計(jì)(編輯修改稿)

2025-07-21 04:17 本頁面
 

【文章內(nèi)容簡介】 理的設(shè)定中斷次數(shù)就能保證刷新屏幕間隔時(shí)間內(nèi)顯示緩沖區(qū)有足夠的時(shí)間處理數(shù)據(jù)。 字模處理 從字節(jié)長度看,漢字占兩個(gè)字節(jié)(Byte),數(shù)字只占一個(gè)字節(jié),那么:漢字字模為16*16個(gè)點(diǎn)),ASCII碼字符的字模為8*16個(gè)點(diǎn)。這樣字模的長度不同,處理起來就會(huì)有困難。為此,本設(shè)計(jì)采用這種字模處理方法:把漢字拆成兩半,這樣就與英文字母和阿拉伯?dāng)?shù)字的字模統(tǒng)一起來。字模的存儲(chǔ)是按順次存儲(chǔ)在數(shù)據(jù)存儲(chǔ)區(qū)里,如‘蘇’字的字模在數(shù)據(jù)存儲(chǔ)區(qū)里是這樣存放的:uchar code tab[32]={ 08H,20H,08H,24H,0FFH,0FEH,08H,20H0AH,20H,02H,10H,3FH,0F8H,02H,10H02H,10H,22H,18H,24H,16H,44H,12H08H,10H,10H,10H,20H,50H,40H,20H } 但是僅僅依靠人工方法獲取漢字代碼是會(huì)很繁瑣。所以,我檢索了互聯(lián)網(wǎng),找到了一款功能十分強(qiáng)大的漢字字庫提取程序,軟件打開后,在指定地方輸入漢字,點(diǎn)“生成”,十六進(jìn)制數(shù)據(jù)的漢字代碼即可自動(dòng)生成。甚至可以輸入多個(gè)漢字以及選擇動(dòng)態(tài)顯示方式,截圖如下: 動(dòng)態(tài)效果的實(shí)現(xiàn)本文設(shè)計(jì)的LED點(diǎn)陣顯示屏可以實(shí)現(xiàn)左移、掉下、上升三種顯示方式。其中只有左移方式可以實(shí)現(xiàn)多于一屏內(nèi)容的顯示,其它的顯示方式只能顯示一屏的內(nèi)容。顯示方式設(shè)置由微機(jī)控制,微機(jī)在傳送點(diǎn)陣字模數(shù)據(jù)時(shí),先顯示方式,再傳送點(diǎn)陣數(shù)據(jù)。顯示過程由單片機(jī)定時(shí)中斷程序控制,每定時(shí)中斷一次點(diǎn)亮一行,每中斷16次,即可對(duì)整個(gè)顯示屏掃描一次,完成一屏信息的刷新,每秒顯示畫面數(shù)達(dá)78屏,可保證畫面無閃爍感。編程采用的是C言語,應(yīng)用C51編程具有以下優(yōu)點(diǎn): ① C51管理內(nèi)部寄存器和存儲(chǔ)器的分配,編程時(shí),無需考慮不同存儲(chǔ)器的尋址和數(shù)據(jù)類型等細(xì)節(jié)問題。 ② 程序由若干函數(shù)組成,具有良好的模塊結(jié)構(gòu)。 ③ 有豐富的子程序庫可直接引用,從而大大減少用戶編程的工作量。 ④ C言語和匯編言語可以交叉使用,匯編言語程序代碼短、運(yùn)行速度快,但復(fù)雜運(yùn)算編耗時(shí)。用匯編言語編寫與硬件有關(guān)的部分,用C言語編寫與硬件無關(guān)的運(yùn)算部分程序,充分發(fā)揮兩種言語的長處,提高開發(fā)效率。 左移效果 在顯示條屏較小的情況下,為了顯示更多的信息內(nèi)容,普遍采用的方法是移位顯示,按照人們的日常習(xí)慣,本設(shè)計(jì)選擇左移的動(dòng)態(tài)效果,它的特點(diǎn)是不僅僅局限于顯示屏幕的大小、顯示效果好,編程簡單。下面,用16*64的條型顯示屏的左移方式為例,說明左移動(dòng)態(tài)效果的實(shí)現(xiàn)方法: 屏幕的數(shù)據(jù)大小為128個(gè)字節(jié),所以要先在數(shù)據(jù)存儲(chǔ)區(qū)里開辟一個(gè)256個(gè)字節(jié)的顯示緩沖區(qū)(分為兩個(gè)顯存),其中一個(gè)用以保存當(dāng)前需要顯示的信息內(nèi)容,而另一個(gè)用來處理數(shù)據(jù)。要實(shí)現(xiàn)左移的動(dòng)態(tài)效果,原理很簡單,其實(shí)就是每隔一段時(shí)間,向顯示緩沖區(qū)里加入一列數(shù)據(jù)。具體做法是:第一個(gè)字節(jié)左移一位,保存于變量A中,第二個(gè)字節(jié)右移7位(一個(gè)字節(jié)是8位),保存于變量B中,A和B邏輯或運(yùn)算,結(jié)果保存于A中,這樣就完成了第一個(gè)字節(jié)的數(shù)據(jù)處理。一行有8個(gè)字節(jié)的數(shù)據(jù)需要處理,所以要設(shè)8此循環(huán),如此循環(huán)8次后,便完成了一行的數(shù)據(jù)處理。同時(shí),每個(gè)字有16行,因此我們需要在8次循環(huán)里再設(shè)計(jì)一個(gè)16次的外循環(huán),至此,整個(gè)屏幕的數(shù)據(jù)就都處理完了。再啟動(dòng)更新信號(hào),交換顯示存儲(chǔ)區(qū),顯示程序就顯示剛才處理好了的內(nèi)容,接著,單片機(jī)再對(duì)另一顯示存儲(chǔ)區(qū)的數(shù)據(jù)進(jìn)行處理,處理完成后再交換顯示。如此這樣,就能實(shí)現(xiàn)左移的動(dòng)態(tài)效果。程序流程圖如下圖所示:具體源程序如下:void rtol(void) { uchar a,b,i,k,u,n。 while(1) { // //判斷內(nèi)容改變沒有? if(change==1)break。 // for(n=0。nleng。n++) //一共有l(wèi)ength個(gè)字(8*16) { // //判斷內(nèi)容改變沒有? if(change==1)break。 // for(i=0。i8。i++) //一邊字有8位,要移8次 { // //判斷內(nèi)容改變沒有? if(change==1)break。 // if(choose==1) //處理顯存1區(qū) { addr2=0。 } else //處理顯存2區(qū) { addr2=256。 } // for(k=0。k16。k++) //一屏要處理16個(gè)字(8*16) { for(u=0。u16。u++) //一個(gè)字要處理16個(gè)字節(jié) { num=512+u+k*16+n*16。 a=*numi。 num=512+u+k*16+16+n*16。 b=*num8i。 a|=b。 dispd=addr2+u+k*16。 *dispd=a。 //保存數(shù)據(jù) } } while(jh==0)。 jh=0。 //關(guān)交換信號(hào) choose=~choose。 } } } } 上升效果編程 本系統(tǒng)實(shí)現(xiàn)的上升效果具體是:內(nèi)容從顯示屏底部緩慢地上升,整行字出現(xiàn)后,會(huì)定格一段時(shí)間,讓人們看清楚顯示的內(nèi)容,接著閃爍三下,提醒正在顯示的內(nèi)容即將退出,然后內(nèi)容開始上移,直到消失,這樣,就完成了一次完整顯示過程。具體實(shí)現(xiàn)的方法是:設(shè)定一個(gè)16次循環(huán),在第一次循環(huán)中,顯存只取顯示內(nèi)容的第一行數(shù)據(jù),放到顯存的末行,即第16行。在第二次循環(huán)中,顯存讀取顯示內(nèi)容的第一和第二行數(shù)據(jù),同時(shí),第一行數(shù)據(jù)放入顯存的第15行,第二行數(shù)據(jù)放入顯存的第16行,如此循環(huán)16次,直到全部顯示內(nèi)容顯示出來。設(shè)定程序,顯示內(nèi)容閃爍三次。接著退出的方法差不多。區(qū)別僅是每次取的行數(shù)不一樣。程序流程圖如下:具體源程序如下:void rise(void) { uchar i。 uint k,g,t,m。 // deal()。 //顯示前把數(shù)據(jù)重新排列 // while(1) { // //判斷內(nèi)容改變沒有? if(change==1)break。 // for(t=0。t2。t++) //入、出共兩次 { // //判斷內(nèi)容改變沒有? if(change==1)break。 // if(t==0)g=1024。 //入的首地址 if(t==1)g=1280。 //出的首地址 // for(i=0。i=16。i++) //出完有16行 { // //判斷內(nèi)容改變沒有? if(change==1)break。 // if(choose==1) //處理顯存1區(qū) { addr2=0。 } else //處理顯存2區(qū) { addr2=256。 } // for(k=0。k256。k++) //一屏有256個(gè)字節(jié) { dispd=addr2+k。 num=g+k。 *dispd=*num。 } g+=16。 //指向上一行數(shù)據(jù) while(jh==0)。 jh=0。 //關(guān)交換信號(hào) choose=~choose。 } // 定一會(huì) for(i=0。i25。i++) { // //判斷內(nèi)容改變沒有? if(change==1)break。 // while(jh==0)。 jh=0。 } if(t==0) { // //判斷內(nèi)容改變沒有? if(change==1)break。 // 閃3下 TR0=0。 p34=1。 p35=1。 for(m=0。m34000。m++)。 TR0=1。 // //判斷內(nèi)容改變沒有? if(change==1)break。 // for(m=0。m35000。m++)。 TR0=0。 p34=1。 p35=1。 // //判斷內(nèi)容改變沒有? if(change==1)break。 // for(m=0。m34000。m++)。 TR0=1。 // //判斷內(nèi)容改變沒有? if(change==1)break。 // for(m=0。m35000。m++)。 TR0=0。 p34=1。 p35=1。 // //判斷內(nèi)容改變沒有? if(change==1)break。 // for(m=0。m34000。m++)。 TR0=1。 // //判斷內(nèi)容改變沒有? if(change==1)break。 // for(m=0。m35000。m++)。 } }
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1