📄 dac.lst
字号:
.................... //#endif
....................
....................
.................... #define lcd_type 2 // 0=5x7 dots format, 1=5x10 dots format, 2=2 lines
.................... #define lcd_line_two 0x40 // LCD RAM address for the second line
....................
....................
.................... BYTE const LCD_INIT_STRING[4] = {0x20 | (lcd_type << 2), 0xc, 1, 6};
.................... // These bytes need to be sent to the LCD
.................... // to start it up.
....................
....................
.................... // The following are used for setting
.................... // the I/O port direction register.
....................
.................... struct lcd_pin_map const LCD_WRITE = {0,0,0,0,0}; // For write mode all pins are out
.................... struct lcd_pin_map const LCD_READ = {0,0,0,0,15}; // For read mode data pins are in
....................
....................
.................... #separate
.................... BYTE lcd_read_byte() {
.................... BYTE low,high;
.................... // set_tris_lcd(LCD_READ);
.................... set_tris_d(LCD_READ);
*
0396: MOVLW F0
0397: BSF 03.5
0398: MOVWF 08
.................... lcd.rw = 1;
0399: BCF 03.5
039A: BSF 08.2
.................... delay_cycles(1);
039B: NOP
.................... lcd.enable = 1;
039C: BSF 08.0
.................... delay_cycles(1);
039D: NOP
.................... high = lcd.data;
039E: MOVF 08,W
039F: SWAPF 08,W
03A0: ANDLW 0F
03A1: BSF 03.6
03A2: MOVWF 38
.................... lcd.enable = 0;
03A3: BCF 03.6
03A4: BCF 08.0
.................... delay_cycles(1);
03A5: NOP
.................... lcd.enable = 1;
03A6: BSF 08.0
.................... delay_us(1);
03A7: NOP
.................... low = lcd.data;
03A8: MOVF 08,W
03A9: SWAPF 08,W
03AA: ANDLW 0F
03AB: BSF 03.6
03AC: MOVWF 37
.................... lcd.enable = 0;
03AD: BCF 03.6
03AE: BCF 08.0
.................... // set_tris_lcd(LCD_WRITE);
.................... set_tris_d(LCD_WRITE);
03AF: MOVLW 00
03B0: BSF 03.5
03B1: MOVWF 08
.................... return( (high<<4) | low);
03B2: BCF 03.5
03B3: BSF 03.6
03B4: SWAPF 38,W
03B5: MOVWF 77
03B6: MOVLW F0
03B7: ANDWF 77,F
03B8: MOVF 77,W
03B9: IORWF 37,W
03BA: MOVWF 78
.................... }
03BB: BCF 03.6
03BC: RETLW 00
....................
.................... #separate
.................... void lcd_send_nibble( BYTE n ) {
.................... lcd.data = n;
03BD: BSF 03.6
03BE: SWAPF 38,W
03BF: ANDLW F0
03C0: MOVWF 77
03C1: MOVLW 0F
03C2: BCF 03.6
03C3: ANDWF 08,W
03C4: IORWF 77,W
03C5: MOVWF 08
.................... delay_cycles(1);
03C6: NOP
.................... lcd.enable = 1;
03C7: BSF 08.0
.................... delay_us(2);
03C8: GOTO 3C9
.................... lcd.enable = 0;
03C9: BCF 08.0
.................... }
03CA: RETLW 00
....................
.................... #separate
.................... void lcd_send_byte( BYTE address, BYTE n ) {
....................
.................... lcd.rs = 0;
03CB: BCF 08.1
.................... while ( bit_test(lcd_read_byte(),7) ) ;
03CC: CALL 396
03CD: MOVF 78,W
03CE: BSF 03.6
03CF: MOVWF 37
03D0: BTFSS 37.7
03D1: GOTO 3D4
03D2: BCF 03.6
03D3: GOTO 3CC
.................... lcd.rs = address;
03D4: BTFSC 35.0
03D5: GOTO 3D9
03D6: BCF 03.6
03D7: BCF 08.1
03D8: BSF 03.6
03D9: BTFSS 35.0
03DA: GOTO 3DE
03DB: BCF 03.6
03DC: BSF 08.1
03DD: BSF 03.6
.................... delay_cycles(1);
03DE: NOP
.................... lcd.rw = 0;
03DF: BCF 03.6
03E0: BCF 08.2
.................... delay_cycles(1);
03E1: NOP
.................... lcd.enable = 0;
03E2: BCF 08.0
.................... lcd_send_nibble(n >> 4);
03E3: BSF 03.6
03E4: SWAPF 36,W
03E5: MOVWF 37
03E6: MOVLW 0F
03E7: ANDWF 37,F
03E8: MOVF 37,W
03E9: MOVWF 38
03EA: BCF 03.6
03EB: CALL 3BD
.................... lcd_send_nibble(n & 0xf);
03EC: BSF 03.6
03ED: MOVF 36,W
03EE: ANDLW 0F
03EF: MOVWF 37
03F0: MOVWF 38
03F1: BCF 03.6
03F2: CALL 3BD
.................... }
03F3: RETLW 00
....................
.................... #separate
.................... void lcd_init() {
.................... BYTE i;
.................... // set_tris_lcd(LCD_WRITE);
.................... set_tris_d(LCD_WRITE);
*
0439: MOVLW 00
043A: BSF 03.5
043B: MOVWF 08
.................... lcd.rs = 0;
043C: BCF 03.5
043D: BCF 08.1
.................... lcd.rw = 0;
043E: BCF 08.2
.................... lcd.enable = 0;
043F: BCF 08.0
0440: CLRF 28
0441: BTFSC 0B.7
0442: BSF 28.7
0443: BCF 0B.7
.................... delay_ms(15);
0444: MOVLW 0F
0445: BSF 03.6
0446: MOVWF 31
0447: BCF 03.6
0448: CALL 381
0449: BTFSC 28.7
044A: BSF 0B.7
.................... for(i=1;i<=3;++i) {
044B: MOVLW 01
044C: MOVWF 47
044D: MOVF 47,W
044E: SUBLW 03
044F: BTFSS 03.0
0450: GOTO 469
0451: CLRF 28
0452: BTFSC 0B.7
0453: BSF 28.7
0454: BCF 0B.7
.................... lcd_send_nibble(3);
0455: MOVLW 03
0456: BSF 03.6
0457: MOVWF 38
0458: BCF 03.6
0459: CALL 3BD
045A: BTFSC 28.7
045B: BSF 0B.7
045C: CLRF 28
045D: BTFSC 0B.7
045E: BSF 28.7
045F: BCF 0B.7
.................... delay_ms(5);
0460: MOVLW 05
0461: BSF 03.6
0462: MOVWF 31
0463: BCF 03.6
0464: CALL 381
0465: BTFSC 28.7
0466: BSF 0B.7
.................... }
0467: INCF 47,F
0468: GOTO 44D
0469: CLRF 28
046A: BTFSC 0B.7
046B: BSF 28.7
046C: BCF 0B.7
.................... lcd_send_nibble(2);
046D: MOVLW 02
046E: BSF 03.6
046F: MOVWF 38
0470: BCF 03.6
0471: CALL 3BD
0472: BTFSC 28.7
0473: BSF 0B.7
.................... for(i=0;i<=3;++i)
0474: CLRF 47
0475: MOVF 47,W
0476: SUBLW 03
0477: BTFSS 03.0
0478: GOTO 48C
.................... lcd_send_byte(0,LCD_INIT_STRING[i]);
0479: MOVF 47,W
047A: CALL 03C
047B: MOVWF 48
047C: CLRF 28
047D: BTFSC 0B.7
047E: BSF 28.7
047F: BCF 0B.7
0480: BSF 03.6
0481: CLRF 35
0482: BCF 03.6
0483: MOVF 48,W
0484: BSF 03.6
0485: MOVWF 36
0486: BCF 03.6
0487: CALL 3CB
0488: BTFSC 28.7
0489: BSF 0B.7
048A: INCF 47,F
048B: GOTO 475
.................... }
048C: BCF 0A.3
048D: BCF 0A.4
048E: GOTO 60C (RETURN)
.................... #separate
.................... void lcd_gotoxy( BYTE x, BYTE y) {
.................... BYTE address;
....................
.................... if(y!=1)
*
03F4: BSF 03.6
03F5: DECFSZ 32,W
03F6: GOTO 3F8
03F7: GOTO 3FB
.................... address=lcd_line_two;
03F8: MOVLW 40
03F9: MOVWF 33
.................... else
03FA: GOTO 3FC
.................... address=0;
03FB: CLRF 33
.................... address+=x-1;
03FC: MOVLW 01
03FD: SUBWF 31,W
03FE: ADDWF 33,F
.................... lcd_send_byte(0,0x80|address);
03FF: MOVF 33,W
0400: IORLW 80
0401: MOVWF 34
0402: CLRF 35
0403: MOVF 34,W
0404: MOVWF 36
0405: BCF 03.6
0406: CALL 3CB
.................... }
0407: RETLW 00
.................... #separate
.................... void lcd_putc( char c) {
.................... switch (c) {
0408: BSF 03.6
0409: MOVF 30,W
040A: XORLW 0C
040B: BCF 03.6
040C: BTFSC 03.2
040D: GOTO 415
040E: XORLW 06
040F: BTFSC 03.2
0410: GOTO 421
0411: XORLW 02
0412: BTFSC 03.2
0413: GOTO 429
0414: GOTO 430
.................... case '\f' : lcd_send_byte(0,1);
0415: BSF 03.6
0416: CLRF 35
0417: MOVLW 01
0418: MOVWF 36
0419: BCF 03.6
041A: CALL 3CB
.................... delay_ms(2);
041B: MOVLW 02
041C: BSF 03.6
041D: MOVWF 31
041E: BCF 03.6
041F: CALL 381
.................... break;
0420: GOTO 438
.................... case '\n' : lcd_gotoxy(1,2); break;
0421: MOVLW 01
0422: BSF 03.6
0423: MOVWF 31
0424: MOVLW 02
0425: MOVWF 32
0426: BCF 03.6
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -