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

📄 lcd1602显示.lis

📁 ICC mega8例子
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module LCD1602显示.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\xiaozhiyong2009\设计资料\项目设计\ICCAVR_mega8_C\ICCAVR_mega8_LCD1602显示\LCD1602显示.c
 0000                   .dbfunc e port_init _port_init fV
                        .even
 0000           _port_init::
 0000                   .dbline -1
 0000                   .dbline 9
 0000           ; //ICC-AVR application builder : 2009-3-12 16:02:34
 0000           ; // Target : M8
 0000           ; // Crystal: 8.0000Mhz
 0000           ; 
 0000           ; #include <iom8v.h>
 0000           ; #include <macros.h>
 0000           ; 
 0000           ; void port_init(void)
 0000           ; {
 0000                   .dbline 10
 0000           ;  PORTB = 0x00;
 0000 2224              clr R2
 0002 28BA              out 0x18,R2
 0004                   .dbline 11
 0004           ;  DDRB  = 0x00;
 0004 27BA              out 0x17,R2
 0006                   .dbline 12
 0006           ;  PORTC = 0x00; //m103 output only
 0006 25BA              out 0x15,R2
 0008                   .dbline 13
 0008           ;  DDRC  = 0x00;
 0008 24BA              out 0x14,R2
 000A                   .dbline 14
 000A           ;  PORTD = 0x00;
 000A 22BA              out 0x12,R2
 000C                   .dbline 15
 000C           ;  DDRD  = 0x00;
 000C 21BA              out 0x11,R2
 000E                   .dbline -2
 000E           L1:
 000E                   .dbline 0 ; func end
 000E 0895              ret
 0010                   .dbend
 0010                   .dbfunc e init_devices _init_devices fV
                        .even
 0010           _init_devices::
 0010                   .dbline -1
 0010                   .dbline 20
 0010           ; }
 0010           ; 
 0010           ; //call this routine to initialize all peripherals
 0010           ; void init_devices(void)
 0010           ; {
 0010                   .dbline 22
 0010           ;  //stop errant interrupts until set up
 0010           ;  CLI(); //disable all interrupts
 0010 F894              cli
 0012                   .dbline 23
 0012           ;  port_init();
 0012 F6DF              rcall _port_init
 0014                   .dbline 25
 0014           ; 
 0014           ;  MCUCR = 0x00;
 0014 2224              clr R2
 0016 25BE              out 0x35,R2
 0018                   .dbline 26
 0018           ;  GICR  = 0x00;
 0018 2BBE              out 0x3b,R2
 001A                   .dbline 27
 001A           ;  TIMSK = 0x00; //timer interrupt sources
 001A 29BE              out 0x39,R2
 001C                   .dbline 28
 001C           ;  SEI(); //re-enable interrupts
 001C 7894              sei
 001E                   .dbline -2
 001E           L2:
 001E                   .dbline 0 ; func end
 001E 0895              ret
 0020                   .dbend
 0020                   .dbfunc e delay _delay fV
 0020           ;              i -> R20,R21
 0020           ;              j -> R22,R23
 0020           ;             ms -> R16,R17
                        .even
 0020           _delay::
 0020 00D0              rcall push_xgsetF000
 0022                   .dbline -1
 0022                   .dbline 48
 0022           ;  //all peripherals are now initialized
 0022           ; }
 0022           ; 
 0022           ; /*************************************************************************
 0022           ; 用    途:LCD1602显示
 0022           ; Taget   :mega8
 0022           ; crystal :8M
 0022           ; 介    绍:用PB做端口,
 0022           ;          PB0-D0
 0022           ;                PB7-D7
 0022           ;                ------
 0022           ;                PC0-6
 0022           ;                PC1-5
 0022           ;                PC2-4----456为控制引脚
 0022           ; 入口参数:
 0022           ; 出口参数:
 0022           ; *************************************/
 0022           ; //延时程序
 0022           ; void delay(unsigned int ms)
 0022           ; {
 0022                   .dbline 50
 0022           ;        unsigned int i,j;
 0022           ;        for(i=0;i<ms;i++)
 0022 4427              clr R20
 0024 5527              clr R21
 0026 0BC0              rjmp L7
 0028           L4:
 0028                   .dbline 51
 0028           ;               {for(j=0;j<200;j++);}
 0028                   .dbline 51
 0028 6627              clr R22
 002A 7727              clr R23
 002C 02C0              rjmp L11
 002E           L8:
 002E                   .dbline 51
 002E           L9:
 002E                   .dbline 51
 002E 6F5F              subi R22,255  ; offset = 1
 0030 7F4F              sbci R23,255
 0032           L11:
 0032                   .dbline 51
 0032 683C              cpi R22,200
 0034 E0E0              ldi R30,0
 0036 7E07              cpc R23,R30
 0038 D0F3              brlo L8
 003A           X0:
 003A                   .dbline 51
 003A           L5:
 003A                   .dbline 50
 003A 4F5F              subi R20,255  ; offset = 1
 003C 5F4F              sbci R21,255
 003E           L7:
 003E                   .dbline 50
 003E 4017              cp R20,R16
 0040 5107              cpc R21,R17
 0042 90F3              brlo L4
 0044           X1:
 0044                   .dbline -2
 0044           L3:
 0044                   .dbline 0 ; func end
 0044 00C0              rjmp pop_xgsetF000
 0046                   .dbsym r i 20 i
 0046                   .dbsym r j 22 i
 0046                   .dbsym r ms 16 i
 0046                   .dbend
 0046                   .dbfunc e com_lcd _com_lcd fV
 0046           ;            com -> R10
                        .even
 0046           _com_lcd::
 0046 AA92              st -y,R10
 0048 A02E              mov R10,R16
 004A                   .dbline -1
 004A                   .dbline 55
 004A           ; }
 004A           ; //送指令子程序
 004A           ; void com_lcd(unsigned char com)
 004A           ; {
 004A                   .dbline 56
 004A           ;        PORTC&=~(1<<PC2);
 004A AA98              cbi 0x15,2
 004C                   .dbline 57
 004C           ;        PORTC&=~(1<<PC1);
 004C A998              cbi 0x15,1
 004E                   .dbline 58
 004E           ;        PORTB=com;
 004E A8BA              out 0x18,R10
 0050                   .dbline 59
 0050           ;        PORTC|=(1<<PC0);
 0050 A89A              sbi 0x15,0
 0052                   .dbline 60
 0052           ;        delay(5);
 0052 05E0              ldi R16,5
 0054 10E0              ldi R17,0
 0056 E4DF              rcall _delay
 0058                   .dbline 61
 0058           ;        PORTC&=~(1<<PC0);
 0058 A898              cbi 0x15,0
 005A                   .dbline -2
 005A           L12:
 005A                   .dbline 0 ; func end
 005A A990              ld R10,y+
 005C 0895              ret
 005E                   .dbsym r com 10 c
 005E                   .dbend
 005E                   .dbfunc e data_lcd _data_lcd fV
 005E           ;           data -> R10
                        .even
 005E           _data_lcd::
 005E AA92              st -y,R10
 0060 A02E              mov R10,R16
 0062                   .dbline -1
 0062                   .dbline 65
 0062           ; }
 0062           ; //送数据子程序
 0062           ; void data_lcd(unsigned char data)
 0062           ; {
 0062                   .dbline 66
 0062           ;        PORTC|=(1<<PC2);
 0062 AA9A              sbi 0x15,2
 0064                   .dbline 67
 0064           ;        PORTC&=~(1<<PC1);
 0064 A998              cbi 0x15,1
 0066                   .dbline 68
 0066           ;        PORTB=data;
 0066 A8BA              out 0x18,R10
 0068                   .dbline 69
 0068           ;        PORTC|=(1<<PC0);
 0068 A89A              sbi 0x15,0
 006A                   .dbline 70
 006A           ;        delay(5);
 006A 05E0              ldi R16,5
 006C 10E0              ldi R17,0
 006E D8DF              rcall _delay
 0070                   .dbline 71
 0070           ;        PORTC&=~(1<<PC0);
 0070 A898              cbi 0x15,0
 0072                   .dbline -2
 0072           L13:
 0072                   .dbline 0 ; func end
 0072 A990              ld R10,y+
 0074 0895              ret
 0076                   .dbsym r data 10 c
 0076                   .dbend
 0076                   .dbfunc e LCD1602_init _LCD1602_init fV
                        .even
 0076           _LCD1602_init::
 0076                   .dbline -1
 0076                   .dbline 75
 0076           ; }
 0076           ; //初始化
 0076           ; void LCD1602_init()
 0076           ; {
 0076                   .dbline 76
 0076           ;        DDRB=0XFF;
 0076 8FEF              ldi R24,255
 0078 87BB              out 0x17,R24
 007A                   .dbline 77
 007A           ;        DDRC|=0X07;
 007A 84B3              in R24,0x14
 007C 8760              ori R24,7
 007E 84BB              out 0x14,R24
 0080                   .dbline 78
 0080           ;        PORTC&=~(1<<PC0);
 0080 A898              cbi 0x15,0
 0082                   .dbline 80
 0082           ;        
 0082           ;        com_lcd(0x38);//5*7,2行显示
 0082 08E3              ldi R16,56
 0084 E0DF              rcall _com_lcd
 0086                   .dbline 81
 0086           ;        delay(5);
 0086 05E0              ldi R16,5
 0088 10E0              ldi R17,0
 008A CADF              rcall _delay
 008C                   .dbline 82
 008C           ;        com_lcd(0x01); //清屏

⌨️ 快捷键说明

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