?Function?:?LCD字符顯示+KEY按鍵處理示例程序?*?
	
	
	
	;?MICroProcessor?:?HT48R50A-1/28SKDIP-A??????*?
	
	;?Author:??????????????????????*?
	;?Crystal?:???????4MHz???????????????????????*?
	;?********************************************?
	#INCLUDE????????????????HT48R50A-1.INC?
	LCD_DATA????????????????EQU?????PC?
	LCD_DATA_CTRL???????????EQU?????PCC?
	LCD_CTRL????????????????EQU?????PB?
	LCD_CTRL_CTRL???????????EQU?????PBC?
	E???????????????????????EQU?????1?
	RS??????????????????????EQU?????0?
	;------------------------------------------------------------?
	DATA????.SECTION????????AT?60H??’DATA’?
	DELAY_COUNTER_1?????????DB??????????????;[60H]?
	DELAY_COUNTER_2?????????DB??????????????;[61H]?
	DELAY_COUNTER_3?????????DB??????????????;[62H]?
	DATA????????????????????DB??????????????;[63H]?
	COUNTER?????????????????DB??????????????;[64H]?
	;------------------------------------------------------------?
	CODE????.SECTION????????AT?00H??’CODE’?
	????????????????ORG?????00H?
	????????????????JMP?????START?
	????????????????ORG?????0CH?
	????????????????JMP?????TIMER1?
	
	????????????????ORG?????20H?
	START:?
	???????????????? MOV ?????A,01111111B?
	???????????????? MOV ?????PAC,A?
	????????????????CALL????LCD_RESET?
	???????????????? MOV ?????A,OFFSET?LCD_MESSAGE_1?
	???????????????? MOV ?????TBLP,A?
	????????????????CALL????LCD_DISPLAY?
	???????????????? MOV ?????A,09H?
	???????????????? MOV ?????INTC,A?
	???????????????? MOV ?????A,80H?
	???????????????? MOV ?????TMR1C,A?
	FIRST_TIME:?
	???????????????? MOV ?????A,PA?
	????????????????AND?????A,00010000B?
	????????????????SUB?????A,00010000B?
	????????????????SZ??????ACC?
	????????????????JMP?????FIRST_TIME?
	PRESS_ANY_KEY:?
	???????????????? MOV ?????A,OFFSET?LCD_MESSAGE_2?
	???????????????? MOV ?????TBLP,A?
	????????????????CALL????LCD_DISPLAY?
	ANY_KEY:?
	???????????????? MOV ?????A,PA?
	????????????????AND?????A,00010000B?
	????????????????SUB?????A,00010000B?
	????????????????SZ??????ACC?
	????????????????JMP?????ANY_KEY?
	???????????????? MOV ?????A,PA?
	????????????????AND?????A,00001111B?
	???????????????? MOV ?????DATA,A?
	????????????????SUB?????A,09H?
	????????????????SZ??????ACC?
	????????????????JMP?????NEXT_CHECK?
	????????????????JMP?????START?
	NEXT_CHECK:?
	???????????????? MOV ?????A,DATA?
	????????????????SUB?????A,08H?
	????????????????SZ??????ACC?
	????????????????JMP?????PLAY_MONOTONY?
	????????????????JMP?????PLAY_A_SONG?
	PLAY_MONOTONY:?
	????????????????CALL????MONOTONY?
	????????????????JMP?????ANY_KEY?
	PLAY_A_SONG:?
	???????????????? MOV ?????A,OFFSET?LCD_MESSAGE_3?
	???????????????? MOV ?????TBLP,A?
	????????????????CALL????LCD_DISPLAY?
	????????????????CLR?????COUNTER?
	PLAY_LOOP:?
	???????????????? MOV ?????A,OFFSET?SONG_DATA?
	????????????????ADD?????A,COUNTER?
	???????????????? MOV ?????TBLP,A?
	????????????????TABRDL??DATA?
	????????????????DEC?????DATA?
	????????????????CALL????MONOTONY?
	????????????????INC?????COUNTER?
	???????????????? MOV ?????A,COUNTER?
	????????????????SUB?????A,4BH?
	????????????????SZ??????ACC?
	????????????????JMP?????PLAY_LOOP?
	????????????????JMP?????PRESS_ANY_KEY?
	????????????????RET?
	;------------------------------------------------------------?
	TIMER1:?
	????????????????CPL?????PA?
	????????????????RETI?
	;------------------------------------------------------------?
	MONOTONY????????PROC?
	???????????????? MOV ?????A,OFFSET?MUSIC_DATA?
	????????????????ADD?????A,DATA?
	???????????????? MOV ?????TBLP,A?
	????????????????TABRDL??DATA?
	???????????????? MOV ?????A,DATA?
	???????????????? MOV ?????TMR1L,A?
	???????????????? MOV ?????A,TBLP?
	????????????????ADD?????A,08H?
	???????????????? MOV ?????TBLP,A?
	????????????????TABRDL??DATA?
	???????????????? MOV ?????A,DATA?
	???????????????? MOV ?????TMR1H,A?
	????????????????SET?????TMR1C.4?
	????????????????CALL????DELAY_LONG?
	????????????????CLR?????TMR1C.4?
	????????????????RET?
	MONOTONY????????ENDP?
	;------------------------------------------------------------?
	LCD_RESET???????PROC?
	????????????????CLR?????LCD_DATA_CTRL?
	????????????????CLR?????LCD_CTRL_CTRL?
	????????????????CLR?????LCD_DATA?
	????????????????CLR?????LCD_CTRL?
	???????????????? MOV ?????A,00110011B?????;STEP?0?
	???????????????? MOV ?????DATA,A??????????;LCD?RESET?
	????????????????CALL????TRANSFER????????;?
	???????????????? MOV ?????A,00110010B?????;SETP?1?
	???????????????? MOV ?????DATA,A??????????;FUNCTION?SET?
	????????????????CALL????TRANSFER????????;?
	???????????????? MOV ?????A,00001100B?????;STEP?2?
	???????????????? MOV ?????DATA,A??????????;DISPLAY?TURN?ON?
	????????????????CALL????TRANSFER????????;?
	???????????????? MOV ?????A,00000001B?????;STEP?3?
	???????????????? MOV ?????DATA,A??????????;DISPLAY?CLEAN?
	????????????????CALL????TRANSFER????????;?
	????????????????CALL????DELAY???????????;DELAY?SOME?TIME?
	???????????????? MOV ?????A,00000110B?????;STEP?4?
	???????????????? MOV ?????DATA,A??????????;ENTRY?MODE?SET?
	????????????????CALL????TRANSFER????????;?
	????????????????RET?
	LCD_RESET???????ENDP?
	;------------------------------------------------------------?
	LCD_DISPLAY?????PROC?
	???????????????? MOV ?????A,10000000B?????;STEP?1?
	???????????????? MOV ?????DATA,A??????????;DD?RAM?ADDRESS?SET?
	????????????????CALL????TRANSFER????????;FIRST?LINE?
	???????????????? MOV ?????A,10H???????????;STEP?2-1?
	???????????????? MOV ?????COUNTER,A???????;WRITE?DATA?TO?DD?RAM?
	FIRST_LINE:?
	????????????????CLR?????LCD_CTRL.RS?
	???????????????? MOV ?????A,00011100B?????;STEP?2-2?
	???????????????? MOV ?????DATA,A??????????;DISPLAY/CURSOR?
	????????????????CALL????TRANSFER????????;SHIFT?
	????????????????SET?????LCD_CTRL.RS?
	????????????????TABRDL??DATA?
	????????????????CALL????TRANSFER?
	????????????????CALL????DELAY?
	????????????????INC?????TBLP?
	????????????????SDZ?????COUNTER?
	????????????????JMP?????FIRST_LINE?
	????????????????CLR?????LCD_CTRL.RS?
	
	???????????????? MOV ?????A,11000000B?????;STEP?3?
	???????????????? MOV ?????DATA,A??????????;DD?RAM?ADDRESS?SET?
	????????????????CALL????TRANSFER????????;SECOND?LINE?
	???????????????? MOV ?????A,10H???????????;STEP?4-1?
	???????????????? MOV ?????COUNTER,A???????;WRITE?DATA?TO?DD?RAM?
	SECOND_LINE:?
	????????????????CLR?????LCD_CTRL.RS?
	???????????????? MOV ?????A,00011000B?????;STEP?4-2?
	???????????????? MOV ?????DATA,A??????????;DISPLAY/CURSOR?
	????????????????CALL????TRANSFER????????;SHIFT?
	????????????????SET?????LCD_CTRL.RS?
	????????????????TABRDL??DATA?
	????????????????CALL????TRANSFER?
	????????????????CALL????DELAY?
	????????????????INC?????TBLP?
	????????????????SDZ?????COUNTER?
	????????????????JMP?????SECOND_LINE?
	????????????????CLR?????LCD_CTRL.RS?
	????????????????RET?
	LCD_DISPLAY?????ENDP?
	;------------------------------------------------------------?
	TRANSFER????????PROC?
	????????????????SWAP????DATA?
	???????????????? MOV ?????A,DATA?
	???????????????? MOV ?????PC,A?
	????????????????CALL????WRITE?
	????????????????SWAP????DATA?
	???????????????? MOV ?????A,DATA?
	???????????????? MOV ?????PC,A?
	????????????????CALL????WRITE?
	????????????????RET?
	TRANSFER????????ENDP?
	;------------------------------------------------------------?
	WRITE???????????PROC?
	????????????????SET?????LCD_CTRL.E?
	????????????????CLR?????LCD_CTRL.E?
	???????????????? MOV ?????A,0FFH?
	???????????????? MOV ?????DELAY_COUNTER_1,A?
	WRITE_WAIT:?
	????????????????SDZ?????DELAY_COUNTER_1?
	????????????????JMP?????WRITE_WAIT?
	????????????????RET?
	WRITE???????????ENDP?
	;------------------------------------------------------------?
	DELAY???????????PROC?
	???????????????? MOV ?????A,0A0H?
	???????????????? MOV ?????DELAY_COUNTER_1,A?
	???????????????? MOV ?????DELAY_COUNTER_2,A?
	DELAY_WAIT:?
	????????????????SDZ?????DELAY_COUNTER_2?
	????????????????JMP?????DELAY_WAIT?
	????????????????SDZ?????DELAY_COUNTER_1?
	????????????????JMP?????DELAY_WAIT?
	????????????????RET?
	DELAY???????????ENDP?
	;------------------------------------------------------------?
	DELAY_LONG??????PROC?
	???????????????? MOV ?????A,003H?
	???????????????? MOV ?????DELAY_COUNTER_1,A?
	???????????????? MOV ?????DELAY_COUNTER_2,A?
	???????????????? MOV ?????DELAY_COUNTER_3,A?
	DELAY_LONG_WAIT:?
	????????????????SDZ?????DELAY_COUNTER_3?
	????????????????JMP?????DELAY_LONG_WAIT?
	????????????????SDZ?????DELAY_COUNTER_2?
	????????????????JMP?????DELAY_LONG_WAIT?
	????????????????SDZ?????DELAY_COUNTER_1?
	????????????????JMP?????DELAY_LONG_WAIT?
	????????????????RET?
	DELAY_LONG??????ENDP?
	;------------------------------------------------------------?
	????????????????ORG?????0F00H?
	LCD_MESSAGE_1:??????????;[LCD?4?BITS?DATA?]?
	????????????????????????;[TRANSFER?TEST?OK]?
	????????????????DC??????4CH,43H,44H,20H,34H,20H,42H,49H?
	????????????????DC??????54H,53H,20H,44H,41H,54H,41H,20H?
	????????????????DC??????54H,52H,41H,4EH,53H,46H,45H,52H?
	????????????????DC??????20H,54H,45H,53H,54H,20H,4FH,4BH?
	LCD_MESSAGE_2:??????????;[???MINI?PIANO???]?
	????????????????????????;[?PRESS?ANY?KEY!?]?
	????????????????DC??????20H,20H,20H,4DH,49H,4EH,49H,20H?
	????????????????DC??????50H,49H,41H,4EH,4FH,20H,20H,20H?
	????????????????DC??????20H,50H,52H,45H,53H,53H,20H,41H?
	????????????????DC??????4EH,59H,20H,4BH,45H,59H,21H,20H?
	LCD_MESSAGE_3:??????????;[???PLAY?MUSIC???]?
	????????????????????????;[?JUST?A?MOMENT!?]?
	????????????????DC??????20H,20H,20H,50H,4CH,41H,59H,20H?
	????????????????DC??????4DH,55H,53H,49H,43H,20H,20H,20H?
	????????????????DC??????20H,4AH,55H,53H,54H,20H,41H,20H?
	????????????????DC??????4DH,4FH,4DH,45H,4EH,54H,21H,20H?
	MUSIC_DATA:?
	????????????????DC??????043H,0B1H,009H,033H?
	????????????????DC??????083H,0C7H,005H,023H?
	????????????????DC??????0FCH,0FCH,0FDH,0FDH?
	????????????????DC??????0FDH,0FDH,0FEH,0FEH?
	SONG_DATA:?
	????????????????DC??????06H,06H,05H,06H,05H,03H?
	????????????????DC??????05H,03H,03H,02H,03H,03H?
	????????????????DC??????02H,02H,01H,02H,02H,05H?
	????????????????DC??????05H,03H,03H,02H,03H,03H?
	????????????????DC??????06H,06H,05H,06H,05H,03H?
	????????????????DC??????04H,04H,04H,03H,02H,03H,03H?
	????????????????DC??????05H,05H,05H,05H,05H,07H?
	????????????????DC??????06H,06H,06H,06H,05H,06H,06H?
	????????????????DC??????08H,08H,08H,07H,05H?
	????????????????DC??????06H,06H,06H,06H,05H,06H,05H,03H?
	????????????????DC??????05H,05H,05H,05H,05H,07H?
	????????????????DC??????06H,06H,06H,06H,05H,06H?
	;------------------------------------------------------------?
	????????????????END?
 電子發(fā)燒友App
                        電子發(fā)燒友App
                     
                 
                 
           
        
 
        











 
            
             
             
                 
             工商網(wǎng)監(jiān)
工商網(wǎng)監(jiān)
        
評論