您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 第四章 EM78系列单片机程序设计
第四章EM78系列单片机程序设计(2)作者:佚名来源:不详录入:Admin更新时间:2008-7-2620:12:55点击数:2【字体:】5.3.4.液晶LCD显示驱动程序1.LCD驱动器1621HT1621为128(32×4)段LCD驱动器。它可设置为1/2或1/3偏置且通过S/W配置设置为2,3或4个共用的LCD驱动器。这使得HT1621适于多LCD应用。LCD驱动时钟图5.6HT1621功能框图从系统时钟内产生,一般为256KHZ。图5.6为HT1621功能框图2.EM78X56与HT1621接口EM78X56与HT1621接口只须四条线。CS线用以初始化串行接口电路且终止EM78X56与HT1621的通信。若CS=1,EM78X56及HT1621间发送的命令首先被禁止即而进行初始化。在模式命令或模式转换发出前,需要一高电平脉冲以初始化HT1621的串行接口,数据的读/写及命令的写人必须通过数据线。RD为输入,RAM内的数据在RD信号的下降沿同步送出至数据线上。这使EM78X56可以在RD信号的升沿及下一个下降沿到来期间读人正确的数据。WR为写输入,数据线上的数据、地址及命令将在WR信号上升写入HT1621。一条可选择的IRQ线也可用作EM78X56及HT1621间的接口。1.读/写命令时序控制及命令集CommandCodeD/CFunctionREAD110a5a4a3a2a1a0d0d1d2d3DReaddataintheRAMWRITE101a5a4a3a2a1a0d0d1d2d3DWritedatatotheRAMREADMODIFYWRITE101a5a4a3a2a1a0d0d1d2d3DREADandWRITEtoRAMSYSDIS100000000000XCTurnoffbthsystemoscillatorAndLCDblasgeneratorSYSEN100000000001XCTurnonsystemoscillatorLCDOFF100000000010XCTurnoffLCDblasgeneratorLCDON100000000011XCTurnonLCDbiasgeneratorXTAL32K1000000101XXXCSystemclocksource,crystaloscillatorBIAS1/21000010abX0XCLCD1/2biassptionab=00:2commonsoptionab=01:3commonsoptionab=10:4commonsoptionBIAS1/31000010abX1XCLCD1/2biassptionab=00:2commonsoptionab=01:3commonsoptionab=10:4commonsoption4.应用电路图5.7HT1621应用框图5.编程示例R1EQU0X01R2EQU0X02R3EQU0X03IOC5EQU0X05IOC6EQU0X06PORT5EQU0X05PORT6EQU0X06IOCBEQU0X0BIOCCEQU0X0CIOCDEQU0X0DIOCEEQU0X0EIOCFEQU0X0FS1EQU0X10S2EQU0X11S3EQU0X12S4EQU0X13S5EQU0X14S6EQU0X15S7EQU0X16S8EQU0X17S8S7EQU0X18S9EQU0X19S10EQU0X1ACOMMANDEQU0X1BR_LOOPEQU0X1CS_LOOPEQU0X1DSEG0EQU0X1ESEG1EQU0X1FSEG2EQU0X20SEG3EQU0X21SEG4EQU0X22SEG5EQU0X23SEG6EQU0X24SEG7EQU0X25SEG8EQU0X26SEG9EQU0X27SEG10EQU0X28LCD_MAPEQU0X29LCDRAMEQU0X2AKEY2EQU0X2BKEY7EQU0X2CKEY_SXEQU0X2DLP_CNT0EQU0X2ELP_CNT1EQU0X2FORG0X000JMPMAINNOPMAIN:CLRA;P50-P53SETTOOUTPUTIOWIOC5IOWIOCEMOVA,@0B11110000;P60-P63SETTOOUTPUTIOWIOC6;P64-P67SETTOINPUTMOVA,@0X0FMOVPORT5,A;P50-P53RESETTO1CLRPORT6;P60-P63RESETTO0BCPORT5,0;RESET1621INTERFACEBSPORT5,0BCPORT5,0BSPORT5,0;P50SETTO1,/CS=1MOVA,@0B11100011;COMMANDTNORMALMOVCOMMAND,ACALLC_WRITEMOVA,@0B10000000;COMMAND/IRQDISMOVCOMMAND,ACALLC_WRITEMOVA,@0B00010100;COMMANDXTAL32KMOVCOMMAND,ACALLC_WRITEMOVA,@0B00101001;COMMANDBIAS1/3,4COMMOVCOMMAND,ACALLC_WRITEMOVA,@0B00001000;COMMANDTONEOFFMOVCOMMAND,ACALLC_WRITEMOVA,@0B00000101;COMMANDWDTDISMOVCOMMAND,ACALLC_WRITEMOVA,@0B00000100;COMMANDTIMERDISMOVCOMMAND,ACALLC_WRITEMOVA,@0B00000001;COMMANDSYS_ENMOVCOMMAND,ACALLC_WRITEMOVA,@0B00000011;COMMANDLCD_ONMOVCOMMAND,ACALLC_WRITEMOVA,@0X0FF;LCDMAPSETTO1MOVSEG0,AMOVSEG2,AMOVSEG3,AMOVSEG4,AMOVSEG5,AMOVSEG6,AMOVSEG7,AMOVSEG8,AMOVSEG9,AMOVSEG10,ACLRLCD_MAP;FIRSTMAPADDIS0CALLLCD_WRITE;DISPLAYALLSEGS(BREAK):LCD_OFF:CLRCOMMAND;TURNOFFLCDSYSTEMCALLC_WRITEC_WRITE:MOVA,@0X08MOVR_LOOP,ABSPORT5,2;/WR=1BCPORT5,0;/CS=0BCPORT5,2;/WR=0BSPORT5,3;DATA=1BSPORT5,2;/WR=1BCPORT5,2;/WR=0BCPORT5,3;DATA=0BSPORT5,2;/WR=1BCPORT5,2;/WR=0BCPORT5,3;DATA=0BSPORT5,2;/WR=1BCPORT5,2;/WR=0C8_C1_WRITE:JBCCOMMAND,7;COMMAND,7=0JMPSET_DATA_1BCPORT5,3;DATA=0JMPNEXT_1SET_DATA_1:BSPORT5,3;DATA=1NEXT_1:RLCCOMMANDBSPORT5,2;/WR=1BCPORT5,2;/WR=0DJZR_LOOPJMPC8_C1_WRITEBCPORT5,3;DATA=0BSPORT5,2;/WR=1BSPORT5,0;/CS=1RETLCD_WRITE:BSPORT5,2;/WR=1BCPORT5,0;/CS=0BCPORT5,2;/WR=0BSPORT5,3;DATA=1BSPORT5,2;/WR=1BCPORT5,2;/WR=0BCPORT5,3;DATA=0BSPORT5,2;/WR=1BCPORT5,2;/WR=0BSPORT5,3;DATA=1BSPORT5,2;/WR=1BCPORT5,2;/WR=0;WRITETHELCDMEMORYADD00BCPORT5,3;DATA=0,1BSPORT5,2;/WR=1BCPORT5,2;/WR=0;DATA=0,2BSPORT5,2;/WR=1BCPORT5,2;/WR=0;DATA=0,3BSPORT5,2;/WR=1BCPORT5,2;/WR=0;DATA=0,4BSPORT5,2;/WR=1BCPORT5,2;/WR=0;DATA=0,5BSPORT5,2;/WR=1BCPORT5,2;/WR=0;DATA=0,6BSPORT5,2;/WR=1MOVA,SEG0MOVLCDRAM,A;SEG0CALLLCDDATA_WMOVA,SEG1MOVLCDRAM,A;SEG1CALLLCDDATA_WMOVA,SEG2MOVLCDRAM,A;SEG2CALLLCDDATA_WMOVA,SEG3MOVLCDRAM,A;SEG3CALLLCDDATA_WMOVA,SEG4MOVLCDRAM,A;SEG4CALLLCDDATA_WMOVA,SEG5MOVLCDRAM,A;SEG5CALLLCDDATA_WMOVA,SEG6MOVLCDRAM,A;SEG6CALLLCDDATA_WMOVA,SEG7MOVLCDRAM,A;SEG7CALLLCDDATA_WMOVA,SEG8MOVLCDRAM,A;SEG8CALLLCDDATA_WMOVA,SEG9MOVLCDRAM,A;SEG9CALLLCDDATA_WMOVA,SEG10MOVLCDRAM,A;SEG10CALLLCDDATA_WBSPORT5,0;/CS=1RETLCDDATA_W:MOVA,@0X04;RAMDATAWRITEMOVR_LOOP,ADATA_WJBCLCDRAM,0JMPRAM_SETBCPORT5,3;DATA=0JMPNEXT_3RAM_SET:BSPORT5,3;DATA=1NEXT_3:RRCLCDRAMBSPORT5,2;/WR=1BCPORT5,2;/WR=0DJZR_LOOPJMPDATA_WRETEOP5.3.5.异步串行通信在EM78系列单片机内部没有异步串行口,所以必须用软件来完成这个工作。在很多实际应用中,我们已经采用了软件实现RS232标准的异步串行通信,结果证明工作非常稳定可靠。用软件完成串行通信,降低了芯片的硬件成本。下面给出RS232的发送和接收的程序和流程,供读者参考。图5.8RS232的发送和接收流程程序清单如下:;定义STATUSEQU3P5EQU5P6EQU0X06BUFFEREQU0X11COUNTEQU0X12BITNUMEQU8;每字节数据为8位ORG0JMPMAIN;主程序MAIN:MOVA,@0X40;置P6.5为输出口,P6.6为输入口IOWP6CLRBYTEMOVA,@BITNUMMOVCOUNT,A;传送数据为每字节8位;以下为接收TEST:JBCP6,6;检测是否收到起始位JMPTEST;未测到CALLDELAY;测到起始位,下面准备接收CALLDELAY;延时START:JBCP6,6BSBYTE,7;收到高电平JBSP6,6BCBYTE,7;收到低电平DJZCOUNTJMPL1;一个字节未收完,继续收下一位CALLDELAYJMPTRANSMIT;一个字节收完,准备发送L1:RRCBYTECALLDELAYJMPSTART;以下为发送TRANSMIT:MOVA,@BITNUMMOVCOUNT,ABEGIN:BCP6,5;发送起始位CALLDELAY1;延时L2:RRCBYTE;发送一位数据JBCSTATUS,CBSP6,5JBSSTATUS,CBCP6,5CALLDELAY1;延时DJZCOUNT;一个字节发送完否?JMPL2;否,继续发送下一位BSP6,5;是CALLDELAY1JMPTEST;继续循环;延时子程序DELAY:MOVA,@23MOVBUFFER,ALOOP:DJZBUFFERJMPLOOPRETDELAY1:MOVA,@30MOVBUFFER,ALOOP1:DJZBUFFERJMPLOOP1RET5.3.6.I2C串行总线
本文标题:第四章 EM78系列单片机程序设计
链接地址:https://www.777doc.com/doc-3861749 .html