在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > LCD12864的串口驅(qū)動(asm/c51)

            LCD12864的串口驅(qū)動(asm/c51)

            作者: 時間:2016-11-10 來源:網(wǎng)絡(luò) 收藏

            串行數(shù)據(jù)傳送共分三個字節(jié)完成:
            第一字節(jié):串口控制—格式 11111ABC
            A 為數(shù)據(jù)傳送方向控制:H 表示數(shù)據(jù)從LCD 到MCU,L 表示數(shù)據(jù)從MCU 到LCD
            B 為數(shù)據(jù)類型選擇:H 表示數(shù)據(jù)是顯示數(shù)據(jù),L 表示數(shù)據(jù)是控制指令
            C 固定為0
            第二字節(jié):(并行)8 位數(shù)據(jù)的高4 位—格式 DDDD0000
            第三字節(jié):(并行)8 位數(shù)據(jù)的低4 位—格式 0000DDDD
            串行接口時序參數(shù):(測試條件:T=25℃ VDD=4.5V)

            本文引用地址:http://www.biyoush.com/article/201611/317451.htm

            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

            2. 串口程序

            PSB 接低時,串口模式被選擇。在該模式下,只用兩根線(SID 與 SCLK)來完
            成數(shù)據(jù)傳輸。當同時使用多顆 ST7920 時,CS 線被配合使用,CS 是高有效。
            ST7920 的他不時鐘SCLK 有獨立的操作時序,當多個連續(xù)的指令需要被送
            入時,指令執(zhí)行時間需要被考慮。必須等待上一個指令執(zhí)行完畢才送入下一個指
            令,因為 ST7920 內(nèi)部沒有傳送/接收緩沖區(qū)。
            一個完整的串行傳輸周期由一下部分組成:
            首先送入啟動字節(jié),送入 5 個連續(xù)的“1”用來啟動一個周期,此時傳輸計
            數(shù)被重置,并且串行傳輸被同步。緊接的兩個位指定傳輸方向(RW,確定讀還
            是寫)和傳輸性質(zhì)(RS,確定是命令寄存器還是數(shù)據(jù)寄存器),最后的第八位是
            一個“0”。
            送完啟動字節(jié)之后,可以送入指令或是顯示數(shù)據(jù)(或是字型代碼)。指令或
            者代碼是以字節(jié)為單位的,每個字節(jié)的內(nèi)容(指令或數(shù)據(jù))在被送入時分為兩個
            字節(jié)來處理:高四位放在第一個字節(jié)的高四位,低四位放在第二個字節(jié)的高四位。
            無關(guān)位都補“0”。請參照第四章串行通訊時序圖。

            ;//////////////////////////////////////////
            ;AT89S52串口驅(qū)動LCD12864
            ;LCD與AT89S52之間的接口:
            ;CS-P2.4,SID-P2.5,CLK-P2.6
            ;PSB-P2.1,LRET-P2.3。
            ;//////////////////////////////////////////
            CS EQU P2.4
            SID EQU P2.5
            CLK EQU P2.6
            PSB EQU P2.1
            LRET EQU P2.3

            COM DATA 40H;指令暫存器
            DAT DATA 41H;顯示數(shù)據(jù)暫存器
            ADDR DATA 42H;顯示地址寄存器

            ORG 0000H
            SJMP START
            ORG 0030H
            ;主程序
            START:CLR PSB
            SETB LRET
            MOV SP,50H
            CLR A
            LCALL DEL40
            LCALL INIR

            MOV ADDR,#80H;顯示第一頁內(nèi)容
            MOV DPTR,#DISA1
            LCALL LINE
            MOV ADDR,#90H
            MOV DPTR,#DISA2
            LCALL LINE
            MOV ADDR,#88H
            MOV DPTR,#DISA3
            LCALL LINE
            MOV ADDR,#98H
            MOV DPTR,#DISA4
            LCALL LINE
            LCALL DEL2S

            MOV ADDR,#80H;顯示第二頁內(nèi)容
            MOV DPTR,#DISA5
            LCALL LINE
            MOV ADDR,#90H
            MOV DPTR,#DISA6
            LCALL LINE
            MOV ADDR,#88H
            MOV DPTR,#DISA7
            LCALL LINE
            MOV ADDR,#98H
            MOV DPTR,#DISA8
            LCALL LINE
            LCALL DEL2S

            MOV ADDR,#80H;顯示第三頁內(nèi)容
            MOV DPTR,#DISB1
            LCALL LINE
            MOV ADDR,#90H
            MOV DPTR,#DISB2
            LCALL LINE
            MOV ADDR,#88H
            MOV DPTR,#DISB3
            LCALL LINE
            MOV ADDR,#98H
            MOV DPTR,#DISB4
            LCALL LINE
            LCALL DEL2S

            MOV ADDR,#80H;顯示第四頁內(nèi)容
            MOV DPTR,#DISB5
            LCALL LINE
            MOV ADDR,#90H
            MOV DPTR,#DISB6
            LCALL LINE
            MOV ADDR,#88H
            MOV DPTR,#DISB7
            LCALL LINE
            MOV ADDR,#98H
            MOV DPTR,#DISB8
            LCALL LINE
            LCALL DEL2S

            LJMP START

            ;函數(shù)TSWC 指令的同步位元字串寫入
            TSWC: SETB CS
            SETB SID
            MOV R0,#05H
            D1:SETB CLK
            CLR CLK
            DJNZ R0,D1
            CLR SID
            MOV R0,#03H
            D2:SETB CLK
            CLR CLK
            DJNZ R0,D2
            RET
            ;函數(shù)HDB4 寫入數(shù)據(jù)的高4位
            HDB4: SETB CS
            MOV R1,#04H
            D3:RLC A
            MOV SID,C
            SETB CLK
            CLR CLK
            DJNZ R1,D3
            RET
            ;函數(shù)ZEN4 寫入數(shù)據(jù)的低4位
            ZEN4: CLR SID
            MOV R1,#04H
            D4:SETB CLK
            CLR CLK
            DJNZ R1,D4
            RET
            ;函數(shù)WCOM 指令寫入程序
            WCOM: LCALL TSWC
            MOV A,COM
            LCALL HDB4
            LCALL ZEN4
            LCALL HDB4
            LCALL ZEN4
            CLR CS
            LCALL DEL2M
            RET

            ;函數(shù)INIR 初始化LCD12864
            INIR: MOV COM,#00110000B;設(shè)置基本指令
            LCALL WCOM
            MOV COM,#00110000B;設(shè)置8-BIT
            LCALL WCOM
            MOV COM,#00001100B;顯示開,關(guān)光標,光反白
            LCALL WCOM
            MOV COM,#00000001B;清屏,AC=0
            LCALL WCOM
            MOV COM,#00000110B;進入點設(shè)定
            LCALL WCOM
            RET
            ;函數(shù)TSWD 顯示數(shù)據(jù)的同步位元字串寫入
            TSWD: SETB CS
            SETB SID
            MOV R3,#05H
            E2:SETB CLK
            CLR CLK
            DJNZ R3,E2
            CLR SID
            SETB CLK
            CLR CLK
            SETB SID
            SETB CLK
            CLR CLK
            CLR SID
            SETB CLK
            CLR CLK
            RET

            ;函數(shù)WDAT 顯示數(shù)據(jù)寫入程序
            WDAT: LCALL TSWD
            MOV A,DAT
            LCALL HDB4
            LCALL ZEN4
            LCALL HDB4
            LCALL ZEN4
            CLR CS
            LCALL DEL2M
            RET
            ;函數(shù)LINE 寫入一行顯示數(shù)據(jù)程序
            LINE:MOV A,ADDR
            MOV COM,A
            LCALL WCOM
            MOV R2,#10H
            E1:CLR A
            MOVC A,@A+DPTR
            MOV DAT,A
            LCALL WDAT
            INC DPTR
            DJNZ R2,E1
            RET
            ;函數(shù)DEL40 40MS延時
            DEL40:MOV R0,#40
            DE1:MOV R1,#250
            DE2:NOP
            NOP
            DJNZ R1,DE2
            DJNZ R0,DE1
            RET
            ;函數(shù)DEL2M 2MS延時
            DEL2M:MOV R0,#2
            DE3:MOV R1,#250
            DJNZ R1,$
            DJNZ R0,DE3
            RET
            ;函數(shù)DEL2S 2S延時
            DEL2S:MOV R5,#50
            DE4:LCALL DEL40
            DJNZ R5,DE4
            RET
            ;顯示內(nèi)容區(qū)
            DISA1:DB "青島佰謙工貿(mào)公司"
            DISA2:DB "WWW.Baidu.COM.cn"
            DISA3:DB " 13210813637 "
            DISA4:DB "128*64全點陣顯示"
            DISA5:DB "圖形以及字符顯示"
            DISA6:DB "2009年 7月 29 日"
            DISA7:DB "設(shè)計者:趙玉慶 "
            DISA8:DB "AT89C52 與ST7920"

            DISB1:DB "昨夜星辰昨夜風,"
            DISB2:DB "畫樓西畔桂堂東。"
            DISB3:DB "身無彩鳳雙飛翼,"
            DISB4:DB "心有靈犀一點通。"
            DISB5:DB "隔座送鉤春酒暖,"
            DISB6:DB "分曹射覆蠟燈紅。"
            DISB7:DB "嗟余聽鼓應(yīng)官去,"
            DISB8:DB "走馬蘭臺類轉(zhuǎn)蓬。"

            END

            .......................lcd12864 串口驅(qū)動程序(c51:已調(diào)試過).................................................

            #include
            #define uchar unsigned char
            sbit cs=P2^4;
            sbit sid=P2^5;
            sbit clk=P2^6;
            sbit psb=P2^1;
            sbit res=P2^3;
            uchar a,i;
            uchar code table1[]="實用開關(guān)電源手冊";
            uchar code table2[]="Lcent Technologi";
            uchar code table3[]="51單片機開發(fā)原理";
            uchar code table4[]="STC89C52_LCD1286";

            void d1ms(void) //誤差 0us
            {
            unsigned char a,b,c;
            for(c=1;c>0;c--)
            for(b=142;b>0;b--)
            for(a=2;a>0;a--);
            }

            void d10ms(void) //誤差 0us
            {
            unsigned char a,b,c;
            for(c=1;c>0;c--)
            for(b=38;b>0;b--)
            for(a=130;a>0;a--);
            }


            void synbit()
            {
            uchar j;
            sid=1;
            for(j=0;j<5;j++)
            {
            clk=1;
            clk=0;
            }
            }

            void zorn()
            {
            uchar j;
            for(j=0;j<4;j++)
            {
            sid=0;
            clk=1;
            clk=0;
            }
            }

            void send(uchar date)
            {
            uchar j;
            for(j=0;j<4;j++)
            {
            sid=(bit)(date&0x80);
            clk=1;
            clk=0;
            date=date<<1;
            }
            zorn();
            for(j=0;j<4;j++)
            {
            sid=(bit)(date&0x80);
            clk=1;
            clk=0;
            date=date<<1;
            }
            zorn();
            }

            void write_com(uchar com)
            {
            uchar j;
            cs=1;
            synbit();
            sid=0;
            for(j=0;j<3;j++)
            {
            clk=1;
            clk=0;
            }
            send(com);
            cs=0;
            d1ms();
            }

            void init()
            {
            write_com(0x30);
            write_com(0x30);
            write_com(0x01);
            write_com(0x02);
            write_com(0x06);
            write_com(0x0c);
            write_com(0x14);
            }

            void write_date(uchar date)
            {
            cs=1;
            synbit();
            sid=0;
            clk=1;
            clk=0;
            sid=1;
            clk=1;
            clk=0;
            sid=0;
            clk=1;
            clk=0;
            send(date);
            cs=0;
            d1ms();
            }
            void displcd()
            {
            write_com(0x80);
            for(i=0;i<0x10;i++)
            {
            write_date(table1[i]);
            }
            write_com(0x88);
            for(i=0;i<0x10;i++)
            {
            write_date(table2[i]);
            }
            write_com(0x90);
            for(i=0;i<0x10;i++)
            {
            write_date(table3[i]);
            }
            write_com(0x98);
            for(i=0;i<0x10;i++)
            {
            write_date(table4[i]);
            }
            }

            void main()
            {
            cs=0;
            sid=0;
            clk=0;
            SP=0x30;
            res=0;
            d10ms();
            res=1;
            psb=0;
            init();
            displcd();
            while(1);
            }



            關(guān)鍵詞: LCD12864串口驅(qū)

            評論


            技術(shù)專區(qū)

            關(guān)閉