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

📄 1602.lis

📁 l602的读写
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module _1602.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\我的文档\MYDESI~1\1602\1602.c
 0000                   .dbfunc e port_init _port_init fV
                        .even
 0000           _port_init::
 0000                   .dbline -1
 0000                   .dbline 30
 0000           ; //说明:此程序在LCD1602上显示“Velcome! ”“www.iccavr.com”同时实现左右移动。
 0000           ; 
 0000           ; /*********************************
 0000           ; *     字符LCD1602应用例子   *
 0000           ; * 实验环境:本站的M16学习板   *
 0000           ; * 接线方式:RS=PD.3,E=PC.6   *
 0000           ; *           Db0-Db7=PB0-PB7   *
 0000           ; * 作    者:tonghe     *
 0000           ; * 日    期:2007年03月06日   *
 0000           ; * 版    本:V1.2     *
 0000           ; * 修改日期:2007年08月11日   *
 0000           ; * 编 译 器:ICCAVR6.31A    *
 0000           ; *********************************/
 0000           ; #include "iom8v.h"
 0000           ; 
 0000           ; //宏定义
 0000           ; #define RS1602 PD3       //RS接在PORTD.3上
 0000           ; #define E1602 PC6      //E接在PORTC.6上
 0000           ; #define LCD_DATA PORTB     //8位数据联接在PORTB上
 0000           ; #define CLR_RS PORTD&=~(1<<RS1602)//RS清0
 0000           ; #define SET_RS PORTD|=1<<RS1602   //RS置1
 0000           ; #define CLR_E PORTC&=~(1<<E1602)  //E清0
 0000           ; #define SET_E PORTC|=1<<E1602   //E置1
 0000           ; 
 0000           ; #define uchar unsigned char
 0000           ; #define uint unsigned int
 0000           ; 
 0000           ; //配置端口
 0000           ; void port_init(void)
 0000           ;  {
 0000                   .dbline 33
 0000           ; // PORTA = 0xFF;
 0000           ;  //DDRA  = 0x00;
 0000           ;  DDRB  = 0xFF;
 0000 8FEF              ldi R24,255
 0002 87BB              out 0x17,R24
 0004                   .dbline 34
 0004           ;  PORTB = 0xFF;
 0004 88BB              out 0x18,R24
 0006                   .dbline 35
 0006           ;  DDRD  = 0xFF;
 0006 81BB              out 0x11,R24
 0008                   .dbline 36
 0008           ;  PORTD = 0x00;
 0008 2224              clr R2
 000A 22BA              out 0x12,R2
 000C                   .dbline 38
 000C           ;  
 000C           ;  DDRC  = 0xFF;      //定义C口为输出
 000C 84BB              out 0x14,R24
 000E                   .dbline 39
 000E           ;  PORTC = 0x00;           //开背光:接在PC7
 000E 25BA              out 0x15,R2
 0010                   .dbline -2
 0010           L1:
 0010                   .dbline 0 ; func end
 0010 0895              ret
 0012                   .dbend
 0012                   .dbfunc e delay_ms _delay_ms fV
 0012           ;              a -> R20,R21
 0012           ;              i -> R16,R17
                        .even
 0012           _delay_ms::
 0012 4A93              st -y,R20
 0014 5A93              st -y,R21
 0016                   .dbline -1
 0016                   .dbline 45
 0016           ;    
 0016           ;  }
 0016           ; 
 0016           ; //延时函数:入口i,单位mS,最大65536mS
 0016           ; void delay_ms(uint i)
 0016           ;     {
 0016                   .dbline 47
 0016           ;     uint a;
 0016           ;     for(;i;i--)
 0016 0AC0              rjmp L6
 0018           L3:
 0018                   .dbline 48
 0018           ;   {
 0018                   .dbline 49
 0018           ;   for(a=150;a!=0;a--)      //针对时钟频率为1M
 0018 46E9              ldi R20,150
 001A 50E0              ldi R21,0
 001C 02C0              rjmp L10
 001E           L7:
 001E                   .dbline 50
 001E           ;    {;}
 001E                   .dbline 50
 001E                   .dbline 50
 001E           L8:
 001E                   .dbline 49
 001E 4150              subi R20,1
 0020 5040              sbci R21,0
 0022           L10:
 0022                   .dbline 49
 0022 4030              cpi R20,0
 0024 4507              cpc R20,R21
 0026 D9F7              brne L7
 0028           X0:
 0028                   .dbline 51
 0028           ;   }
 0028           L4:
 0028                   .dbline 47
 0028 0150              subi R16,1
 002A 1040              sbci R17,0
 002C           L6:
 002C                   .dbline 47
 002C 0030              cpi R16,0
 002E 0107              cpc R16,R17
 0030 99F7              brne L3
 0032           X1:
 0032                   .dbline -2
 0032           L2:
 0032                   .dbline 0 ; func end
 0032 5991              ld R21,y+
 0034 4991              ld R20,y+
 0036 0895              ret
 0038                   .dbsym r a 20 i
 0038                   .dbsym r i 16 i
 0038                   .dbend
 0038                   .dbfunc e lcd_da _lcd_da fV
 0038           ;           data -> R10
                        .even
 0038           _lcd_da::
 0038 AA92              st -y,R10
 003A A02E              mov R10,R16
 003C                   .dbline -1
 003C                   .dbline 56
 003C           ;     }
 003C           ; 
 003C           ; //写数据到LCD的函数
 003C           ; void lcd_da(uchar data)
 003C           ;  {
 003C                   .dbline 57
 003C           ;  SET_RS;       //RS置高,写数据
 003C 939A              sbi 0x12,3
 003E                   .dbline 58
 003E           ;  delay_ms(1);
 003E 01E0              ldi R16,1
 0040 10E0              ldi R17,0
 0042 E7DF              rcall _delay_ms
 0044                   .dbline 59
 0044           ;  SET_E;
 0044 AE9A              sbi 0x15,6
 0046                   .dbline 60
 0046           ;  LCD_DATA = data;
 0046 A8BA              out 0x18,R10
 0048                   .dbline 61
 0048           ;  delay_ms(1);
 0048 01E0              ldi R16,1
 004A 10E0              ldi R17,0
 004C E2DF              rcall _delay_ms
 004E                   .dbline 62
 004E           ;  CLR_E;
 004E AE98              cbi 0x15,6
 0050                   .dbline 63
 0050           ;  delay_ms(1);    //延时5MS
 0050 01E0              ldi R16,1
 0052 10E0              ldi R17,0
 0054 DEDF              rcall _delay_ms
 0056                   .dbline -2
 0056           L11:
 0056                   .dbline 0 ; func end
 0056 A990              ld R10,y+
 0058 0895              ret
 005A                   .dbsym r data 10 c
 005A                   .dbend
 005A                   .dbfunc e lcd_comm _lcd_comm fV
 005A           ;           data -> R10
                        .even
 005A           _lcd_comm::
 005A AA92              st -y,R10
 005C A02E              mov R10,R16
 005E                   .dbline -1
 005E                   .dbline 68
 005E           ;  } 
 005E           ; 
 005E           ; //写指令到LCD的函数
 005E           ; void lcd_comm(uchar data)
 005E           ;  {
 005E                   .dbline 69
 005E           ;  CLR_RS;       //RS清0,写指令
 005E 9398              cbi 0x12,3
 0060                   .dbline 70
 0060           ;  delay_ms(1);    //延时5MS
 0060 01E0              ldi R16,1
 0062 10E0              ldi R17,0
 0064 D6DF              rcall _delay_ms
 0066                   .dbline 71
 0066           ;  SET_E;
 0066 AE9A              sbi 0x15,6
 0068                   .dbline 72
 0068           ;  LCD_DATA = data;
 0068 A8BA              out 0x18,R10
 006A                   .dbline 73
 006A           ;  delay_ms(1);
 006A 01E0              ldi R16,1
 006C 10E0              ldi R17,0
 006E D1DF              rcall _delay_ms
 0070                   .dbline 74
 0070           ;  CLR_E;
 0070 AE98              cbi 0x15,6
 0072                   .dbline 75
 0072           ;  delay_ms(1);    //延时5MS
 0072 01E0              ldi R16,1
 0074 10E0              ldi R17,0
 0076 CDDF              rcall _delay_ms
 0078                   .dbline -2
 0078           L12:
 0078                   .dbline 0 ; func end
 0078 A990              ld R10,y+
 007A 0895              ret
 007C                   .dbsym r data 10 c
 007C                   .dbend
 007C                   .dbfunc e lcd _lcd fV
 007C           ;              s -> R20,R21
                        .even
 007C           _lcd::
 007C 4A93              st -y,R20
 007E 5A93              st -y,R21
 0080 A801              movw R20,R16
 0082                   .dbline -1
 0082                   .dbline 80
 0082           ;  } 
 0082           ; 
 0082           ; //显示字符串函数:入口:待显示的字符串
 0082           ; void lcd(char *s)
 0082           ;     {
 0082 05C0              rjmp L15
 0084           L14:
 0084                   .dbline 82
 0084           ;  while(*s)
 0084           ;      {
 0084                   .dbline 83
 0084           ;   lcd_da(*s);
 0084 FA01              movw R30,R20
 0086 0081              ldd R16,z+0
 0088 D7DF              rcall _lcd_da
 008A                   .dbline 84
 008A           ;   s++;
 008A 4F5F              subi R20,255  ; offset = 1
 008C 5F4F              sbci R21,255
 008E                   .dbline 85
 008E           ;   }
 008E           L15:
 008E                   .dbline 81
 008E FA01              movw R30,R20
 0090 2080              ldd R2,z+0
 0092 2220              tst R2
 0094 B9F7              brne L14
 0096           X2:
 0096                   .dbline -2
 0096           L13:
 0096                   .dbline 0 ; func end
 0096 5991              ld R21,y+
 0098 4991              ld R20,y+
 009A 0895              ret
 009C                   .dbsym r s 20 pc
 009C                   .dbend
 009C                   .dbfunc e cls _cls fV
                        .even
 009C           _cls::
 009C                   .dbline -1
 009C                   .dbline 90
 009C           ;  }
 009C           ;  
 009C           ; //清屏指令函数
 009C           ; void cls(void)
 009C           ;     {
 009C                   .dbline 91
 009C           ;  lcd_comm(0x01);
 009C 01E0              ldi R16,1
 009E DDDF              rcall _lcd_comm
 00A0                   .dbline 92
 00A0           ;  delay_ms(5);
 00A0 05E0              ldi R16,5
 00A2 10E0              ldi R17,0
 00A4 B6DF              rcall _delay_ms
 00A6                   .dbline -2
 00A6           L17:
 00A6                   .dbline 0 ; func end
 00A6 0895              ret

⌨️ 快捷键说明

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