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

📄 1602b_lcd.lis

📁 用avr的m16产生pwm波控制舵机的程序!
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module _1602B_LCD.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\mcu\avr\test\1602_duoji\1602B_LCD.c
 0000                   .dbfunc e LCD_init _LCD_init fV
                        .even
 0000           _LCD_init::
 0000                   .dbline -1
 0000                   .dbline 17
 0000           ; #include <iom16v.h>
 0000           ; #include <macros.h>
 0000           ; #include "1602LCD.h"
 0000           ; 
 0000           ; /**********************************************************
 0000           ; **********************************************************/
 0000           ; /**********************************************************
 0000           ; TC1602B LCD DISPLAY
 0000           ; 建立时间:2003年11月9号
 0000           ; 修改日期:2003年11月14号
 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 18
 0000           ;     delay_nms(15);
 0000 0FE0              ldi R16,15
 0002 10E0              ldi R17,0
 0004 0E940000          xcall _delay_nms
 0008                   .dbline 20
 0008           ;    
 0008           ;     LCD_write_char(0x28,0);      //4bit test
 0008 2227              clr R18
 000A 3327              clr R19
 000C 08E2              ldi R16,40
 000E 10E0              ldi R17,0
 0010 17D0              xcall _LCD_write_char
 0012                   .dbline 21
 0012           ;     LCD_write_char(0x0f,0);      //显示开,显示光标,产生闪烁
 0012 2227              clr R18
 0014 3327              clr R19
 0016 0FE0              ldi R16,15
 0018 10E0              ldi R17,0
 001A 12D0              xcall _LCD_write_char
 001C                   .dbline 22
 001C           ;     LCD_write_char(0x01,0);      //显示清屏
 001C 2227              clr R18
 001E 3327              clr R19
 0020 01E0              ldi R16,1
 0022 10E0              ldi R17,0
 0024 0DD0              xcall _LCD_write_char
 0026                   .dbline 23
 0026           ;     LCD_write_char(0x06,0);      //显示光标移动设置
 0026 2227              clr R18
 0028 3327              clr R19
 002A 06E0              ldi R16,6
 002C 10E0              ldi R17,0
 002E 08D0              xcall _LCD_write_char
 0030                   .dbline -2
 0030           L1:
 0030                   .dbline 0 ; func end
 0030 0895              ret
 0032                   .dbend
 0032                   .dbfunc e LCD_en_write _LCD_en_write fV
                        .even
 0032           _LCD_en_write::
 0032                   .dbline -1
 0032                   .dbline 27
 0032           ;   }
 0032           ; 
 0032           ; void LCD_en_write(void)        //EN端产生一个高电平脉冲,写LCD
 0032           ;   {
 0032                   .dbline 28
 0032           ;     LCD_EN_PORT |= LCD_EN;
 0032 959A              sbi 0x12,5
 0034                   .dbline 29
 0034           ;     delay_nus(1);
 0034 01E0              ldi R16,1
 0036 10E0              ldi R17,0
 0038 0E940000          xcall _delay_nus
 003C                   .dbline 30
 003C           ;     LCD_EN_PORT &= ~LCD_EN;
 003C 9598              cbi 0x12,5
 003E                   .dbline -2
 003E           L2:
 003E                   .dbline 0 ; func end
 003E 0895              ret
 0040                   .dbend
 0040                   .dbfunc e LCD_write_char _LCD_write_char fV
 0040           ;      data_temp -> R22,R23
 0040           ;   command_temp -> R20,R21
 0040           ;           data -> R12,R13
 0040           ;        command -> R10,R11
                        .even
 0040           _LCD_write_char::
 0040 0E940000          xcall push_gset4
 0044 6901              movw R12,R18
 0046 5801              movw R10,R16
 0048                   .dbline -1
 0048                   .dbline 45
 0048           ;   }
 0048           ; 
 0048           ; /*-----------------------------------------------------------------------
 0048           ; LCD_write_char    : 英文字符串显示函数
 0048           ; 
 0048           ; 输入参数:*s      :英文字符串指针;
 0048           ;           X、Y    : 显示字符串的位置,X:0-15,Y:0-1
 0048           ;                     LCD第一行显示寄存器地址:0X80-0X8F
 0048           ;                     LCD第一行显示寄存器地址:0XC0-0XCF
 0048           ; 
 0048           ; 编写日期          :2003-11-19 
 0048           ; 最后修改日期      :2004-8-19                 
 0048           ; -----------------------------------------------------------------------*/
 0048           ; void LCD_write_char(unsigned command,unsigned data)//把写数据与写指令结合到了一起
 0048           ;   {
 0048                   .dbline 48
 0048           ;     unsigned command_temp,data_temp;        
 0048           ;    
 0048           ;     command_temp = command;
 0048 A501              movw R20,R10
 004A                   .dbline 49
 004A           ;     data_temp = data;
 004A B601              movw R22,R12
 004C                   .dbline 51
 004C           ;    
 004C           ;     LCD_wait_Ready();
 004C 4FD0              xcall _LCD_wait_Ready
 004E                   .dbline 53
 004E           ;    
 004E           ;     LCD_RW_PORT &= ~LCD_RW;                 //RW=0
 004E 9398              cbi 0x12,3
 0050                   .dbline 55
 0050           ;    
 0050           ;     if (command == 0)
 0050 4030              cpi R20,0
 0052 4507              cpc R20,R21
 0054 69F4              brne L4
 0056           X0:
 0056                   .dbline 56
 0056           ;       {
 0056                   .dbline 57
 0056           ;        LCD_RS_PORT |= LCD_RS;             //RS=1 
 0056 949A              sbi 0x12,4
 0058                   .dbline 58
 0058           ;        LCD_DATA_PORT &= 0X0F;
 0058 88B3              in R24,0x18
 005A 8F70              andi R24,15
 005C 88BB              out 0x18,R24
 005E                   .dbline 59
 005E           ;        LCD_DATA_PORT |= data_temp&0xf0;   //send high 4bit
 005E CB01              movw R24,R22
 0060 807F              andi R24,240
 0062 9070              andi R25,0
 0064 28B2              in R2,0x18
 0066 3324              clr R3
 0068 282A              or R2,R24
 006A 392A              or R3,R25
 006C 28BA              out 0x18,R2
 006E                   .dbline 60
 006E           ;       }
 006E 0CC0              xjmp L5
 0070           L4:
 0070                   .dbline 62
 0070           ;     else 
 0070           ;       {
 0070                   .dbline 63
 0070           ;        LCD_RS_PORT &= ~LCD_RS;            //RS=0
 0070 9498              cbi 0x12,4
 0072                   .dbline 64
 0072           ;        LCD_DATA_PORT &= 0X0F;
 0072 88B3              in R24,0x18
 0074 8F70              andi R24,15
 0076 88BB              out 0x18,R24
 0078                   .dbline 65
 0078           ;          LCD_DATA_PORT |= command_temp&0xf0;//send high 4bit
 0078 CA01              movw R24,R20
 007A 807F              andi R24,240
 007C 9070              andi R25,0
 007E 28B2              in R2,0x18
 0080 3324              clr R3
 0082 282A              or R2,R24
 0084 392A              or R3,R25
 0086 28BA              out 0x18,R2
 0088                   .dbline 66
 0088           ;       }
 0088           L5:
 0088                   .dbline 67
 0088           ;     LCD_en_write();
 0088 D4DF              xcall _LCD_en_write
 008A                   .dbline 69
 008A           ;    
 008A           ;     command_temp=command_temp << 4;         //send low 4bit
 008A 440F              lsl R20
 008C 551F              rol R21
 008E 440F              lsl R20
 0090 551F              rol R21
 0092 440F              lsl R20
 0094 551F              rol R21
 0096 440F              lsl R20
 0098 551F              rol R21
 009A                   .dbline 70
 009A           ;     data_temp=data_temp       << 4;
 009A 660F              lsl R22
 009C 771F              rol R23
 009E 660F              lsl R22
 00A0 771F              rol R23
 00A2 660F              lsl R22
 00A4 771F              rol R23
 00A6 660F              lsl R22
 00A8 771F              rol R23
 00AA                   .dbline 72
 00AA           ;    
 00AA           ;     LCD_DATA_PORT &= 0X0F;
 00AA 88B3              in R24,0x18
 00AC 8F70              andi R24,15
 00AE 88BB              out 0x18,R24
 00B0                   .dbline 73
 00B0           ;     if (command==0)
 00B0 AA20              tst R10
 00B2 59F4              brne L6
 00B4 BB20              tst R11
 00B6 49F4              brne L6
 00B8           X1:
 00B8                   .dbline 74

⌨️ 快捷键说明

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