⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dac.lst

📁 PIC16F877A RTC1307 LCD 16x2 keypad 4x4 and a windows application connect with PIC on RS232
💻 LST
📖 第 1 页 / 共 5 页
字号:
.................... //#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 + -