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

📄 lcd4bit.lis

📁 C语言开发使LCD显示汉字程序,采用自带汉字库的LCD模块.
💻 LIS
📖 第 1 页 / 共 4 页
字号:
                         .module LCD4BIT.C
                         .area text(rom, con, rel)
 0000                   .dbfile D:\我的文档\mingkang\LCDCN\LCD4BIT.C
 0000                   .dbfunc s waste_lcd _waste_lcd fI
                         .even
 0000                 _waste_lcd::
 0000                   .dbline -1
 0000                   .dbline 55
                       ; /*
                       ; **  File:       LCD4BITS.C
                       ; **
                       ; **  Purpose:    LCD Routines for 4 bit I/O (D4->D7+E+RS)
                       ; **              D4-D7 is connected on PORTB4-7
                       ; **              E is connected on PORTB3
                       ; **              RS is connected on PORTB2
                       ; **
                       ; **  Chip:       ATMega48
                       ; **
                       ; **  Version:    1.0.0, 23:rd of May 2003
                       ; **
                       ; **  Author:     Lars Wictorsson
                       ; **              LAWICEL / SWEDEN
                       ; **              http://www.lawicel.com   lars@lawicel.com
                       ; **
                       ; **  Copyright:  The copyright to the computer program(s) herein is the
                       ; **              property of LAWICEL HB, Sweden. The program(s) may be used
                       ; **              and/or copied only with the written permission of LAWICEL HB
                       ; **              in accordance with the terms and conditions stipulated in
                       ; **              the agreement/contract under which the program(s) have been
                       ; **              supplied.
                       ; **
                       ; **  Remarks:    This program is tested with ICCAVR version 6.27A.
                       ; **
                       ; **  History:    2003-05-23  1.0.0   Created (LWI)
                       ; */
                       ; void LCD4_Init(void);
                       ; void LCD4_Clear(void);
                       ; void LCD4_Home(void);
                       ; void LCD4_Home2(void);
                       ; void LCD4_PutC(unsigned char);
                       ; void LCD4_PutC_Const(const unsigned char);
                       ; void LCD4_PutS(unsigned char *);
                       ; 
                       ; #include <iom48v.h>
                       ; #include <macros.h>
                       ; 
                       ; //void waitMS(unsigned long);
                       ; 
                       ; #define WASTE               waste_lcd()
                       ; 
                       ; #define LCD_E_SET           PORTB |= 0x40          //PORTB.3-LCD ENABLE
                       ; #define LCD_E_CLR           PORTB &= ~0x40         //PORTB.3-LCD DISABLE
                       ; #define LCD_RS_SET          PORTB |= 0x80          //PORTB.2-DISPLAY DATA
                       ; #define LCD_RS_CLR          PORTB &= ~0x80         //PORTB.2-INSTRCTION
                       ; //**              E is connected on PORTB3
                       ; //**              RS is connected on PORTB2
                       ; #define xtal 8
                       ; #define DELAY               for (del = 0; del < 16; del++)
                       ; 
                       ; long del;
                       ; 
                       ; void waste_lcd(void)
                       ; {
 0000                   .dbline -2
 0000                   .dbline 56
                       ; }
 0000                 L1:
 0000                   .dbline 0 ; func end
 0000 0895              ret
 0002                   .dbfunc s delay_1ms _delay_1ms fI
                       ;              i -> R16,R17
                         .even
 0002                 _delay_1ms::
 0002                   .dbline -1
 0002                   .dbline 59
                       ;    
                       ; void delay_1ms(void)
                       ; {
 0002                   .dbline 61
 0002 01E0              ldi R16,1
 0004 10E0              ldi R17,0
 0006 02C0              xjmp L6
 0008                 L3:
 0008                   .dbline 61
 0008                 L4:
 0008                   .dbline 61
 0008 0F5F              subi R16,255  ; offset = 1
 000A 1F4F              sbci R17,255
 000C                 L6:
 000C                   .dbline 61
                       ;  unsigned int i;
                       ;  for(i=1;i<(unsigned int)(xtal*143-2);i++);
 000C 0637              cpi R16,118
 000E E4E0              ldi R30,4
 0010 1E07              cpc R17,R30
 0012 D0F3              brlo L3
 0014                   .dbline -2
 0014                   .dbline 62
                       ; }
 0014                 L2:
 0014                   .dbline 0 ; func end
 0014 0895              ret
 0016                   .dbsym r i 16 i
 0016                   .dbfunc s waitms _waitms fI
                       ;              i -> R10,R11
                       ;              n -> R12,R13
                         .even
 0016                 _waitms::
 0016 0E940000          xcall push_gset4x
 001A 6801              movw R12,R16
 001C                   .dbline -1
 001C                   .dbline 65
                       ; 
                       ; void waitms(unsigned int n)
                       ; {
 001C                   .dbline 66
                       ;  unsigned int i=0;
 001C AA24              clr R10
 001E BB24              clr R11
 0020 04C0              xjmp L9
 0022                 L8:
 0022                   .dbline 68
 0022                   .dbline 69
 0022 EFDF              xcall _delay_1ms
 0024                   .dbline 70
 0024 C501              movw R24,R10
 0026 0196              adiw R24,1
 0028 5C01              movw R10,R24
 002A                   .dbline 71
 002A                 L9:
 002A                   .dbline 67
                       ;  while(i<n)
 002A AC14              cp R10,R12
 002C BD04              cpc R11,R13
 002E C8F3              brlo L8
 0030                   .dbline -2
 0030                   .dbline 72
                       ;   {
                       ;    delay_1ms();
                       ;    i++;
                       ;   }
                       ; }
 0030                 L7:
 0030 0E940000          xcall pop_gset4x
 0034                   .dbline 0 ; func end
 0034 0895              ret
 0036                   .dbsym r i 10 i
 0036                   .dbsym r n 12 i
 0036                   .dbfunc s LCD4_WR4bits _LCD4_WR4bits fI
                       ;              c -> R10
                         .even
 0036                 _LCD4_WR4bits::
 0036 0E940000          xcall push_gset3x
 003A A02E              mov R10,R16
 003C                   .dbline -1
 003C                   .dbline 75
                       ; 
                       ; void LCD4_WR4bits(unsigned char c)
                       ; {
 003C                   .dbline 76
                       ;     c &= 0x0F;//屏蔽高四位
 003C 8A2D              mov R24,R10
 003E 8F70              andi R24,15
 0040 A82E              mov R10,R24
 0042                   .dbline 77
                       ;     c = c << 4;//移入高四位
 0042 8F70              andi R24,#0x0F
 0044 8295              swap R24
 0046 A82E              mov R10,R24
 0048                   .dbline 78
                       ;     LCD_E_SET;
 0048 2E9A              sbi 0x5,6
 004A                   .dbline 79
                       ;     WASTE;
 004A DADF              xcall _waste_lcd
 004C                   .dbline 80
                       ;     PORTB &= 0x0F;
 004C 85B1              in R24,0x5
 004E 8F70              andi R24,15
 0050 85B9              out 0x5,R24
 0052                   .dbline 81
                       ;     PORTB |= c;
 0052 25B0              in R2,0x5
 0054 2A28              or R2,R10
 0056 25B8              out 0x5,R2
 0058                   .dbline 82
                       ;     WASTE;
 0058 D3DF              xcall _waste_lcd
 005A                   .dbline 83
                       ;     LCD_E_CLR;
 005A 2E98              cbi 0x5,6
 005C                   .dbline 84
                       ;     WASTE;
 005C D1DF              xcall _waste_lcd
 005E                   .dbline -2
 005E                   .dbline 85
                       ; }
 005E                 L11:
 005E 0E940000          xcall pop_gset3x
 0062                   .dbline 0 ; func end
 0062 0895              ret
 0064                   .dbsym r c 10 c
 0064                   .dbfunc s LCD4_Init _LCD4_Init fI
                         .even
 0064                 _LCD4_Init::
 0064                   .dbline -1
 0064                   .dbline 88
                       ; 
                       ; void LCD4_Init(void)
                       ; {
 0064                   .dbline 89
                       ;     waitms(15);                     // Wait on power up 15mS
 0064 0FE0              ldi R16,15
 0066 10E0              ldi R17,0
 0068 D6DF              xcall _waitms
 006A                   .dbline 90
                       ;     LCD_RS_CLR;
 006A 2F98              cbi 0x5,7
 006C                   .dbline 91
 006C 00E0              ldi R16,<L17
 006E 10E0              ldi R17,>L17
 0070 0E940000          xcall lpm32
 0074 10930100          sts _del+1,R17
 0078 00930000          sts _del,R16
 007C 30930300          sts _del+2+1,R19
 0080 20930200          sts _del+2,R18
 0084                 L13:
 0084                   .dbline 91
 0084                 L14:
 0084                   .dbline 91
                       ;     DELAY;
 0084 00E0              ldi R16,<L18
 0086 10E0              ldi R17,>L18
 0088 0E940000          xcall lpm32
 008C 50900300          lds R5,_del+2+1
 0090 40900200          lds R4,_del+2
 0094 30900100          lds R3,_del+1
 0098 20900000          lds R2,_del
 009C 200E              add R2,R16
 009E 311E              adc R3,R17
 00A0 421E              adc R4,R18
 00A2 531E              adc R5,R19
 00A4 30920100          sts _del+1,R3
 00A8 20920000          sts _del,R2
 00AC 50920300          sts _del+2+1,R5
 00B0 40920200          sts _del+2,R4
 00B4                   .dbline 91
 00B4 00E0              ldi R16,<L19
 00B6 10E0              ldi R17,>L19
 00B8 0E940000          xcall lpm32
 00BC 50900300          lds R5,_del+2+1
 00C0 40900200          lds R4,_del+2
 00C4 30900100          lds R3,_del+1
 00C8 20900000          lds R2,_del
 00CC 2016              cp R2,R16
 00CE 3106              cpc R3,R17
 00D0 4206              cpc R4,R18
 00D2 5306              cpc R5,R19
 00D4 BCF2              brlt L13
 00D6                   .dbline 93
                       ;     
                       ;     LCD4_WR4bits( 0x03);            // Function Set 8bit
 00D6 03E0              ldi R16,3
 00D8 AEDF              xcall _LCD4_WR4bits
 00DA                   .dbline 94
                       ;     waitms(5);
 00DA 05E0              ldi R16,5
 00DC 10E0              ldi R17,0
 00DE 9BDF              xcall _waitms
 00E0                   .dbline 96
                       ; 
                       ;     LCD4_WR4bits( 0x03);            // Function Set 8bit
 00E0 03E0              ldi R16,3
 00E2 A9DF              xcall _LCD4_WR4bits
 00E4                   .dbline 97
                       ;     waitms(5);
 00E4 05E0              ldi R16,5
 00E6 10E0              ldi R17,0
 00E8 96DF              xcall _waitms
 00EA                   .dbline 99
                       ; 
                       ;     LCD4_WR4bits( 0x03);            // Function Set 8bit
 00EA 03E0              ldi R16,3
 00EC A4DF              xcall _LCD4_WR4bits
 00EE                   .dbline 100
                       ;     waitms(5);
 00EE 05E0              ldi R16,5
 00F0 10E0              ldi R17,0
 00F2 91DF              xcall _waitms
 00F4                   .dbline 102
                       ; 
                       ;     LCD4_WR4bits( 0x02);            // Function Set 4bit
 00F4 02E0              ldi R16,2
 00F6 9FDF              xcall _LCD4_WR4bits
 00F8                   .dbline 103
                       ;     waitms(5);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -