在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 光電顯示 > 設(shè)計(jì)應(yīng)用 > 基于單片機(jī)的LED顯示屏硬件設(shè)計(jì)方案

            基于單片機(jī)的LED顯示屏硬件設(shè)計(jì)方案

            作者: 時(shí)間:2012-03-06 來(lái)源:網(wǎng)絡(luò) 收藏

            3 總體

            3.1 屏體接口模塊

            屏體接口包括屏體接口頭文件、屏幕緩沖區(qū)的定義、屏體接口初始化、刷新定時(shí)器中斷服務(wù)程序和SPI中斷服務(wù)程序幾個(gè)部分。

            屏體接口的頭文件screen.h 應(yīng)該使屏幕緩沖區(qū)對(duì)其他應(yīng)用可見(jiàn), 并提供屏體初始化函數(shù)。具體定義如下:

              #ifndef _SCREEN_H_

              #define _SCREEN_H_

              #include incboard.h

              extern u8 xdata SCR_BUF[16][16];

              void screen_init(void);

              #endif

            這樣就把屏幕緩沖區(qū)的結(jié)構(gòu)暴露給應(yīng)用, 但應(yīng)用不必關(guān)心具體的屏幕刷新操作。

            具體屏體接口的實(shí)現(xiàn)集中在一個(gè)文件screen.c 中定義。具體如下:

            首先是屏幕緩沖區(qū)定義:

            u8 xdata SCR_BUF[16][16]_at_0x0000;//~0x00ff 256Bytes其次是當(dāng)前顯示行和輸出列變量定義, 屬于靜態(tài)變量, 應(yīng)用程序不可見(jiàn)。

            static u8 data row,col;

            然后是屏幕初始化, 包括刷新定時(shí)器0 的初始化、SPI 的初始化、鎖存bLatch 信號(hào)的初始化、屏幕緩沖區(qū)的初始清零以及定時(shí)器和SPI 中斷的優(yōu)先權(quán)和使能位的初始化代碼略。

            SPI 和定時(shí)器0 的中斷服務(wù)程序是屏體接口的關(guān)鍵。

            定時(shí)器0 的中斷服務(wù)程序首先進(jìn)行掃描行增量取模運(yùn)算,并將掃描行輸出。然后依據(jù)掃描行取出屏幕緩沖區(qū)對(duì)應(yīng)行的第一個(gè)字節(jié)發(fā)送到SPI 端口。同時(shí)列增量。

              void display_ONe_screen(void)interrupt 1 using 3{

              row = (++row)0x0f;

              P0 = (P0 0xf0)|((~row) 0xf);

              col = 0;SPDAT = ~SCR_BUF[row][col++];

              }

            這樣編寫(xiě)的屏體驅(qū)動(dòng), 應(yīng)用只要在初始化屏體后,向屏幕緩沖區(qū)中寫(xiě)入要顯示的數(shù)據(jù)即可, 而不必關(guān)心屏幕顯示的細(xì)節(jié)。

            3.2 UART 接口

            UART 接口負(fù)責(zé)與上位機(jī)的數(shù)據(jù)收發(fā), 盡管發(fā)送可以同步進(jìn)行, 但接收必須異步進(jìn)行。因而UART 接口的核心仍然應(yīng)該是一個(gè)中斷服務(wù)程序。

            UART 接口的頭文件uart.h 隱藏了接收緩沖區(qū)的信息, 用戶(hù)可調(diào)用的函數(shù)只有初始化、發(fā)送和接收。

              #ifndef _UART_H_

              #define _UART_H_

              void uart_init(void);

              void uart_put_c(u8 ch);

              u8 uart_get_c(u8 *);

              #endif

            UART 的接口實(shí)現(xiàn)首先定義一個(gè)接收緩沖FIFO, 以及對(duì)FIFO 的讀下標(biāo)uart_rd 和寫(xiě)下標(biāo)uart_wr, 他們都是文件內(nèi)可見(jiàn)的靜態(tài)變量:

              static u8 xdata uart_buf[64];

              static u8 uart_rd,uart_wr;

              bit fSend

            UART 的初始化包括進(jìn)行FIFO 的初始化和UART格式、波特率、中斷的初始化。代碼略。

            UART 的ISR 主要是服務(wù)于接收, 無(wú)條件地將數(shù)據(jù)裝入FIFO, 并調(diào)整寫(xiě)入指針。

              static void uart_isr(void)interrupt 4 using 1{

              if(RI){RI = 0;

              uart_buf[uart_wr++] = SBUF;

              uart_wr = 0x0f;

              }

              }

            提供給用戶(hù)的發(fā)送程序首先檢測(cè)發(fā)送結(jié)束標(biāo)記, 如果為0, 表示上次發(fā)送尚未結(jié)束, 直接返回錯(cuò)誤信息1。



            評(píng)論


            相關(guān)推薦

            技術(shù)專(zhuān)區(qū)

            關(guān)閉