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

📄 lcd_1602_driver.lis

📁 这是一个电池放电器
💻 LIS
📖 第 1 页 / 共 4 页
字号:
                        .module LCD_1602_Driver.c
                        .area data(ram, con, rel)
 0000           _new::
 0000                   .blkb 1
                        .area idata
 0000 20                .byte 32
                        .area data(ram, con, rel)
 0001                   .dbfile E:\刻录的\电子技术\项目\电池放电器\软件V2.0\LCD_1602_Driver.c
 0001                   .dbsym e new _new c
 0001           _num::
 0001                   .blkb 2
                        .area idata
 0001 0000              .word 0
                        .area data(ram, con, rel)
 0003                   .dbfile E:\刻录的\电子技术\项目\电池放电器\软件V2.0\LCD_1602_Driver.c
 0003                   .dbsym e num _num i
                        .area text(rom, con, rel)
 0000                   .dbfile E:\刻录的\电子技术\项目\电池放电器\软件V2.0\LCD_1602_Driver.c
 0000                   .dbfunc e LCD_init _LCD_init fV
                        .even
 0000           _LCD_init::
 0000                   .dbline -1
 0000                   .dbline 21
 0000           ; #include <iom8v.h>
 0000           ; #include <macros.h>
 0000           ; #include "discharge.h"
 0000           ; #include "LCD_1602.h"
 0000           ; 
 0000           ; unsigned char lcd_data[32];//32字节显存,记录LCD上显示的数据
 0000           ; unsigned char data[32];//32字节缓存,保存将要写入LCD的数据
 0000           ; unsigned char add;//显存地址标号
 0000           ; unsigned char new=32;//显存标号 
 0000           ; unsigned int num=0;
 0000           ; /**********************************************************
 0000           ; TC1602B LCD DISPLAY
 0000           ; 建立时间:2005年12月12号
 0000           ; 修改日期:2005年12月12号
 0000           ; LCD_write函数功能:当command=0时,向LCD写入数据,否则向LCD写
 0000           ;                    入命令
 0000           ; LCD第一行显示寄存器地址:0X80-0X8F
 0000           ; LCD第二行显示寄存器地址:0XC0-0XCF
 0000           ; **********************************************************/
 0000           ; void LCD_init(void)
 0000           ;   { 
 0000                   .dbline 22
 0000           ;      LCD_EN_DDR|=LCD_EN;//设定该引脚方向为输出
 0000 8E9A              sbi 0x11,6
 0002                   .dbline 23
 0002           ;        LCD_RS_DDR|=LCD_RS;//设定该引脚方向为输出
 0002 8F9A              sbi 0x11,7
 0004                   .dbline 24
 0004           ;        LCD_D4_DDR|=LCD_D4;//设定数据口为输出 
 0004 8D9A              sbi 0x11,5
 0006                   .dbline 25
 0006           ;        LCD_D5_DDR|=LCD_D5;//设定数据口为输出  
 0006 8C9A              sbi 0x11,4
 0008                   .dbline 26
 0008           ;        LCD_D6_DDR|=LCD_D6;//设定数据口为输出  
 0008 8B9A              sbi 0x11,3
 000A                   .dbline 27
 000A           ;        LCD_D7_DDR|=LCD_D7;//设定数据口为输出
 000A 8A9A              sbi 0x11,2
 000C                   .dbline 29
 000C           ;        
 000C           ;         LCD_EN_PORT&=~LCD_EN;//EN设为低电平
 000C 9698              cbi 0x12,6
 000E                   .dbline 30
 000E           ;         LCD_RS_PORT&=~LCD_RS;//RS设为低电平
 000E 9798              cbi 0x12,7
 0010                   .dbline 31
 0010           ;         LCD_D4_PORT&=~LCD_D4;//数据口置低电平
 0010 9598              cbi 0x12,5
 0012                   .dbline 32
 0012           ;         LCD_D5_PORT&=~LCD_D5;//数据口置低电平
 0012 9498              cbi 0x12,4
 0014                   .dbline 33
 0014           ;         LCD_D6_PORT&=~LCD_D6;//数据口置低电平
 0014 9398              cbi 0x12,3
 0016                   .dbline 34
 0016           ;         LCD_D7_PORT&=~LCD_D7;//数据口置低电平
 0016 9298              cbi 0x12,2
 0018                   .dbline 36
 0018           ;         
 0018           ;     LCD_write_char(0,0x33);      //4bit test
 0018 23E3              ldi R18,51
 001A 30E0              ldi R19,0
 001C 0027              clr R16
 001E 1127              clr R17
 0020 2AD0              rcall _LCD_write_char
 0022                   .dbline 37
 0022           ;       delay_nms(25);
 0022 09E1              ldi R16,25
 0024 10E0              ldi R17,0
 0026 00D0              rcall _delay_nms
 0028                   .dbline 38
 0028           ;       LCD_write_char(0,0x32);
 0028 22E3              ldi R18,50
 002A 30E0              ldi R19,0
 002C 0027              clr R16
 002E 1127              clr R17
 0030 22D0              rcall _LCD_write_char
 0032                   .dbline 39
 0032           ;       delay_nms(15);
 0032 0FE0              ldi R16,15
 0034 10E0              ldi R17,0
 0036 00D0              rcall _delay_nms
 0038                   .dbline 40
 0038           ;       LCD_write_char(0,0x28);
 0038 28E2              ldi R18,40
 003A 30E0              ldi R19,0
 003C 0027              clr R16
 003E 1127              clr R17
 0040 1AD0              rcall _LCD_write_char
 0042                   .dbline 41
 0042           ;       delay_nms(15);
 0042 0FE0              ldi R16,15
 0044 10E0              ldi R17,0
 0046 00D0              rcall _delay_nms
 0048                   .dbline 42
 0048           ;     LCD_write_char(0,0x0C);      //显示开
 0048 2CE0              ldi R18,12
 004A 30E0              ldi R19,0
 004C 0027              clr R16
 004E 1127              clr R17
 0050 12D0              rcall _LCD_write_char
 0052                   .dbline 43
 0052           ;       delay_nms(15);
 0052 0FE0              ldi R16,15
 0054 10E0              ldi R17,0
 0056 00D0              rcall _delay_nms
 0058                   .dbline 44
 0058           ;     LCD_write_char(0,0x01);      //显示清屏
 0058 21E0              ldi R18,1
 005A 30E0              ldi R19,0
 005C 0027              clr R16
 005E 1127              clr R17
 0060 0AD0              rcall _LCD_write_char
 0062                   .dbline 45
 0062           ;       delay_nms(15);
 0062 0FE0              ldi R16,15
 0064 10E0              ldi R17,0
 0066 00D0              rcall _delay_nms
 0068                   .dbline 46
 0068           ;     LCD_write_char(0,0x06);      //显示光标移动设置   
 0068 26E0              ldi R18,6
 006A 30E0              ldi R19,0
 006C 0027              clr R16
 006E 1127              clr R17
 0070 02D0              rcall _LCD_write_char
 0072                   .dbline 47
 0072           ;       LCD_clear();
 0072 64D0              rcall _LCD_clear
 0074                   .dbline -2
 0074           L1:
 0074                   .dbline 0 ; func end
 0074 0895              ret
 0076                   .dbend
 0076                   .dbfunc e LCD_write_char _LCD_write_char fV
 0076           ;           data -> R20,R21
 0076           ;        command -> R22,R23
                        .even
 0076           _LCD_write_char::
 0076 00D0              rcall push_gset2
 0078 A901              movw R20,R18
 007A B801              movw R22,R16
 007C                   .dbline -1
 007C                   .dbline 56
 007C           ;       //LCD_init_CGRAM(); 
 007C           ;   }
 007C           ; /*-----------------------------------------------------------------------
 007C           ; LCD_write_char    : 写一个字节到LCD的函数
 007C           ; 编写日期             :2005-12-12 
 007C           ; 最后修改日期      :2005-12-12                
 007C           ; -----------------------------------------------------------------------*/
 007C           ; void LCD_write_char(unsigned command,unsigned data)
 007C           ;   { 
 007C                   .dbline 57
 007C           ;     if (command == 0)
 007C 6030              cpi R22,0
 007E 6707              cpc R22,R23
 0080 11F4              brne L3
 0082           X0:
 0082                   .dbline 58
 0082           ;       LCD_RS_PORT &= ~LCD_RS;   //RS=0  写地址
 0082 9798              cbi 0x12,7
 0084 01C0              rjmp L4
 0086           L3:
 0086                   .dbline 60
 0086           ;       else
 0086           ;     LCD_RS_PORT |= LCD_RS;    //RS=1 写数据
 0086 979A              sbi 0x12,7
 0088           L4:
 0088                   .dbline 62
 0088           ;       
 0088           ;     LCD_write_DATA_PORT(data);//写高4位
 0088 042F              mov R16,R20
 008A 18D0              rcall _LCD_write_DATA_PORT
 008C                   .dbline 63
 008C           ;     LCD_write_DATA_PORT(data<<4);//写低4位
 008C 042F              mov R16,R20
 008E 000F              lsl R16
 0090 111F              rol R17
 0092 000F              lsl R16
 0094 111F              rol R17
 0096 000F              lsl R16
 0098 111F              rol R17
 009A 000F              lsl R16
 009C 111F              rol R17
 009E 0ED0              rcall _LCD_write_DATA_PORT
 00A0                   .dbline 64
 00A0           ;       delay_nus(250);
 00A0 0AEF              ldi R16,250
 00A2 10E0              ldi R17,0
 00A4 00D0              rcall _delay_nus
 00A6                   .dbline 65
 00A6           ;       num++;//统计向LCD发送的字节数
 00A6 80910100          lds R24,_num
 00AA 90910200          lds R25,_num+1
 00AE 0196              adiw R24,1
 00B0 90930200          sts _num+1,R25
 00B4 80930100          sts _num,R24
 00B8                   .dbline -2
 00B8           L2:
 00B8 00D0              rcall pop_gset2
 00BA                   .dbline 0 ; func end
 00BA 0895              ret
 00BC                   .dbsym r data 20 i
 00BC                   .dbsym r command 22 i
 00BC                   .dbend
 00BC                   .dbfunc e LCD_write_DATA_PORT _LCD_write_DATA_PORT fV
 00BC           ;           data -> R20
                        .even
 00BC           _LCD_write_DATA_PORT::
 00BC 00D0              rcall push_gset1
 00BE 402F              mov R20,R16
 00C0                   .dbline -1
 00C0                   .dbline 75
 00C0           ;   }
 00C0           ; /*-----------------------------------------------------------------------
 00C0           ; LCD_write_DATA_PORT : 写数据到LCD数据口函数
 00C0           ; 
 00C0           ; 输入参数data   :要写入的数据(仅高4位)
 00C0           ; 编写日期          :2005-12-12
 00C0           ; 最后修改日期   :2005-12-12           
 00C0           ; -----------------------------------------------------------------------*/
 00C0           ; void LCD_write_DATA_PORT(unsigned char data)
 00C0           ; {   
 00C0                   .dbline 76
 00C0           ;     if((data>>4)%2)
 00C0 12E0              ldi R17,2
 00C2 042F              mov R16,R20
 00C4 0295              swap R16
 00C6 0F70              andi R16,#0x0F
 00C8 00D0              rcall mod8u
 00CA 0023              tst R16
 00CC 11F0              breq L6
 00CE                   .dbline 77
 00CE           ;         LCD_D4_PORT |=LCD_D4;
 00CE 959A              sbi 0x12,5
 00D0 01C0              rjmp L7
 00D2           L6:
 00D2                   .dbline 79
 00D2           ;       else
 00D2           ;         LCD_D4_PORT &=~LCD_D4;
 00D2 9598              cbi 0x12,5
 00D4           L7:
 00D4                   .dbline 81
 00D4           ;       
 00D4           ;       if((data>>5)%2)
 00D4 12E0              ldi R17,2
 00D6 042F              mov R16,R20
 00D8 0695              lsr R16
 00DA 0695              lsr R16
 00DC 0695              lsr R16
 00DE 0695              lsr R16
 00E0 0695              lsr R16
 00E2 00D0              rcall mod8u
 00E4 0023              tst R16
 00E6 11F0              breq L8
 00E8                   .dbline 82
 00E8           ;         LCD_D5_PORT |=LCD_D5;
 00E8 949A              sbi 0x12,4
 00EA 01C0              rjmp L9
 00EC           L8:
 00EC                   .dbline 84
 00EC           ;       else
 00EC           ;         LCD_D5_PORT &=~LCD_D5;
 00EC 9498              cbi 0x12,4
 00EE           L9:
 00EE                   .dbline 86
 00EE           ;         
 00EE           ;       if((data>>6)%2)
 00EE 12E0              ldi R17,2
 00F0 042F              mov R16,R20
 00F2 0695              lsr R16
 00F4 0695              lsr R16
 00F6 0695              lsr R16
 00F8 0695              lsr R16
 00FA 0695              lsr R16
 00FC 0695              lsr R16
 00FE 00D0              rcall mod8u
 0100 0023              tst R16
 0102 11F0              breq L10
 0104                   .dbline 87
 0104           ;         LCD_D6_PORT |=LCD_D6;
 0104 939A              sbi 0x12,3
 0106 01C0              rjmp L11
 0108           L10:
 0108                   .dbline 89
 0108           ;       else
 0108           ;         LCD_D6_PORT &=~LCD_D6;
 0108 9398              cbi 0x12,3
 010A           L11:
 010A                   .dbline 91
 010A           ;         
 010A           ;       if((data>>7)%2)
 010A 12E0              ldi R17,2
 010C 042F              mov R16,R20
 010E 0695              lsr R16
 0110 0695              lsr R16
 0112 0695              lsr R16
 0114 0695              lsr R16
 0116 0695              lsr R16
 0118 0695              lsr R16
 011A 0695              lsr R16
 011C 00D0              rcall mod8u
 011E 0023              tst R16
 0120 11F0              breq L12
 0122                   .dbline 92
 0122           ;         LCD_D7_PORT |=LCD_D7;
 0122 929A              sbi 0x12,2
 0124 01C0              rjmp L13
 0126           L12:
 0126                   .dbline 94
 0126           ;       else
 0126           ;         LCD_D7_PORT &=~LCD_D7;
 0126 9298              cbi 0x12,2
 0128           L13:
 0128                   .dbline 96
 0128           ;         
 0128           ;         LCD_EN_PORT |= LCD_EN; //EN端产生一个由低电平变高电平,写LCD
 0128 969A              sbi 0x12,6
 012A                   .dbline 97
 012A           ;         delay_nus(25);
 012A 09E1              ldi R16,25
 012C 10E0              ldi R17,0
 012E 00D0              rcall _delay_nus
 0130                   .dbline 98
 0130           ;       LCD_EN_PORT &= ~LCD_EN; //EN端产生一个由高电平变低电平,写LCD
 0130 9698              cbi 0x12,6
 0132                   .dbline 99
 0132           ;         delay_nus(25);
 0132 09E1              ldi R16,25
 0134 10E0              ldi R17,0
 0136 00D0              rcall _delay_nus
 0138                   .dbline -2
 0138           L5:
 0138 00D0              rcall pop_gset1
 013A                   .dbline 0 ; func end
 013A 0895              ret
 013C                   .dbsym r data 20 c
 013C                   .dbend
 013C                   .dbfunc e LCD_clear _LCD_clear fV
 013C           ;              i -> R20
                        .even

⌨️ 快捷键说明

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