<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          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.ex-cimer.com/article/201611/317451.htm

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

          2. 串口程序

          PSB 接低時,串口模式被選擇。在該模式下,只用兩根線(SID 與 SCLK)來完
          成數(shù)據(jù)傳輸。當(dāng)同時使用多顆 ST7920 時,CS 線被配合使用,CS 是高有效。
          ST7920 的他不時鐘SCLK 有獨立的操作時序,當(dāng)多個連續(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)位都補(bǔ)“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)光標(biāo),光反白
          LCALL WCOM
          MOV COM,#00000001B;清屏,AC=0
          LCALL WCOM
          MOV COM,#00000110B;進(jìn)入點設(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 "昨夜星辰昨夜風(fēng),"
          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單片機(jī)開發(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)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();