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

📄 1602lcd.lis

📁 1602lcd显示频率计 通过了proteus仿真
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module _1602lcd.c
                        .area text(rom, con, rel)
 0000                   .dbfile F:\avr单片机学习\我自编程序\1602lcd\1602lcd.c
 0000                   .dbfunc e lcd_init _lcd_init fV
                        .even
 0000           _lcd_init::
 0000                   .dbline -1
 0000                   .dbline 11
 0000           ; 
 0000           ; /*---------------------------------------------------------------*/
 0000           ; #include <iom16v.h>
 0000           ; #include <macros.h>
 0000           ; #include "lcd1602.h"
 0000           ; /*------------------------------------主函数-------------------------------------------*/
 0000           ; 
 0000           ; /*------------------------------------液晶驱动函数-------------------------------------*/
 0000           ; //液晶初始化
 0000           ; void lcd_init(void)
 0000           ; {
 0000                   .dbline 12
 0000           ;  delay_nms(15);
 0000 0FE0              ldi R16,15
 0002 10E0              ldi R17,0
 0004 7AD0              xcall _delay_nms
 0006                   .dbline 13
 0006           ;  lcd_write_command(0x38,0);//显示模式设置三次(此时不管lcd空闲与否)
 0006 2227              clr R18
 0008 08E3              ldi R16,56
 000A 1FD0              xcall _lcd_write_command
 000C                   .dbline 14
 000C           ;  delay_nms(5);
 000C 05E0              ldi R16,5
 000E 10E0              ldi R17,0
 0010 74D0              xcall _delay_nms
 0012                   .dbline 15
 0012           ;  lcd_write_command(0x38,0);
 0012 2227              clr R18
 0014 08E3              ldi R16,56
 0016 19D0              xcall _lcd_write_command
 0018                   .dbline 16
 0018           ;  delay_nms(5);
 0018 05E0              ldi R16,5
 001A 10E0              ldi R17,0
 001C 6ED0              xcall _delay_nms
 001E                   .dbline 17
 001E           ;  lcd_write_command(0x38,0);
 001E 2227              clr R18
 0020 08E3              ldi R16,56
 0022 13D0              xcall _lcd_write_command
 0024                   .dbline 18
 0024           ;  delay_nms(5);
 0024 05E0              ldi R16,5
 0026 10E0              ldi R17,0
 0028 68D0              xcall _delay_nms
 002A                   .dbline 20
 002A           ;  
 002A           ;  lcd_write_command(0x38,1);//显示模式设置(从此之后均需lcd空闲)
 002A 21E0              ldi R18,1
 002C 08E3              ldi R16,56
 002E 0DD0              xcall _lcd_write_command
 0030                   .dbline 21
 0030           ;  lcd_write_command(0x08,1);//显示关闭
 0030 21E0              ldi R18,1
 0032 08E0              ldi R16,8
 0034 0AD0              xcall _lcd_write_command
 0036                   .dbline 22
 0036           ;  lcd_write_command(0x01,1);//显示清屏
 0036 21E0              ldi R18,1
 0038 01E0              ldi R16,1
 003A 07D0              xcall _lcd_write_command
 003C                   .dbline 23
 003C           ;  lcd_write_command(0x06,1);//显示光标移动设置
 003C 21E0              ldi R18,1
 003E 06E0              ldi R16,6
 0040 04D0              xcall _lcd_write_command
 0042                   .dbline 24
 0042           ;  lcd_write_command(0x0c,1);//显示开及光标设置
 0042 21E0              ldi R18,1
 0044 0CE0              ldi R16,12
 0046 01D0              xcall _lcd_write_command
 0048                   .dbline -2
 0048           L1:
 0048                   .dbline 0 ; func end
 0048 0895              ret
 004A                   .dbend
 004A                   .dbfunc e lcd_write_command _lcd_write_command fV
 004A           ;        wait_en -> R12
 004A           ;        command -> R10
                        .even
 004A           _lcd_write_command::
 004A AA92              st -y,R10
 004C CA92              st -y,R12
 004E C22E              mov R12,R18
 0050 A02E              mov R10,R16
 0052                   .dbline -1
 0052                   .dbline 29
 0052           ; }
 0052           ; 
 0052           ; //写指令函数: E=高脉冲 RS=0 RW=0
 0052           ; void lcd_write_command(unsigned char command,unsigned char wait_en)//command为指令,wait_en指定是否要检测LCD忙信号
 0052           ; {
 0052                   .dbline 30
 0052           ;  if(wait_en)wait_enable();//若wait_en为1,则要检测LCD忙信号,等待其空闲
 0052 CC20              tst R12
 0054 09F0              breq L3
 0056           X0:
 0056                   .dbline 30
 0056 16D0              xcall _wait_enable
 0058           L3:
 0058                   .dbline 31
 0058           ;  lcd_control_port&=~lcd_RS;//RS=0
 0058 D898              cbi 0x1b,0
 005A                   .dbline 32
 005A           ;  lcd_control_port&=~lcd_RW;//RW=0
 005A D998              cbi 0x1b,1
 005C                   .dbline 33
 005C           ;  lcd_control_port&=~lcd_EN;//E=0,下面给LCD一个高脉冲
 005C DA98              cbi 0x1b,2
 005E                   .dbline 34
 005E           ;  NOP();
 005E 0000              nop
 0060                   .dbline 35
 0060           ;  lcd_control_port|=lcd_EN;//E=1
 0060 DA9A              sbi 0x1b,2
 0062                   .dbline 36
 0062           ;  lcd_data_port=command;
 0062 A2BA              out 0x12,R10
 0064                   .dbline 37
 0064           ;  lcd_control_port&=~lcd_EN;//重设E=0
 0064 DA98              cbi 0x1b,2
 0066                   .dbline -2
 0066           L2:
 0066                   .dbline 0 ; func end
 0066 C990              ld R12,y+
 0068 A990              ld R10,y+
 006A 0895              ret
 006C                   .dbsym r wait_en 12 c
 006C                   .dbsym r command 10 c
 006C                   .dbend
 006C                   .dbfunc e lcd_write_data _lcd_write_data fV
 006C           ;      char_data -> R10
                        .even
 006C           _lcd_write_data::
 006C AA92              st -y,R10
 006E A02E              mov R10,R16
 0070                   .dbline -1
 0070                   .dbline 42
 0070           ; }
 0070           ; 
 0070           ; //写数据函数: E =高脉冲 RS=1 RW=0
 0070           ; void lcd_write_data(unsigned char char_data)
 0070           ; {
 0070                   .dbline 43
 0070           ;  wait_enable();//等待LCD空闲
 0070 09D0              xcall _wait_enable
 0072                   .dbline 44
 0072           ;  lcd_control_port|=lcd_RS;//RS=1
 0072 D89A              sbi 0x1b,0
 0074                   .dbline 45
 0074           ;  lcd_control_port&=~lcd_RW;//RW=0
 0074 D998              cbi 0x1b,1
 0076                   .dbline 46
 0076           ;  lcd_control_port&=~lcd_EN;//E=0,下面给LCD一个高脉冲
 0076 DA98              cbi 0x1b,2
 0078                   .dbline 47
 0078           ;  NOP();
 0078 0000              nop
 007A                   .dbline 48
 007A           ;  lcd_control_port|=lcd_EN;//E=1
 007A DA9A              sbi 0x1b,2
 007C                   .dbline 49
 007C           ;  lcd_data_port=char_data;
 007C A2BA              out 0x12,R10
 007E                   .dbline 50
 007E           ;  lcd_control_port&=~lcd_EN;//重设E=0
 007E DA98              cbi 0x1b,2
 0080                   .dbline -2
 0080           L5:
 0080                   .dbline 0 ; func end
 0080 A990              ld R10,y+
 0082 0895              ret
 0084                   .dbsym r char_data 10 c
 0084                   .dbend
 0084                   .dbfunc e wait_enable _wait_enable fV
                        .even
 0084           _wait_enable::
 0084                   .dbline -1
 0084                   .dbline 56
 0084           ; }
 0084           ; 
 0084           ; //正常读写操作之前必须检测LCD控制器状态:E=1 RS=0 RW=1;DB7: 0 LCD控制器空闲,1 LCD控制器忙。
 0084           ; //检测忙信号,等待LCD空闲函数
 0084           ; void wait_enable(void)
 0084           ; {
 0084                   .dbline 57
 0084           ;  lcd_busy_ddr&=~busy;//设置busy口为输入
 0084 8F98              cbi 0x11,7
 0086                   .dbline 58
 0086           ;  lcd_control_port&=~lcd_RS;//RS=0
 0086 D898              cbi 0x1b,0
 0088                   .dbline 59
 0088           ;  lcd_control_port|=lcd_RW;//RW=1
 0088 D99A              sbi 0x1b,1
 008A                   .dbline 60
 008A           ;  NOP();

⌨️ 快捷键说明

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