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

📄 main.lis

📁 51单片驱动18b20的源代码程序!供设计者参考!
💻 LIS
📖 第 1 页 / 共 4 页
字号:
                        .module main.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\DS18B20\main.c
 0000                   .dbfile D:\DS18B20\lcd.h
 0000                   .dbfunc e LCD_init _LCD_init fV
                        .even
 0000           _LCD_init::
 0000                   .dbline -1
 0000                   .dbline 37
 0000           ; /****************************端口宏定义**************************************/
 0000           ; //LCD1602端口连接按照下面方式连接,RW接地.                                                                                                                                              
 0000           ; #define LCD_EN_PORT   PORTA 
 0000           ; #define LCD_EN_DDR    DDRA 
 0000           ; #define LCD_EN        (1<<PA3)
 0000           ; 
 0000           ; #define LCD_RS_PORT   PORTA 
 0000           ; #define LCD_RS_DDR    DDRA 
 0000           ; #define LCD_RS        (1<<PA1)
 0000           ; 
 0000           ; #define LCD_RW_PORT   PORTA 
 0000           ; #define LCD_RW_DDR    DDRA 
 0000           ; #define LCD_RW        (1<<PA2)
 0000           ; 
 0000           ; #define LCD_DATA_PORT PORTA 
 0000           ; #define LCD_DATA_DDR  DDRA 
 0000           ; #define LCD_DATA_PIN  PINA 
 0000           ; #define LCD_DATA ((1<<4)|(1<<5)|(1<<6)|(1<<7))
 0000           ; /****************************函数申明****************************************/
 0000           ; void LCD_init(void);
 0000           ; void LCD_en_write(void);
 0000           ; void LCD_WriteControl(unsigned char command);
 0000           ; void LCD_WriteData(unsigned char data);
 0000           ; void LCD_Clear(void);
 0000           ; void LCD_Cursor (char row, char column);
 0000           ; void LCD_DisplayCharacter (char Char);
 0000           ; void LCD_DisplayString (char row, char column ,unsigned char *string);
 0000           ; void LCD_DisplayInt (char row, char column ,unsigned int t);
 0000           ; void LCD_Displayasc (char row, char column,  char asc);
 0000           ; void LCD_DisplayLong(char row, char column ,unsigned long t);
 0000           ; void delay_1us(void);
 0000           ; void delay_nus(unsigned int n);
 0000           ; void delay_1ms(void);
 0000           ; void delay_nms(unsigned int n);
 0000           ; /*******************************液晶初始化***********************************/
 0000           ; void LCD_init(void) //液晶初始化 
 0000           ; { 
 0000                   .dbline 38
 0000           ;   LCD_DATA_DDR|=LCD_DATA; //数据口方向为输出 
 0000 8AB3              in R24,0x1a
 0002 806F              ori R24,240
 0004 8ABB              out 0x1a,R24
 0006                   .dbline 39
 0006           ;   LCD_EN_DDR|=LCD_EN; //设置EN方向为输出 
 0006 D39A              sbi 0x1a,3
 0008                   .dbline 40
 0008           ;   LCD_RS_DDR|=LCD_RS; //设置RS方向为输出 
 0008 D19A              sbi 0x1a,1
 000A                   .dbline 41
 000A           ;   LCD_RS_DDR|=LCD_RW; //
 000A D29A              sbi 0x1a,2
 000C                   .dbline 42
 000C           ;   LCD_WriteControl(0x28); 
 000C 08E2              ldi R16,40
 000E 14D0              xcall _LCD_WriteControl
 0010                   .dbline 43
 0010           ;   LCD_en_write(); 
 0010 0DD0              xcall _LCD_en_write
 0012                   .dbline 44
 0012           ;   delay_nus(40); 
 0012 08E2              ldi R16,40
 0014 10E0              ldi R17,0
 0016 1BD1              xcall _delay_nus
 0018                   .dbline 45
 0018           ;   LCD_WriteControl(0x28); //4位显示 
 0018 08E2              ldi R16,40
 001A 0ED0              xcall _LCD_WriteControl
 001C                   .dbline 46
 001C           ;   LCD_WriteControl(0x0c); //显示开 
 001C 0CE0              ldi R16,12
 001E 0CD0              xcall _LCD_WriteControl
 0020                   .dbline 47
 0020           ;   LCD_WriteControl(0x01); //清屏 
 0020 01E0              ldi R16,1
 0022 0AD0              xcall _LCD_WriteControl
 0024                   .dbline 48
 0024           ;   delay_nms(2); 
 0024 02E0              ldi R16,2
 0026 10E0              ldi R17,0
 0028 2BD1              xcall _delay_nms
 002A                   .dbline -2
 002A           L1:
 002A                   .dbline 0 ; func end
 002A 0895              ret
 002C                   .dbend
 002C                   .dbfunc e LCD_en_write _LCD_en_write fV
                        .even
 002C           _LCD_en_write::
 002C                   .dbline -1
 002C                   .dbline 52
 002C           ; } 
 002C           ; /*******************************液晶使能*************************************/
 002C           ; void LCD_en_write(void) //液晶使能 
 002C           ; { 
 002C                   .dbline 53
 002C           ;   LCD_EN_PORT|=LCD_EN; 
 002C DB9A              sbi 0x1b,3
 002E                   .dbline 54
 002E           ;   delay_nus(1); 
 002E 01E0              ldi R16,1
 0030 10E0              ldi R17,0
 0032 0DD1              xcall _delay_nus
 0034                   .dbline 55
 0034           ;   LCD_EN_PORT&=~LCD_EN; 
 0034 DB98              cbi 0x1b,3
 0036                   .dbline -2
 0036           L2:
 0036                   .dbline 0 ; func end
 0036 0895              ret
 0038                   .dbend
 0038                   .dbfunc e LCD_WriteControl _LCD_WriteControl fV
 0038           ;        command -> R20
                        .even
 0038           _LCD_WriteControl::
 0038 4A93              st -y,R20
 003A 402F              mov R20,R16
 003C                   .dbline -1
 003C                   .dbline 59
 003C           ; } 
 003C           ; /*******************************写指令***************************************/
 003C           ; void LCD_WriteControl(unsigned char command) //写指令 
 003C           ; { 
 003C                   .dbline 60
 003C           ;   delay_nus(16); 
 003C 00E1              ldi R16,16
 003E 10E0              ldi R17,0
 0040 06D1              xcall _delay_nus
 0042                   .dbline 61
 0042           ;   LCD_RS_PORT&=~LCD_RS; //RS=0 
 0042 D998              cbi 0x1b,1
 0044                   .dbline 62
 0044           ;   LCD_RW_PORT&=~LCD_RW; //
 0044 DA98              cbi 0x1b,2
 0046                   .dbline 63
 0046           ;   LCD_DATA_PORT&=0X0f; //清高四位 
 0046 8BB3              in R24,0x1b
 0048 8F70              andi R24,15
 004A 8BBB              out 0x1b,R24
 004C                   .dbline 64
 004C           ;   LCD_DATA_PORT|=command&0xf0; //写高四位 
 004C 842F              mov R24,R20
 004E 807F              andi R24,240
 0050 2BB2              in R2,0x1b
 0052 282A              or R2,R24
 0054 2BBA              out 0x1b,R2
 0056                   .dbline 65
 0056           ;   LCD_en_write(); 
 0056 EADF              xcall _LCD_en_write
 0058                   .dbline 66
 0058           ;   command=command<<4; //低四位移到高四位 
 0058 842F              mov R24,R20
 005A 8F70              andi R24,#0x0F
 005C 8295              swap R24
 005E 482F              mov R20,R24
 0060                   .dbline 67
 0060           ;   LCD_DATA_PORT&=0x0f; //清高四位 
 0060 8BB3              in R24,0x1b
 0062 8F70              andi R24,15
 0064 8BBB              out 0x1b,R24
 0066                   .dbline 68
 0066           ;   LCD_DATA_PORT|=command&0xf0; //写低四位 
 0066 842F              mov R24,R20
 0068 807F              andi R24,240
 006A 2BB2              in R2,0x1b
 006C 282A              or R2,R24
 006E 2BBA              out 0x1b,R2
 0070                   .dbline 69
 0070           ;   LCD_en_write(); 
 0070 DDDF              xcall _LCD_en_write
 0072                   .dbline -2
 0072           L3:
 0072                   .dbline 0 ; func end
 0072 4991              ld R20,y+
 0074 0895              ret
 0076                   .dbsym r command 20 c
 0076                   .dbend
 0076                   .dbfunc e LCD_WriteData _LCD_WriteData fV
 0076           ;           data -> R20
                        .even
 0076           _LCD_WriteData::
 0076 4A93              st -y,R20
 0078 402F              mov R20,R16
 007A                   .dbline -1
 007A                   .dbline 73
 007A           ; } 
 007A           ; /*******************************写数据***************************************/
 007A           ; void LCD_WriteData(unsigned char data) //写数据 
 007A           ; { 
 007A                   .dbline 74
 007A           ;   delay_nus(16); 
 007A 00E1              ldi R16,16
 007C 10E0              ldi R17,0
 007E E7D0              xcall _delay_nus
 0080                   .dbline 75
 0080           ;   LCD_RS_PORT|=LCD_RS; //RS=1 
 0080 D99A              sbi 0x1b,1
 0082                   .dbline 76
 0082           ;   LCD_RW_PORT&=~LCD_RW; //
 0082 DA98              cbi 0x1b,2
 0084                   .dbline 77
 0084           ;   LCD_DATA_PORT&=0X0f; //清高四位 
 0084 8BB3              in R24,0x1b
 0086 8F70              andi R24,15
 0088 8BBB              out 0x1b,R24
 008A                   .dbline 78
 008A           ;   LCD_DATA_PORT|=data&0xf0; //写高四位 
 008A 842F              mov R24,R20
 008C 807F              andi R24,240
 008E 2BB2              in R2,0x1b
 0090 282A              or R2,R24
 0092 2BBA              out 0x1b,R2
 0094                   .dbline 79
 0094           ;   LCD_en_write(); 
 0094 CBDF              xcall _LCD_en_write
 0096                   .dbline 80
 0096           ;   data=data<<4; //低四位移到高四位 
 0096 842F              mov R24,R20
 0098 8F70              andi R24,#0x0F
 009A 8295              swap R24
 009C 482F              mov R20,R24
 009E                   .dbline 81
 009E           ;   LCD_DATA_PORT&=0X0f; //清高四位 
 009E 8BB3              in R24,0x1b
 00A0 8F70              andi R24,15
 00A2 8BBB              out 0x1b,R24
 00A4                   .dbline 82
 00A4           ;   LCD_DATA_PORT|=data&0xf0; //写低四位 
 00A4 842F              mov R24,R20
 00A6 807F              andi R24,240
 00A8 2BB2              in R2,0x1b
 00AA 282A              or R2,R24
 00AC 2BBA              out 0x1b,R2
 00AE                   .dbline 83
 00AE           ;   LCD_en_write(); 
 00AE BEDF              xcall _LCD_en_write
 00B0                   .dbline -2
 00B0           L4:
 00B0                   .dbline 0 ; func end
 00B0 4991              ld R20,y+
 00B2 0895              ret
 00B4                   .dbsym r data 20 c
 00B4                   .dbend
 00B4                   .dbfunc e LCD_Clear _LCD_Clear fV
                        .even
 00B4           _LCD_Clear::
 00B4                   .dbline -1
 00B4                   .dbline 88
 00B4           ; }
 00B4           ; 
 00B4           ; /*******************************清屏*****************************************/
 00B4           ; void LCD_Clear(void)
 00B4           ; {
 00B4                   .dbline 89
 00B4           ; LCD_WriteControl(0x01);
 00B4 01E0              ldi R16,1
 00B6 C0DF              xcall _LCD_WriteControl
 00B8                   .dbline -2
 00B8           L5:
 00B8                   .dbline 0 ; func end
 00B8 0895              ret
 00BA                   .dbend
 00BA                   .dbfunc e LCD_Cursor _LCD_Cursor fV
 00BA           ;         column -> R20
 00BA           ;            row -> R10
                        .even
 00BA           _LCD_Cursor::
 00BA 0E940000          xcall push_xgsetF00C
 00BE 422F              mov R20,R18
 00C0 A02E              mov R10,R16
 00C2                   .dbline -1
 00C2                   .dbline 93
 00C2           ; }
 00C2           ; 
 00C2           ; void LCD_Cursor (char row, char column)
 00C2           ; {
 00C2                   .dbline 94
 00C2           ;   switch (row)
 00C2 6A2D              mov R22,R10
 00C4 7727              clr R23
 00C6 6130              cpi R22,1
 00C8 E0E0              ldi R30,0
 00CA 7E07              cpc R23,R30
 00CC 29F0              breq L10
 00CE           X0:
 00CE 6230              cpi R22,2
 00D0 E0E0              ldi R30,0
 00D2 7E07              cpc R23,R30
 00D4 31F0              breq L11
 00D6           X1:
 00D6 09C0              xjmp L8
 00D8           L10:
 00D8                   .dbline 96
 00D8           ;    {
 00D8           ;     case 1: LCD_WriteControl (0x80 + column - 1); break;
 00D8 042F              mov R16,R20
 00DA 0058              subi R16,128    ; addi 128
 00DC 0150              subi R16,1
 00DE ACDF              xcall _LCD_WriteControl
 00E0                   .dbline 96
 00E0 04C0              xjmp L8
 00E2           L11:
 00E2                   .dbline 97
 00E2           ;     case 2: LCD_WriteControl (0xc0 + column - 1); break;
 00E2 042F              mov R16,R20
 00E4 0054              subi R16,64    ; addi 192
 00E6 0150              subi R16,1
 00E8 A7DF              xcall _LCD_WriteControl
 00EA                   .dbline 97
 00EA                   .dbline 98
 00EA           ;     default: break;
 00EA           L8:
 00EA                   .dbline -2
 00EA           L6:
 00EA                   .dbline 0 ; func end
 00EA 0C940000          xjmp pop_xgsetF00C
 00EE                   .dbsym r column 20 c
 00EE                   .dbsym r row 10 c
 00EE                   .dbend

⌨️ 快捷键说明

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