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

📄 lcd20x4.lis

📁 单片机应用 1.1602LCD 2.2004LCD源码 3.ATmega16 PWM源码 4.ATmega8 LED源码 5.无线影音Nrf2401源码 6.AVR串口源码
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module LCD20x4.c
                        .area text(rom, con, rel)
 0000                   .dbfile F:\ouravr\M16LCD~1\LCD20x4.c
 0000                   .dbfunc e delay_us _delay_us fV
 0000           ;           time -> R16,R17
                        .even
 0000           _delay_us::
 0000                   .dbline -1
 0000                   .dbline 47
 0000           ; /*=======================================================
 0000           ; 20x4字符液晶主程序,编译软件(ICCAVR_6.31)
 0000           ; CPU内部晶振8M
 0000           ; 数据线B0~B7接PORTB, E=D7 RW=D6 RS=D5
 0000           ; =========================================================
 0000           ; 接线图如下:
 0000           ; _______________           ______________
 0000           ;                |      --1|GND           |
 0000           ;                |      --2|+5V           |
 0000           ;                |      --3|V0            |
 0000           ;                |         |              |
 0000           ;             PD5|--------4|RS            |
 0000           ;             PD6|--------5|RW            |
 0000           ;             PD7|--------6|E             |
 0000           ;  CPU           |         |              |
 0000           ;  ATmmega16L PB0|--------7|D0  LCD20x4   |
 0000           ;             PB1|--------8|D1            |
 0000           ;             PB2|--------9|D2            |
 0000           ;             PB3|-------10|D3            |
 0000           ;             PB4|-------11|D4            |
 0000           ;             PB5|-------12|D5            |
 0000           ;             PB6|-------13|D6            |
 0000           ;             PB7|-------14|D7            |
 0000           ;                |         |              |
 0000           ;                |     --15|+LED          |
 0000           ;                |     --16|-LED          |
 0000           ; _______________|         |______________|
 0000           ; ========================================================*/
 0000           ; //#include<ioM16V.h> //CPU_ATmmega16L
 0000           ; #include <ioM8515V.h>
 0000           ; #define RS_H  asm("sbi 0x15,5")  
 0000           ; //RS设为高电平0xDF 0X12,5
 0000           ; #define RS_L  asm("cbi 0x15,5") 
 0000           ;  //RS设为低电平0x20
 0000           ; #define RW_H  asm("sbi 0x15,6") 
 0000           ;  //RW设为高电平0xBF 
 0000           ; #define RW_L  asm("cbi 0x15,6") 
 0000           ;  //RW设为低电平0x40
 0000           ; #define E_H   asm("sbi 0x15,7") 
 0000           ;  //E设为高电平0x7F
 0000           ; #define E_L   asm("cbi 0x15,7") 
 0000           ;  //E设为低电平0x80
 0000           ; 
 0000           ; //=======================================================
 0000           ; //微秒级延时程序
 0000           ; void delay_us(int time)
 0000           ; {
 0000           L2:
 0000                   .dbline 49
 0000           ;     do
 0000           ;     {
 0000                   .dbline 50
 0000           ;         time--;
 0000 0150              subi R16,1
 0002 1040              sbci R17,0
 0004                   .dbline 51
 0004           ;     } 
 0004           L3:
 0004                   .dbline 52
 0004           ;     while (time > 1);
 0004 81E0              ldi R24,1
 0006 90E0              ldi R25,0
 0008 8017              cp R24,R16
 000A 9107              cpc R25,R17
 000C CCF3              brlt L2
 000E           X0:
 000E                   .dbline -2
 000E           L1:
 000E                   .dbline 0 ; func end
 000E 0895              ret
 0010                   .dbsym r time 16 I
 0010                   .dbend
 0010                   .dbfunc e delay_ms _delay_ms fV
 0010           ;           time -> R20,R21
                        .even
 0010           _delay_ms::
 0010 4A93              st -y,R20
 0012 5A93              st -y,R21
 0014 A801              movw R20,R16
 0016                   .dbline -1
 0016                   .dbline 57
 0016           ; }
 0016           ; //=======================================================
 0016           ; //毫秒级延时程序
 0016           ; void delay_ms(unsigned int time)
 0016           ; {
 0016 05C0              rjmp L7
 0018           L6:
 0018                   .dbline 59
 0018           ;     while(time != 0)
 0018           ;     {         
 0018                   .dbline 60
 0018           ;         delay_us(1000);
 0018 08EE              ldi R16,1000
 001A 13E0              ldi R17,3
 001C F1DF              rcall _delay_us
 001E                   .dbline 61
 001E           ;         time--;
 001E 4150              subi R20,1
 0020 5040              sbci R21,0
 0022                   .dbline 62
 0022           ;     }
 0022           L7:
 0022                   .dbline 58
 0022 4030              cpi R20,0
 0024 4507              cpc R20,R21
 0026 C1F7              brne L6
 0028           X1:
 0028                   .dbline -2
 0028           L5:
 0028                   .dbline 0 ; func end
 0028 5991              ld R21,y+
 002A 4991              ld R20,y+
 002C 0895              ret
 002E                   .dbsym r time 20 i
 002E                   .dbend
 002E                   .dbfunc e Lcd_Busy _Lcd_Busy fc
 002E           ;              r -> R20
                        .even
 002E           _Lcd_Busy::
 002E 4A93              st -y,R20
 0030                   .dbline -1
 0030                   .dbline 68
 0030           ; }
 0030           ; 
 0030           ; //=======================================================
 0030           ; //读取lcd是否内部操作(忙碌)状态
 0030           ; char Lcd_Busy()
 0030           ; {
 0030                   .dbline 70
 0030           ;     char r;
 0030           ;     DDRB = 0x00;       //端口B设为输入方式
 0030 2224              clr R2
 0032 27BA              out 0x17,R2
 0034                   .dbline 71
 0034           ;     E_L;RS_L;RW_H;     //E=0(致能),RS=0(命令),RW=1(读)
 0034 AF98              cbi 0x15,7
 0036                   .dbline 71
 0036 AD98              cbi 0x15,5
 0038                   .dbline 71
 0038 AE9A              sbi 0x15,6
 003A                   .dbline 72
 003A           ;     delay_us(2);       //液晶延时子程序
 003A 02E0              ldi R16,2
 003C 10E0              ldi R17,0
 003E E0DF              rcall _delay_us
 0040                   .dbline 73
 0040           ;     E_H;
 0040 AF9A              sbi 0x15,7
 0042                   .dbline 74
 0042           ;     delay_us(2);       //液晶延时子程序
 0042 02E0              ldi R16,2
 0044 10E0              ldi R17,0
 0046 DCDF              rcall _delay_us
 0048                   .dbline 75
 0048           ;     r = PINB & 0x80;   //读取lcd_data第八位
 0048 46B3              in R20,0x16
 004A 4078              andi R20,128
 004C                   .dbline 76
 004C           ;     E_L;
 004C AF98              cbi 0x15,7
 004E                   .dbline 77
 004E           ;     DDRB=0xff;         //端口B设为输出方式
 004E 8FEF              ldi R24,255
 0050 87BB              out 0x17,R24
 0052                   .dbline 78
 0052           ;     return r;          //读取结果返回
 0052 042F              mov R16,R20
 0054                   .dbline -2
 0054           L9:
 0054                   .dbline 0 ; func end
 0054 4991              ld R20,y+
 0056 0895              ret
 0058                   .dbsym r r 20 c
 0058                   .dbend
 0058                   .dbfunc e Lcd_Command _Lcd_Command fV
 0058           ;        Command -> R10
                        .even
 0058           _Lcd_Command::
 0058 AA92              st -y,R10
 005A A02E              mov R10,R16
 005C                   .dbline -1
 005C                   .dbline 84
 005C           ; }
 005C           ; 
 005C           ; //=======================================================
 005C           ; //向Lcd发送命令程序
 005C           ; void Lcd_Command(unsigned char Command)
 005C           ; {
 005C           L11:
 005C                   .dbline 85
 005C           ;     while(Lcd_Busy()); //判断lcd是否内部操作状态
 005C           L12:
 005C                   .dbline 85
 005C E8DF              rcall _Lcd_Busy
 005E 0023              tst R16
 0060 E9F7              brne L11
 0062           X2:
 0062                   .dbline 86
 0062           ;     E_L;RS_L;RW_L;     //E=0(致能),RS=0(命令),RW=0(写)
 0062 AF98              cbi 0x15,7
 0064                   .dbline 86
 0064 AD98              cbi 0x15,5
 0066                   .dbline 86
 0066 AE98              cbi 0x15,6
 0068                   .dbline 87
 0068           ;     delay_us(2);       //液晶延时子程序
 0068 02E0              ldi R16,2
 006A 10E0              ldi R17,0
 006C C9DF              rcall _delay_us
 006E                   .dbline 88
 006E           ;     E_H;
 006E AF9A              sbi 0x15,7
 0070                   .dbline 89
 0070           ;     PORTB = Command;   //向Lcd发送命令
 0070 A8BA              out 0x18,R10
 0072                   .dbline 90
 0072           ;     delay_us(2);       //液晶延时子程序
 0072 02E0              ldi R16,2
 0074 10E0              ldi R17,0
 0076 C4DF              rcall _delay_us
 0078                   .dbline 91
 0078           ;     E_L;
 0078 AF98              cbi 0x15,7
 007A                   .dbline -2
 007A           L10:
 007A                   .dbline 0 ; func end
 007A A990              ld R10,y+
 007C 0895              ret
 007E                   .dbsym r Command 10 c
 007E                   .dbend
 007E                   .dbfunc e Lcd_Write _Lcd_Write fV
 007E           ;           Data -> R10
                        .even
 007E           _Lcd_Write::
 007E AA92              st -y,R10
 0080 A02E              mov R10,R16
 0082                   .dbline -1
 0082                   .dbline 97
 0082           ; }
 0082           ; 
 0082           ; //=======================================================
 0082           ; //向lcd写入一个字符程序
 0082           ; void Lcd_Write(unsigned char Data)
 0082           ; {
 0082           L15:
 0082                   .dbline 98
 0082           ;     while(Lcd_Busy()); //判断lcd是否内部操作状态
 0082           L16:
 0082                   .dbline 98

⌨️ 快捷键说明

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