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

📄 1.lst

📁 在车头有4个光敏电阻做的寻找光源的小车程序 具有笔战功能 ICC-AVR ATmega16L 做的控制器 找到光源后停车
💻 LST
📖 第 1 页 / 共 5 页
字号:
__start:
__text_start:
      4C E5CF      LDI	R28,0x5F
      4D E0D4      LDI	R29,4
      4E BFCD      OUT	0x3D,R28
      4F BFDE      OUT	0x3E,R29
      50 51C0      SUBI	R28,0x10
      51 40D0      SBCI	R29,0
      52 EA0A      LDI	R16,0xAA
      53 8308      STD	Y+0,R16
      54 2400      CLR	R0
      55 EAE4      LDI	R30,0xA4
      56 E0F0      LDI	R31,0
      57 E010      LDI	R17,0
      58 3BE7      CPI	R30,0xB7
      59 07F1      CPC	R31,R17
      5A F011      BEQ	0x005D
      5B 9201      ST	R0,Z+
      5C CFFB      RJMP	0x0058
      5D 8300      STD	Z+0,R16
      5E E5E4      LDI	R30,0x54
      5F E0F0      LDI	R31,0
      60 E6A0      LDI	R26,0x60
      61 E0B0      LDI	R27,0
      62 E010      LDI	R17,0
      63 E000      LDI	R16,0
      64 BF0B      OUT	0x3B,R16
      65 39E8      CPI	R30,0x98
      66 07F1      CPC	R31,R17
      67 F021      BEQ	0x006C
      68 95C8      LPM
      69 9631      ADIW	R30,1
      6A 920D      ST	R0,X+
      6B CFF9      RJMP	0x0065
      6C 940E 0478 CALL	_main
_exit:
      6E CFFF      RJMP	_exit
FILE: C:\DOCUME~1\qiuqiu\桌面\测试\1\lcd.h
(0001) 
(0002) #define LCD_EN_PORT    PORTB   //以下2个要设为同一个口
(0003) #define LCD_EN_DDR     DDRB
(0004) #define LCD_RS_PORT    PORTB   //以下2个要设为同一个口
(0005) #define LCD_RS_DDR     DDRB
(0006) #define LCD_DATA_PORT  PORTB  //以下3个要设为同一个口
(0007) #define LCD_DATA_DDR   DDRB   //一定要用高4位
(0008) #define LCD_DATA_PIN   PINB
(0009) 
(0010) #define LCD_RS         (1<<PB7) //0x80   portB7       out 
(0011) #define LCD_EN         (1<<PB6) //0x60   portB6       out 
(0012) #define LCD_DATA       ((1<<PB5)|(1<<PB4)|(1<<PB3)|(1<<PB2)) 
(0013) 
(0014) unsigned char tab[]={'0','1','2','3','4','5','6','7','8','9'};
(0015) /*--------------------------------------------------------------------------------------------------
(0016) 函数声明    
(0017) --------------------------------------------------------------------------------------------------*/
(0018) void LCD_init(void);
(0019) void LCD_en_write(void);
(0020) void LCD_write_command(unsigned  char command) ;
(0021) void LCD_write_data(unsigned char data);
(0022) void LCD_set_xy (unsigned char x, unsigned char y);
(0023) void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s);
(0024) void LCD_write_char(unsigned char X,unsigned char Y,unsigned char data);
(0025) 
(0026) /*补充*/
(0027) void LCD_write_shu(unsigned int x,unsigned int t,unsigned int n);
(0028) /*补充*/
(0029) 
(0030) void delay_nus(unsigned int n);
(0031) void delay_nms(unsigned int n);
(0032) 
(0033) void LCD_init(void)         //液晶初始化
(0034) {
(0035)   LCD_DATA_DDR|=LCD_DATA;   //数据口方向为输出
_LCD_init:
      6F B387      IN	R24,0x17
      70 638C      ORI	R24,0x3C
      71 BB87      OUT	0x17,R24
(0036)   LCD_EN_DDR|=LCD_EN;       //设置EN方向为输出
      72 9ABE      SBI	0x17,6
(0037)   LCD_RS_DDR|=LCD_RS;       //设置RS方向为输出
      73 9ABF      SBI	0x17,7
(0038)   LCD_write_command(0x28); 
      74 E208      LDI	R16,0x28
      75 D014      RCALL	_LCD_write_command
(0039)   LCD_en_write();
      76 D00D      RCALL	_LCD_en_write
(0040)   delay_nus(40);
      77 E208      LDI	R16,0x28
      78 E010      LDI	R17,0
      79 D0F8      RCALL	_delay_nus
(0041)   LCD_write_command(0x28);  //4位显示
      7A E208      LDI	R16,0x28
      7B D00E      RCALL	_LCD_write_command
(0042)   LCD_write_command(0x0c);  //显示开
      7C E00C      LDI	R16,0xC
      7D D00C      RCALL	_LCD_write_command
(0043)   LCD_write_command(0x01);  //清屏
      7E E001      LDI	R16,1
      7F D00A      RCALL	_LCD_write_command
(0044)   delay_nms(2);
      80 E002      LDI	R16,2
      81 E010      LDI	R17,0
      82 D107      RCALL	_delay_nms
      83 9508      RET
(0045) }
(0046) 
(0047) void LCD_en_write(void)  //液晶使能
(0048) {
(0049)   LCD_EN_PORT|=LCD_EN;
_LCD_en_write:
      84 9AC6      SBI	0x18,6
(0050)   delay_nus(1);
      85 E001      LDI	R16,1
      86 E010      LDI	R17,0
      87 D0EA      RCALL	_delay_nus
(0051)   LCD_EN_PORT&=~LCD_EN;
      88 98C6      CBI	0x18,6
      89 9508      RET
_LCD_write_command:
  temp                 --> R22
  command              --> R20
      8A 934A      ST	R20,-Y
      8B 936A      ST	R22,-Y
      8C 2F40      MOV	R20,R16
(0052) }
(0053) 
(0054) void LCD_write_command(unsigned char command) //写指令 
(0055) { 
(0056)   unsigned char temp;
(0057)   command=((command&0b10000000)>>7)|((command&0b01000000)>>5)|((command&0b00100000)>>3)|((command&0b00010000)>>1)|((command&0b00001000)<<1)|((command&0b00000100)<<3)|((command&0b00000010)<<5)|((command&0b00000001)<<7);
      8D 2F84      MOV	R24,R20
      8E 7480      ANDI	R24,0x40
      8F 2E28      MOV	R2,R24
      90 9426      LSR	R2
      91 9426      LSR	R2
      92 9426      LSR	R2
      93 9426      LSR	R2
      94 9426      LSR	R2
      95 2F84      MOV	R24,R20
      96 7880      ANDI	R24,0x80
      97 2E38      MOV	R3,R24
      98 9436      LSR	R3
      99 9436      LSR	R3
      9A 9436      LSR	R3
      9B 9436      LSR	R3
      9C 9436      LSR	R3
      9D 9436      LSR	R3
      9E 9436      LSR	R3
      9F 2832      OR	R3,R2
      A0 2F84      MOV	R24,R20
      A1 7280      ANDI	R24,0x20
      A2 9586      LSR	R24
      A3 9586      LSR	R24
      A4 9586      LSR	R24
      A5 2A38      OR	R3,R24
      A6 2F84      MOV	R24,R20
      A7 7180      ANDI	R24,0x10
      A8 9586      LSR	R24
      A9 2A38      OR	R3,R24
      AA 2F84      MOV	R24,R20
      AB 7088      ANDI	R24,0x8
      AC 0F88      LSL	R24
      AD 2A38      OR	R3,R24
      AE 2F84      MOV	R24,R20
      AF 7084      ANDI	R24,4
      B0 0F88      LSL	R24
      B1 0F88      LSL	R24
      B2 0F88      LSL	R24
      B3 2A38      OR	R3,R24
      B4 2F84      MOV	R24,R20
      B5 7082      ANDI	R24,2
      B6 0F88      LSL	R24
      B7 0F88      LSL	R24
      B8 0F88      LSL	R24
      B9 0F88      LSL	R24
      BA 0F88      LSL	R24
      BB 2A38      OR	R3,R24
      BC 2F84      MOV	R24,R20
      BD 7081      ANDI	R24,1
      BE 0F88      LSL	R24
      BF 0F88      LSL	R24
      C0 0F88      LSL	R24
      C1 0F88      LSL	R24
      C2 0F88      LSL	R24
      C3 0F88      LSL	R24
      C4 0F88      LSL	R24
      C5 2A38      OR	R3,R24
      C6 2D43      MOV	R20,R3
(0058)   delay_nus(16);
      C7 E100      LDI	R16,0x10
      C8 E010      LDI	R17,0
      C9 D0A8      RCALL	_delay_nus
(0059)   temp=command<<2; 
      CA 2F64      MOV	R22,R20
      CB 0F66      LSL	R22
      CC 0F66      LSL	R22
(0060)   LCD_RS_PORT&=~LCD_RS;        //RS=0 
      CD 98C7      CBI	0x18,7
(0061)   LCD_DATA_PORT&=0b11000011;         //清高四位 
      CE B388      IN	R24,0x18
      CF 7C83      ANDI	R24,0xC3
      D0 BB88      OUT	0x18,R24
(0062)   LCD_DATA_PORT|=temp&0b00111100; //写高四位 
      D1 2F86      MOV	R24,R22
      D2 738C      ANDI	R24,0x3C
      D3 B228      IN	R2,0x18
      D4 2A28      OR	R2,R24
      D5 BA28      OUT	0x18,R2
(0063)   LCD_en_write(); 
      D6 DFAD      RCALL	_LCD_en_write
(0064)   command=command>>2;          //低四位移到高四位 
      D7 9546      LSR	R20
      D8 9546      LSR	R20
(0065)   LCD_DATA_PORT&=0b11000011;         //清高四位 
      D9 B388      IN	R24,0x18
      DA 7C83      ANDI	R24,0xC3
      DB BB88      OUT	0x18,R24
(0066)   LCD_DATA_PORT|=command&0b00111100; //写低四位 
      DC 2F84      MOV	R24,R20
      DD 738C      ANDI	R24,0x3C
      DE B228      IN	R2,0x18
      DF 2A28      OR	R2,R24
      E0 BA28      OUT	0x18,R2
(0067)   LCD_en_write(); 
      E1 DFA2      RCALL	_LCD_en_write
      E2 9169      LD	R22,Y+
      E3 9149      LD	R20,Y+
      E4 9508      RET
_LCD_write_data:
  temp                 --> R22
  data                 --> R20
      E5 934A      ST	R20,-Y
      E6 936A      ST	R22,-Y
      E7 2F40      MOV	R20,R16
(0068)    
(0069) } 
(0070) 
(0071) void LCD_write_data(unsigned char data) //写数据 
(0072) { 
(0073)   unsigned char temp;
(0074)   data=((data&0b10000000)>>7)|((data&0b01000000)>>5)|((data&0b00100000)>>3)|((data&0b00010000)>>1)|((data&0b00001000)<<1)|((data&0b00000100)<<3)|((data&0b00000010)<<5)|((data&0b00000001)<<7);
      E8 2F84      MOV	R24,R20
      E9 7480      ANDI	R24,0x40
      EA 2E28      MOV	R2,R24
      EB 9426      LSR	R2
      EC 9426      LSR	R2
      ED 9426      LSR	R2
      EE 9426      LSR	R2
      EF 9426      LSR	R2
      F0 2F84      MOV	R24,R20
      F1 7880      ANDI	R24,0x80
      F2 2E38      MOV	R3,R24
      F3 9436      LSR	R3
      F4 9436      LSR	R3
      F5 9436      LSR	R3
      F6 9436      LSR	R3
      F7 9436      LSR	R3
      F8 9436      LSR	R3
      F9 9436      LSR	R3
      FA 2832      OR	R3,R2
      FB 2F84      MOV	R24,R20
      FC 7280      ANDI	R24,0x20
      FD 9586      LSR	R24
      FE 9586      LSR	R24
      FF 9586      LSR	R24
     100 2A38      OR	R3,R24
     101 2F84      MOV	R24,R20
     102 7180      ANDI	R24,0x10
     103 9586      LSR	R24
     104 2A38      OR	R3,R24
     105 2F84      MOV	R24,R20
     106 7088      ANDI	R24,0x8
     107 0F88      LSL	R24
     108 2A38      OR	R3,R24
     109 2F84      MOV	R24,R20
     10A 7084      ANDI	R24,4
     10B 0F88      LSL	R24
     10C 0F88      LSL	R24
     10D 0F88      LSL	R24
     10E 2A38      OR	R3,R24
     10F 2F84      MOV	R24,R20
     110 7082      ANDI	R24,2
     111 0F88      LSL	R24
     112 0F88      LSL	R24
     113 0F88      LSL	R24
     114 0F88      LSL	R24
     115 0F88      LSL	R24
     116 2A38      OR	R3,R24
     117 2F84      MOV	R24,R20
     118 7081      ANDI	R24,1
     119 0F88      LSL	R24
     11A 0F88      LSL	R24
     11B 0F88      LSL	R24
     11C 0F88      LSL	R24
     11D 0F88      LSL	R24
     11E 0F88      LSL	R24
     11F 0F88      LSL	R24
     120 2A38      OR	R3,R24
     121 2D43      MOV	R20,R3
(0075)   delay_nus(16); 
     122 E100      LDI	R16,0x10
     123 E010      LDI	R17,0
     124 D04D      RCALL	_delay_nus
(0076)   temp=data<<2;
     125 2F64      MOV	R22,R20
     126 0F66      LSL	R22
     127 0F66      LSL	R22
(0077)   LCD_RS_PORT|=LCD_RS;       //RS=1 
     128 9AC7      SBI	0x18,7
(0078)   LCD_DATA_PORT&=0b11000011;       //清高四位 
     129 B388      IN	R24,0x18
     12A 7C83      ANDI	R24,0xC3
     12B BB88      OUT	0x18,R24
(0079)   LCD_DATA_PORT|=temp&0b00111100;  //写高四位 
     12C 2F86      MOV	R24,R22
     12D 738C      ANDI	R24,0x3C
     12E B228      IN	R2,0x18
     12F 2A28      OR	R2,R24
     130 BA28      OUT	0x18,R2
(0080)   LCD_en_write(); 
     131 DF52      RCALL	_LCD_en_write
(0081)   data=data>>2;               //低四位移到高四位 
     132 9546      LSR	R20
     133 9546      LSR	R20
(0082)   LCD_DATA_PORT&=0b11000011;        //清高四位 
     134 B388      IN	R24,0x18
     135 7C83      ANDI	R24,0xC3
     136 BB88      OUT	0x18,R24
(0083)   LCD_DATA_PORT|=data&0b00111100;   //写低四位 
     137 2F84      MOV	R24,R20
     138 738C      ANDI	R24,0x3C
     139 B228      IN	R2,0x18
     13A 2A28      OR	R2,R24
     13B BA28      OUT	0x18,R2
(0084)   LCD_en_write(); 
     13C DF47      RCALL	_LCD_en_write
     13D 9169      LD	R22,Y+
     13E 9149      LD	R20,Y+
     13F 9508      RET
_LCD_set_xy:
  address              --> R20
  y                    --> R10
  x                    --> R22
     140 940E 064E CALL	push_xgsetF00C
     142 2EA2      MOV	R10,R18
     143 2F60      MOV	R22,R16
(0085) }
(0086) 
(0087) 
(0088) void LCD_set_xy( unsigned char x, unsigned char y )  //写地址函数
(0089) {
(0090)     unsigned char address;
(0091)     if (y == 0) address = 0x80 + x;
     144 20AA      TST	R10
     145 F419      BNE	0x0149
     146 2F46      MOV	R20,R22
     147 5840      SUBI	R20,0x80
     148 C002      RJMP	0x014B
(0092)     else   address = 0xc0 + x;
     149 2F46      MOV	R20,R22
     14A 5440      SUBI	R20,0x40
(0093)     LCD_write_command( address);
     14B 2F04      MOV	R16,R20
     14C DF3D      RCALL	_LCD_write_command
     14D 940C 0655 JMP	pop_xgsetF00C
_LCD_write_string:
  s                    --> R20
  Y                    --> R12
  X                    --> R10
     14F 940E 065C CALL	push_xgset303C
     151 2EC2      MOV	R12,R18
     152 2EA0      MOV	R10,R16
     153 814E      LDD	R20,Y+6
     154 815F      LDD	R21,Y+7
(0094) }
(0095)   
(0096) void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s) //列x=0~15,行y=0,1
(0097) {
(0098)     LCD_set_xy( X, Y ); //写地址    
     155 2D2C      MOV	R18,R12
     156 2D0A      MOV	R16,R10
     157 DFE8      RCALL	_LCD_set_xy
     158 C005      RJMP	0x015E
(0099)     while (*s)  // 写显示字符
(0100)     {
(0101)       LCD_write_data( *s );
     159 01FA      MOVW	R30,R20
     15A 8100      LDD	R16,Z+0
     15B DF89      RCALL	_LCD_write_data
(0102)       s ++;
     15C 5F4F      SUBI	R20,0xFF
     15D 4F5F      SBCI	R21,0xFF
     15E 01FA      MOVW	R30,R20
     15F 8020      LDD	R2,Z+0
     160 2022      TST	R2
     161 F7B9      BNE	0x0159
     162 940C 0663 JMP	pop_xgset303C
_LCD_write_char:
  data                 --> Y,+2
  Y                    --> R12
  X                    --> R10
     164 92AA      ST	R10,-Y
     165 92CA      ST	R12,-Y
     166 2EC2      MOV	R12,R18
     167 2EA0      MOV	R10,R16
(0103)     }
(0104)       
(0105) }
(0106) 
(0107) void LCD_write_char(unsigned char X,unsigned char Y,unsigned char data) //列x=0~15,行y=0,1
(0108) {
(0109)   LCD_set_xy( X, Y ); //写地址
     168 2D2C      MOV	R18,R12
     169 2D0A      MOV	R16,R10
     16A DFD5      RCALL	_LCD_set_xy
(0110)   LCD_write_data( data);
     16B 810A      LDD	R16,Y+2
     16C DF78      RCALL	_LCD_write_data
     16D 90C9      LD	R12,Y+
     16E 90A9      LD	R10,Y+
     16F 9508      RET
(0111) }
(0112) 
(0113) 
(0114) 
(0115) void delay_1us(void)                 //1us延时函数
(0116)   {

⌨️ 快捷键说明

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