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

📄 162.lis

📁 结合温度传感器的实现测温度的C程序 这个小项目用到了比较多的AVR单片机的资源 是个不错的学习例程
💻 LIS
字号:
                        .module _162.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\时钟芯片\1302\1302-162\162.c
 0000                   .dbfunc e delay_ms _delay_ms fV
 0000           ;              a -> R20
 0000           ;              b -> R22
 0000           ;              n -> R16
                        .even
 0000           _delay_ms::
 0000 00D0              rcall push_gset2
 0002                   .dbline -1
 0002                   .dbline 5
 0002           ; #include <io8515v.h>
 0002           ; #include <macros.h>
 0002           ; #include <162-1302.h>
 0002           ; void delay_ms(unsigned char n)
 0002           ;       {
 0002                   .dbline 7
 0002           ;       unsigned char a, b;
 0002           ;       for (a = 1; a<n; a++)
 0002 41E0              ldi R20,1
 0004 06C0              rjmp L5
 0006           L2:
 0006                   .dbline 8
 0006           ;               for (b = 1; b; b++)
 0006 61E0              ldi R22,1
 0008 01C0              rjmp L9
 000A           L6:
 000A                   .dbline 9
 000A           L7:
 000A                   .dbline 8
 000A 6395              inc R22
 000C           L9:
 000C                   .dbline 8
 000C 6623              tst R22
 000E E9F7              brne L6
 0010           L3:
 0010                   .dbline 7
 0010 4395              inc R20
 0012           L5:
 0012                   .dbline 7
 0012 4017              cp R20,R16
 0014 C0F3              brlo L2
 0016                   .dbline -2
 0016           L1:
 0016 00D0              rcall pop_gset2
 0018                   .dbline 0 ; func end
 0018 0895              ret
 001A                   .dbsym r a 20 c
 001A                   .dbsym r b 22 c
 001A                   .dbsym r n 16 c
 001A                   .dbend
 001A                   .dbfunc e delay_us _delay_us fV
 001A           ;              b -> R20
 001A           ;              n -> R16,R17
                        .even
 001A           _delay_us::
 001A 00D0              rcall push_gset1
 001C                   .dbline -1
 001C                   .dbline 12
 001C           ;                       ;
 001C           ;       }
 001C           ; void delay_us(unsigned int n)
 001C           ;       {
 001C                   .dbline 14
 001C           ;       unsigned char  b;
 001C           ;               for (b = 1; b<n; b++)
 001C 41E0              ldi R20,1
 001E 01C0              rjmp L14
 0020           L11:
 0020                   .dbline 15
 0020           L12:
 0020                   .dbline 14
 0020 4395              inc R20
 0022           L14:
 0022                   .dbline 14
 0022 242E              mov R2,R20
 0024 3324              clr R3
 0026 2016              cp R2,R16
 0028 3106              cpc R3,R17
 002A D0F3              brlo L11
 002C                   .dbline -2
 002C           L10:
 002C 00D0              rcall pop_gset1
 002E                   .dbline 0 ; func end
 002E 0895              ret
 0030                   .dbsym r b 20 c
 0030                   .dbsym r n 16 i
 0030                   .dbend
 0030                   .dbfunc e LCD_wait _LCD_wait fV
                        .even
 0030           _LCD_wait::
 0030                   .dbline -1
 0030                   .dbline 19
 0030           ;                       ;
 0030           ;       }
 0030           ;       
 0030           ; void LCD_wait(void)                       //等待LCD空闲
 0030           ; {
 0030                   .dbline 20
 0030           ; LCD_DATA_PORT&=~BIT(7);
 0030 DF98              cbi 0x1b,7
 0032                   .dbline 21
 0032           ; PORTB&=~BIT(0);
 0032 C098              cbi 0x18,0
 0034                   .dbline 22
 0034           ; PORTB|=BIT(1);
 0034 C19A              sbi 0x18,1
 0036                   .dbline 23
 0036           ; PORTB|=BIT(2);
 0036 C29A              sbi 0x18,2
 0038           L16:
 0038                   .dbline 24
 0038           L17:
 0038                   .dbline 24
 0038           ; while(!(LCD_DATA_PIN &0x80)==0);
 0038 89B3              in R24,0x19
 003A 8078              andi R24,128
 003C 19F4              brne L19
 003E 01E0              ldi R16,1
 0040 10E0              ldi R17,0
 0042 02C0              rjmp L20
 0044           L19:
 0044 0027              clr R16
 0046 1127              clr R17
 0048           L20:
 0048 0030              cpi R16,0
 004A 0107              cpc R16,R17
 004C A9F3              breq L16
 004E           X0:
 004E                   .dbline 25
 004E           ; LCD_DATA_DDR|=0xFF;
 004E 8AB3              in R24,0x1a
 0050 8F6F              ori R24,255
 0052 8ABB              out 0x1a,R24
 0054                   .dbline 26
 0054           ; PORTB&=~BIT(2);
 0054 C298              cbi 0x18,2
 0056                   .dbline -2
 0056           L15:
 0056                   .dbline 0 ; func end
 0056 0895              ret
 0058                   .dbend
 0058                   .dbfunc e command_enable _command_enable fV
                        .even
 0058           _command_enable::
 0058                   .dbline -1
 0058                   .dbline 30
 0058           ; }
 0058           ; 
 0058           ; void command_enable()                         //写指令使能
 0058           ; { 
 0058                   .dbline 31
 0058           ; PORTB&=~(BIT(0)|BIT(1));
 0058 88B3              in R24,0x18
 005A 8C7F              andi R24,252
 005C 88BB              out 0x18,R24
 005E                   .dbline 32
 005E           ; PORTB|=BIT(2);
 005E C29A              sbi 0x18,2
 0060                   .dbline 33
 0060           ; asm("nop");
 0060 0000              nop
 0062                   .dbline 34
 0062           ; PORTB&=~BIT(2);
 0062 C298              cbi 0x18,2
 0064                   .dbline -2
 0064           L21:
 0064                   .dbline 0 ; func end
 0064 0895              ret
 0066                   .dbend
 0066                   .dbfunc e data_enable _data_enable fV
                        .even
 0066           _data_enable::
 0066                   .dbline -1
 0066                   .dbline 37
 0066           ; }
 0066           ; void data_enable()                            //写数据使能
 0066           ; {
 0066                   .dbline 38
 0066           ; PORTB|=BIT(0);
 0066 C09A              sbi 0x18,0
 0068                   .dbline 39
 0068           ; PORTB&=~BIT(1);
 0068 C198              cbi 0x18,1
 006A                   .dbline 40
 006A           ; PORTB|=BIT(2);
 006A C29A              sbi 0x18,2
 006C                   .dbline 41
 006C           ; asm("nop");
 006C 0000              nop
 006E                   .dbline 42
 006E           ; PORTB&=~BIT(2);
 006E C298              cbi 0x18,2
 0070                   .dbline -2
 0070           L22:
 0070                   .dbline 0 ; func end
 0070 0895              ret
 0072                   .dbend
 0072                   .dbfunc e LCD_set_xy _LCD_set_xy fV
 0072           ;        address -> R20
 0072           ;              y -> R20
 0072           ;              x -> R22
                        .even
 0072           _LCD_set_xy::
 0072 00D0              rcall push_gset2
 0074 422F              mov R20,R18
 0076 602F              mov R22,R16
 0078                   .dbline -1
 0078                   .dbline 50
 0078           ; }
 0078           ; 
 0078           ; /*设置LCD显示的起始位置输入参数:x、y
 0078           ; 显示字符串的位置,X:0-15,Y:0-1
 0078           ; LCD第一行显示寄存器地址:0X80-0X8F
 0078           ; LCD第一行显示寄存器地址:0XC0-0XCF*/
 0078           ; void LCD_set_xy( unsigned char x, unsigned char y )
 0078           ; {
 0078                   .dbline 52
 0078           ; unsigned char address;
 0078           ; if (y==0)
 0078 4423              tst R20
 007A 19F4              brne L24
 007C                   .dbline 53
 007C           ;   address=0x80+x;
 007C 462F              mov R20,R22
 007E 4058              subi R20,128    ; addi 128
 0080 02C0              rjmp L25
 0082           L24:
 0082                   .dbline 55
 0082           ;  else
 0082           ;  address=0xC0+x;
 0082 462F              mov R20,R22
 0084 4054              subi R20,64    ; addi 192
 0086           L25:
 0086                   .dbline 56
 0086           ; LCD_DATA_PORT=address;           //输入开始显示地址
 0086 4BBB              out 0x1b,R20
 0088                   .dbline 57
 0088           ; command_enable();
 0088 E7DF              rcall _command_enable
 008A                   .dbline 58
 008A           ; delay_ms(10);
 008A 0AE0              ldi R16,10
 008C B9DF              rcall _delay_ms
 008E                   .dbline -2
 008E           L23:
 008E 00D0              rcall pop_gset2
 0090                   .dbline 0 ; func end
 0090 0895              ret
 0092                   .dbsym r address 20 c
 0092                   .dbsym r y 20 c
 0092                   .dbsym r x 22 c
 0092                   .dbend
 0092                   .dbfunc e LCD_write_char _LCD_write_char fV
 0092           ;           data -> R20
                        .even
 0092           _LCD_write_char::
 0092 00D0              rcall push_gset1
 0094 402F              mov R20,R16
 0096                   .dbline -1
 0096                   .dbline 62
 0096           ; }
 0096           ; //写一个字符
 0096           ; void LCD_write_char(unsigned char data)
 0096           ; {
 0096                   .dbline 63
 0096           ; LCD_DATA_PORT=data;                   
 0096 4BBB              out 0x1b,R20
 0098                   .dbline 64
 0098           ; data_enable();
 0098 E6DF              rcall _data_enable
 009A                   .dbline 65
 009A           ; delay_ms(10);
 009A 0AE0              ldi R16,10
 009C B1DF              rcall _delay_ms
 009E                   .dbline -2
 009E           L26:
 009E 00D0              rcall pop_gset1
 00A0                   .dbline 0 ; func end
 00A0 0895              ret
 00A2                   .dbsym r data 20 c
 00A2                   .dbend
 00A2                   .dbfunc e LCD_write_string _LCD_write_string fV
 00A2           ;              s -> R20,R21
 00A2           ;              y -> R10
 00A2           ;              x -> R22
                        .even
 00A2           _LCD_write_string::
 00A2 00D0              rcall push_gset3
 00A4 A22E              mov R10,R18
 00A6 602F              mov R22,R16
 00A8 4E81              ldd R20,y+6
 00AA 5F81              ldd R21,y+7
 00AC                   .dbline -1
 00AC                   .dbline 69
 00AC           ; }
 00AC           ; //写一字符串
 00AC           ; void LCD_write_string(unsigned char x, unsigned char y,unsigned char *s)
 00AC           ; {
 00AC                   .dbline 70
 00AC           ; LCD_set_xy(x,y);
 00AC 2A2D              mov R18,R10
 00AE 062F              mov R16,R22
 00B0 E0DF              rcall _LCD_set_xy
 00B2 06C0              rjmp L29
 00B4           L28:
 00B4                   .dbline 72
 00B4                   .dbline 73
 00B4 E42F              mov R30,R20
 00B6 F52F              mov R31,R21
 00B8 0081              ldd R16,z+0
 00BA EBDF              rcall _LCD_write_char
 00BC                   .dbline 74
 00BC 4F5F              subi R20,255  ; offset = 1
 00BE 5F4F              sbci R21,255
 00C0                   .dbline 75
 00C0           L29:
 00C0                   .dbline 71
 00C0           ; while(*s)
 00C0 E42F              mov R30,R20
 00C2 F52F              mov R31,R21
 00C4 2080              ldd R2,z+0
 00C6 2220              tst R2
 00C8 A9F7              brne L28
 00CA                   .dbline -2
 00CA           L27:
 00CA 00D0              rcall pop_gset3
 00CC                   .dbline 0 ; func end
 00CC 0895              ret
 00CE                   .dbsym r s 20 pc
 00CE                   .dbsym r y 10 c
 00CE                   .dbsym r x 22 c
 00CE                   .dbend
 00CE                   .dbfunc e init_lcd _init_lcd fV
                        .even
 00CE           _init_lcd::
 00CE                   .dbline -1
 00CE                   .dbline 80
 00CE           ;       {
 00CE           ;       LCD_write_char(*s);
 00CE           ;       s++;
 00CE           ;       }
 00CE           ; 
 00CE           ; }
 00CE           ; 
 00CE           ; void init_lcd()                       //初始化
 00CE           ; {
 00CE                   .dbline 81
 00CE           ; delay_ms(180);                                                //等待30ms以上
 00CE 04EB              ldi R16,180
 00D0 97DF              rcall _delay_ms
 00D2                   .dbline 82
 00D2           ; LCD_DATA_PORT=0x38;                   //8位2行5×7点阵
 00D2 88E3              ldi R24,56
 00D4 8BBB              out 0x1b,R24
 00D6                   .dbline 83
 00D6           ; command_enable();
 00D6 C0DF              rcall _command_enable
 00D8                   .dbline 84
 00D8           ; delay_us(100);                                        //等待39us以上
 00D8 04E6              ldi R16,100
 00DA 10E0              ldi R17,0
 00DC 9EDF              rcall _delay_us
 00DE                   .dbline 85
 00DE           ; LCD_DATA_PORT=0x0C;                   //显示器开、光标开、闪烁关
 00DE 8CE0              ldi R24,12
 00E0 8BBB              out 0x1b,R24
 00E2                   .dbline 86
 00E2           ; command_enable();
 00E2 BADF              rcall _command_enable
 00E4                   .dbline 87
 00E4           ; delay_us(100);                                        //等待39us以上
 00E4 04E6              ldi R16,100
 00E6 10E0              ldi R17,0
 00E8 98DF              rcall _delay_us
 00EA                   .dbline 88
 00EA           ; LCD_DATA_PORT=0x01;                   //清屏
 00EA 81E0              ldi R24,1
 00EC 8BBB              out 0x1b,R24
 00EE                   .dbline 89
 00EE           ; command_enable();
 00EE B4DF              rcall _command_enable
 00F0                   .dbline 90
 00F0           ; delay_ms(10);                                         //等待1.53ms以上
 00F0 0AE0              ldi R16,10
 00F2 86DF              rcall _delay_ms
 00F4                   .dbline 91
 00F4           ; LCD_DATA_PORT=0x06;                   //输入方式
 00F4 86E0              ldi R24,6
 00F6 8BBB              out 0x1b,R24
 00F8                   .dbline 92
 00F8           ; command_enable();
 00F8 AFDF              rcall _command_enable
 00FA                   .dbline 93
 00FA           ; delay_ms(180);                                        //初始化完毕
 00FA 04EB              ldi R16,180
 00FC 81DF              rcall _delay_ms
 00FE                   .dbline -2
 00FE           L31:
 00FE                   .dbline 0 ; func end
 00FE 0895              ret
 0100                   .dbend

⌨️ 快捷键说明

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