HT48R50A-1驱动HT1621的驱动例程
<p>[attach]2309[/attach]<br/>;*******************************<br/>; HT48R50A-1驱动HT1621的驱动例程, 此例用于演示单片机控制LCD显示<br/>; 在本试验中 ORD1=ID码 + C8<br/>; ORD2=C7 C6 C5 C4 C3 C2 C1 C0<br/>; 在读写子程序中,每次读写HT162两个单元,所以是8位数据<br/>; BODY: HT48R50A-1 大玻璃<br/>;*********************************<br/>INCLUDE HT48R50A-1.INC </p><p>DT EQU PA.3 ;定义PA.3为HT1621的DATA控制线 <br/>WR EQU PA.2 ;定义PA.2为HT1621的WR控制线 <br/>RD EQU PA.1 ;定义PA.1为HT1621的RD控制线 <br/>CS EQU PA.0 ;定义PA.0为HT1621的CS控制线 </p><p>DATA .SECTION 'DATA' ;变量定义 <br/>ADDR DB ? ;地址寄存器<br/>NUMB DB ? ;数据寄存器<br/>LOOP DB ? ;循环次数寄存器<br/>ORD1 DB ? ;LCD COMMAND 高字节<br/>ORD2 DB ? ;LCD COMMAND 低字节</p><p>TEMP DB ? ;For normal use<br/>RAM DB ? ;地址寄存器,HT1621所有RAM清0段用到<br/>RAM1 DB ? ;记录LCD显示寄存器,0->1-2...9->0->1循环<br/>RAM2 DB ? ;显示子程序中,查表结果寄存器 <br/>T EQU 0AH ;For delay time<br/>T1 EQU 01H ;For delay time2</p><p>NUM DB ? <br/>DATA0 DB ?<br/>DATA1 DB ?<br/> <br/>;*********************************<br/>;Define For Software Control<br/>;*********************************<br/>PROGRAM_NUM DB ? ;For Program Jump<br/>;*********************************<br/>;Define For Ht1621 Initial(See Ht1621 Datasheet Of Holtek Page 18)<br/>;*********************************<br/>COMMAND_ID EQU 008H ;XXXX 100C8 <br/>READ_ID EQU 00CH ;XXXX 110C8 <br/>WRITE_ID EQU 00AH ;XXXX 101C8<br/> <br/> ;命令码的低8位定义.参考HT1621的资料说明<br/>SYS_DIS EQU 000H ;C7 C6 C5 C4 C3 C2 C1 C0<br/>SYS_EN EQU 002H <br/>LCD_OFF EQU 004H <br/>LCD_ON EQU 006H <br/>TIMER_DIS EQU 008H <br/>WDT_DIS EQU 00AH <br/>TIMER_EN EQU 00CH <br/>WDT_EN EQU 00EH <br/>TONE_OFF EQU 010H <br/>TONE_ON EQU 012H <br/>CLR_TIMER EQU 018H <br/>CLR_WDT EQU 01CH <br/>XTAL_32K EQU 028H <br/>RC_256K EQU 030H <br/>EXT_256K EQU 038H <br/> <br/>TONE_4K EQU 080H <br/>TONE_2K EQU 0C0H </p><p><br/>;********************************* <br/>CODE .SECTION 'CODE' ;程序代码区定义 <br/> ORG 000H<br/> JMP MAIN <br/> <br/> org 004h<br/> RETI<br/> <br/> org 008h<br/> RETI<br/>;**************************</p> <p>;main program<br/>;**************************<br/> ORG 010H<br/>MAIN: MOV A,00H<br/> MOV PAC,A<br/> CLR PA<br/> MOV A,0FH<br/> MOV PBC,A<br/> CLR RAM<br/> CLR RAM1<br/> CLR RAM2 ;I/O, RAM initial<br/>;----------------------------- <br/> CALL INITLCD ;HT1621 initial <br/>;-----------------------------<br/> MOV A,20H<br/> MOV NUM,A<br/> DEC RAM<br/>KKK1: INC RAM <br/> MOV A,RAM <br/> MOV ADDR,A <br/> MOV A,00H <br/> MOV NUMB,A<br/> CALL WRITE <br/> DEC NUM<br/> SZ NUM<br/> JMP KKK1 ;All LCD OFF<br/>;---------------------------------------- <br/>; MOV A,09H<br/>; MOV RAM1,A <br/>; CALL DISPLAY<br/>;SS: NOP<br/>; JMP SS ;for test lcd display <br/>;-----------------------------------------------<br/> CALL DISPLAY<br/>MAIN1: CLR PB.4 ; S1: SCAN<br/> SZ PB.0<br/> JMP MAIN3<br/> CALL DELAY<br/> SZ PB.0<br/> JMP MAIN3<br/>MAIN2: SNZ PB.0<br/> JMP MAIN2<br/> INC RAM1<br/> MOV A,RAM1<br/> SUB A,0AH<br/> SNZ C<br/> JMP MAIN21 <br/> CLR RAM1 <br/>MAIN21:CALL DISPLAY</p><p>MAIN3: JMP MAIN1</p><p>;**********************************************<br/>DISPLAY PROC<br/> MOV A,01H<br/> MOV RAM,A </p><p>LOOPA: <br/> <br/> MOV A,RAM1<br/> MOV [07H],A ;MOV TBLP,A<br/> TABRDL RAM2<br/> <br/> MOV A,1DH<br/> MOV ADDR,A<br/> MOV A,RAM2<br/> MOV NUMB,A ;mov numb,a<br/> CALL WRITE ;ONE WRITE TWO ADDRESS <br/> <br/> MOV A,1BH<br/> MOV ADDR,A<br/> MOV A,RAM2<br/> MOV NUMB,A<br/> CALL WRITE</p><p> MOV A,19H<br/> MOV ADDR,A<br/> MOV A,RAM2<br/> MOV NUMB,A<br/> CALL WRITE<br/> <br/> RET<br/>DISPLAY ENDP<br/> <br/>;****************************<br/>;****************************<br/>INITLCD PROC<br/> MOV A,COMMAND_ID ;<1> turn off tone outputs <br/> MOV ORD1,A<br/> MOV A,TONE_OFF<br/> MOV ORD2,A<br/> CALL LCDCOM </p><p> MOV A,09H ;<2> disable IRQ output<br/> MOV ORD1,A<br/> MOV A,00H<br/> MOV ORD2,A<br/> CALL LCDCOM </p><p> MOV A,COMMAND_ID ;<3> disable time base output<br/> MOV ORD1,A<br/> MOV A,TIMER_DIS<br/> MOV ORD2,A<br/> CALL LCDCOM</p><p> MOV A,COMMAND_ID ;<4> disable WDT time-out flag output<br/> MOV ORD1,A<br/> MOV A,WDT_DIS<br/> MOV ORD2,A<br/> CALL LCDCOM</p><p> MOV A,COMMAND_ID ;<5> system clock source,0n-chip RC oscillator<br/> MOV ORD1,A<br/> MOV A,RC_256K<br/> MOV ORD2,A<br/> CALL LCDCOM</p><p> MOV A,COMMAND_ID ;<6> LCD 1/2 bais option; ab=10 4 commons option<br/> MOV ORD1,A<br/> MOV A,52h ;3bais 4com ;50H--2bais 4com<br/> MOV ORD2,A<br/> CALL LCDCOM</p><p> MOV A,COMMAND_ID ;<7> turn on system oscillator<br/> MOV ORD1,A<br/> MOV A,02H<br/> MOV ORD2,A<br/> CALL LCDCOM</p><p> MOV A,COMMAND_ID ;<8> turn on LCD base generator<br/> MOV ORD1,A<br/> MOV A,LCD_ON<br/> MOV ORD2,A<br/> CALL LCDCOM</p><p> MOV A,09H ;<9> normal mode<br/> MOV ORD1,A<br/> MOV A,0C6H<br/> MOV ORD2,A<br/> CALL LCDCOM<br/> RET<br/>INITLCD ENDP</p><p>;*********************************** <br/>; delay time<br/>;***********************************<br/>delay proc<br/> mov a,t<br/> mov [51h],a<br/>delay1:mov a,30h<br/> mov [52h],a<br/>delay2:dec [52h]<br/> sz [52h]<br/> jmp delay2<br/> dec [51h]<br/> sz [51h]<br/> jmp delay1 <br/> ret<br/>delay endp <br/> <br/>;***********************************<br/>; <1> COMMAND, [41H] ;100 XXXX XXXX X<br/>; LCD COMMAND [61H][60H]--->LCD<br/>; [61H]---HIGH [60H]----LOW<br/>;**********************<br/>LCDCOM PROC<br/> MOV A,00H<br/> MOV PAC,A<br/> MOV A,0FFH<br/> MOV PA,A</p><p> CLR CS <br/> MOV A,04H<br/> MOV LOOP,A<br/>LCD1: SZ ORD1.3<br/> JMP LCD2<br/> CLR DT<br/> JMP LCD3<br/>LCD2: SET DT<br/>LCD3: CLR WR<br/> NOP<br/> NOP<br/> SET WR<br/> RL ORD1<br/> DEC LOOP<br/> SZ LOOP<br/> JMP LCD1</p><p> MOV A,08H<br/> MOV LOOP,A<br/>LCD4: SZ ORD2.7<br/> JMP LCD5<br/> CLR DT<br/> JMP LCD6<br/>LCD5: SET DT<br/>LCD6: CLR WR<br/> NOP<br/> NOP<br/> SET WR<br/> RL ORD2<br/> DEC LOOP<br/> SZ LOOP<br/> JMP LCD4<br/> SET CS<br/> RET</p> <p>LCDCOM ENDP<br/>;***********************************<br/>; <2> READ ADDR [40H] ;110 A5 A4 A3 A2 A1 A0<br/>; NUMB [41H]<br/>;***********************************<br/>READ PROC<br/> MOV A,00H<br/> MOV PAC,A<br/> MOV A,0FFH<br/> MOV PA,A</p><p> CLR CS</p><p> CLR WR<br/> NOP<br/> SET WR<br/> NOP<br/> CLR WR<br/> NOP<br/> SET WR<br/> NOP<br/> CLR WR<br/> CLR DT<br/> NOP<br/> SET WR ;110</p><p> MOV A,06H<br/> MOV LOOP,A<br/>RRR: CLR WR<br/> SZ ADDR.5<br/> JMP RRR1<br/> CLR DT<br/> JMP RRR2<br/>RRR1:SET DT<br/>RRR2:NOP<br/> SET WR<br/> RL ADDR<br/> DEC LOOP<br/> SZ LOOP<br/> JMP RRR ;SEND ADDRESS</p><p> SET PAC.0<br/> MOV A,00H<br/> MOV NUMB,A<br/> MOV A,08H<br/> MOV LOOP,A<br/>RRR3:CLR RD<br/> NOP<br/> SET RD<br/> NOP<br/> SZ DT<br/> JMP RRR4<br/> CLR NUMB.7<br/> JMP RRR5<br/>RRR4:SET NUMB.7<br/>RRR5:RR NUMB<br/> DEC LOOP<br/> SZ LOOP<br/> JMP RRR3<br/> <br/> SET CS<br/> RL NUMB<br/> RET<br/>READ ENDP<br/>;***********************************<br/>; <3> WRITE ADDR [40H] ;101 A5A4A3A2A1D0D1D2D3<br/>; NUMB [41H]<br/>;***********************************<br/>WRITE PROC<br/> MOV A,00H<br/> MOV PAC,A<br/> MOV A,0FFH<br/> MOV PA,A</p><p> CLR CS<br/> SET DT<br/> CLR WR<br/> NOP<br/> NOP<br/> SET WR<br/> CLR DT<br/> CLR WR<br/> NOP<br/> NOP<br/> SET WR<br/> SET DT<br/> CLR WR<br/> NOP<br/> NOP<br/> SET WR ;SEND 1 0 1</p><p> MOV A,06H<br/> MOV LOOP,A<br/>LLCD1: SZ ADDR.5<br/> JMP LLCD2<br/> CLR DT<br/> JMP LLCD3<br/>LLCD2: SET DT<br/>LLCD3: CLR WR<br/> NOP<br/> NOP<br/> SET WR<br/> RL ADDR<br/> DEC LOOP<br/> SZ LOOP<br/> JMP LLCD1 ;SEND A5A4A3A2A1A0</p><p> MOV A,08H ;send d0d1d2d3,D4D5D6D7<br/> MOV LOOP,A<br/>LLCD4: SZ NUMB.0<br/> JMP LLCD5<br/> CLR DT<br/> JMP LLCD6<br/>LLCD5: SET DT<br/>LLCD6: CLR WR<br/> NOP<br/> NOP<br/> SET WR<br/> RR NUMB<br/> DEC LOOP<br/> SZ LOOP<br/> JMP LLCD4<br/> SET CS<br/> RET<br/>WRITE ENDP<br/>;**********************************<br/> ORG 0f00H<br/>; 0 1 2 3 4 5 6 7 8 9<br/>TABLE: DW 0AFH ,06H, 6DH, 4FH, 0C6H, 0CBH, 0EBH, 0EH, 0EFH, 0CFH<br/>; <br/>;------------------------------------------------------</p><p><br/> end</p> 顶一个。页:
[1]