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

📄 18b20.lst

📁 18b20的器件使用
💻 LST
📖 第 1 页 / 共 3 页
字号:
__text_start:
__start:
      32 E5CF      LDI	R28,0x5F
      33 E0D4      LDI	R29,4
      34 BFCD      OUT	0x3D,R28
      35 BFDE      OUT	0x3E,R29
      36 51CE      SUBI	R28,0x1E
      37 40D0      SBCI	R29,0
      38 EA0A      LDI	R16,0xAA
      39 8308      STD	Y+0,R16
      3A 2400      CLR	R0
      3B E7E0      LDI	R30,0x70
      3C E0F0      LDI	R31,0
      3D E010      LDI	R17,0
      3E 37E0      CPI	R30,0x70
      3F 07F1      CPC	R31,R17
      40 F011      BEQ	0x0043
      41 9201      ST	R0,Z+
      42 CFFB      RJMP	0x003E
      43 8300      STD	Z+0,R16
      44 E5E4      LDI	R30,0x54
      45 E0F0      LDI	R31,0
      46 E6A0      LDI	R26,0x60
      47 E0B0      LDI	R27,0
      48 E010      LDI	R17,0
      49 E000      LDI	R16,0
      4A BF0B      OUT	0x3B,R16
      4B 36E4      CPI	R30,0x64
      4C 07F1      CPC	R31,R17
      4D F021      BEQ	0x0052
      4E 95C8      LPM
      4F 9631      ADIW	R30,1
      50 920D      ST	R0,X+
      51 CFF9      RJMP	0x004B
      52 D1AA      RCALL	_main
_exit:
      53 CFFF      RJMP	_exit
FILE: D:\mega16_32实验板资料\ICCAVR源程序\18b20\delay.h
(0001) /**********延时函数*****************/
(0002) /*-----------------------------------------------
(0003) delay_us	   :1us延时函数
(0004) ------------------------------------------------*/
(0005) void delay_1us(void)
(0006) {
(0007)  asm("nop");
_delay_1us:
      54 0000      NOP
      55 9508      RET
_delay_us:
  t                    --> R20
      56 934A      ST	R20,-Y
      57 935A      ST	R21,-Y
      58 01A8      MOVW	R20,R16
(0008) }
(0009) /*-----------------------------------------------
(0010) delay_nus          :长延时函数
(0011) 输入参数: t        :延时时间 us
(0012) ------------------------------------------------*/
(0013) void delay_us(unsigned int t)
(0014) {
      59 C001      RJMP	0x005B
(0015)  while(t--)
(0016)   delay_1us();
      5A DFF9      RCALL	_delay_1us
      5B 011A      MOVW	R2,R20
      5C 5041      SUBI	R20,1
      5D 4050      SBCI	R21,0
      5E 2022      TST	R2
      5F F7D1      BNE	0x005A
      60 2033      TST	R3
      61 F7C1      BNE	0x005A
      62 9159      LD	R21,Y+
      63 9149      LD	R20,Y+
      64 9508      RET
(0017) }
(0018) /*----------------------------------------------
(0019) delay_ms	   :1ms延时函数
(0020) -----------------------------------------------*/
(0021) void delay_1ms(void)
(0022) {
(0023)  unsigned int i;
(0024)  for(i=0;i<1140;i++);
_delay_1ms:
  i                    --> R16
      65 2700      CLR	R16
      66 2711      CLR	R17
      67 C002      RJMP	0x006A
      68 5F0F      SUBI	R16,0xFF
      69 4F1F      SBCI	R17,0xFF
      6A 3704      CPI	R16,0x74
      6B E0E4      LDI	R30,4
      6C 071E      CPC	R17,R30
      6D F3D0      BCS	0x0068
      6E 9508      RET
_delay_ms:
  t                    --> R20
      6F 934A      ST	R20,-Y
      70 935A      ST	R21,-Y
      71 01A8      MOVW	R20,R16
(0025) }
(0026) /*----------------------------------------------
(0027) delay_nms          :长延时函数
(0028) 输入参数: t        :延时时间 ms
(0029) -----------------------------------------------*/
(0030) void delay_ms(unsigned int t)
(0031) {
      72 C001      RJMP	0x0074
(0032)  while(t--)
(0033)   delay_1ms();
      73 DFF1      RCALL	_delay_1ms
      74 011A      MOVW	R2,R20
      75 5041      SUBI	R20,1
      76 4050      SBCI	R21,0
      77 2022      TST	R2
      78 F7D1      BNE	0x0073
      79 2033      TST	R3
      7A F7C1      BNE	0x0073
      7B 9159      LD	R21,Y+
      7C 9149      LD	R20,Y+
      7D 9508      RET
_lcd_write:
  j                    --> R22
  a                    --> R20
  i                    --> R10
  content              --> R10
  dat_comm             --> R12
      7E D1D7      RCALL	push_xgsetF03C
      7F 2EA2      MOV	R10,R18
      80 2EC0      MOV	R12,R16
FILE: D:\mega16_32实验板资料\ICCAVR源程序\18b20\lcd12232.h
(0001) //定义LCD口线
(0002) #define lcd_cs   PA4
(0003) #define lcd_std  PA3
(0004) #define lcd_sclk PA2
(0005) #define lcd_port PORTA
(0006) #define lcd_ddr  DDRA
(0007) 
(0008) //LCD显示坐标定义
(0009) #define x1    0x80    //lcd初始坐标1
(0010) #define x2    0x90    //lcd初始坐标2
(0011) 
(0012) //LCD数据/命令格式定义
(0013) #define command  0       //lcd命令
(0014) #define data     1       //lcd数据
(0015) 
(0016) //传送单个字节到LCD
(0017) void lcd_write(unsigned char dat_comm,unsigned char content) 
(0018) {
(0019)   unsigned char a,i,j;
(0020)   delay_1ms();//延时时间要根据实际使用的芯片采用不同的延时时间
      81 DFE3      RCALL	_delay_1ms
(0021)   a=content;   //数据记录
      82 2D4A      MOV	R20,R10
(0022)   //delay_ms();//这个延时要根据实际需要看是否需要增加//如8515就要加
(0023)   lcd_port|=BIT(lcd_cs);//cs=1
      83 9ADC      SBI	0x1B,4
(0024)   lcd_port&=~BIT(lcd_sclk);//sclk=0;
      84 98DA      CBI	0x1B,2
(0025)   lcd_port|=(1<<lcd_std);//PORTC|=BIT(lcd_std);//std=1;
      85 9ADB      SBI	0x1B,3
(0026)   for(i=0;i<5;i++)   //启动命令
      86 24AA      CLR	R10
      87 C003      RJMP	0x008B
(0027)   {
(0028)     lcd_port|=BIT(lcd_sclk);//sclk=1;
      88 9ADA      SBI	0x1B,2
(0029) 	lcd_port&=~BIT(lcd_sclk);//sclk=0;
      89 98DA      CBI	0x1B,2
      8A 94A3      INC	R10
      8B 2D8A      MOV	R24,R10
      8C 3085      CPI	R24,5
      8D F3D0      BCS	0x0088
(0030)   }
(0031)   lcd_port&=~(1<<lcd_std);//PORTC&=~BIT(lcd_std);//std=0;
      8E 98DB      CBI	0x1B,3
(0032)   lcd_port|=BIT(lcd_sclk);//sclk=1;
      8F 9ADA      SBI	0x1B,2
(0033)   lcd_port&=~BIT(lcd_sclk);//sclk=0;
      90 98DA      CBI	0x1B,2
(0034)   if(dat_comm)
      91 20CC      TST	R12
      92 F011      BEQ	0x0095
(0035)     lcd_port|=(1<<lcd_std);//PORTC|=BIT(lcd_std);//std=1;   //数据
      93 9ADB      SBI	0x1B,3
      94 C001      RJMP	0x0096
(0036)   else
(0037)     lcd_port&=~(1<<lcd_std);//PORTC&=~BIT(lcd_std);//std=0;   //命令
      95 98DB      CBI	0x1B,3
(0038)   lcd_port|=BIT(lcd_sclk);//sclk=1;
      96 9ADA      SBI	0x1B,2
(0039)   lcd_port&=~BIT(lcd_sclk);//sclk=0;
      97 98DA      CBI	0x1B,2
(0040)   lcd_port&=~(1<<lcd_std);//PORTC&=~BIT(lcd_std);//std=0;
      98 98DB      CBI	0x1B,3
(0041)   lcd_port|=BIT(lcd_sclk);//sclk=1;
      99 9ADA      SBI	0x1B,2
(0042)   lcd_port&=~BIT(lcd_sclk);//sclk=0;
      9A 98DA      CBI	0x1B,2
(0043)   for(j=0;j<2;j++)       //循环发送8个位数据
      9B 2766      CLR	R22
      9C C01A      RJMP	0x00B7
(0044)   {
(0045)     for(i=0;i<4;i++)
      9D 24AA      CLR	R10
      9E C00B      RJMP	0x00AA
(0046)     {
(0047)       if ((a&0x80)==0x80) 
      9F 2F84      MOV	R24,R20
      A0 7880      ANDI	R24,0x80
      A1 3880      CPI	R24,0x80
      A2 F411      BNE	0x00A5
(0048) 	    lcd_port|=(1<<lcd_std);//PORTC|=BIT(lcd_std);//单字节传送
      A3 9ADB      SBI	0x1B,3
      A4 C001      RJMP	0x00A6
(0049) 	  else                
(0050) 	    lcd_port&=~(1<<lcd_std);//PORTC&=~BIT(lcd_std);
      A5 98DB      CBI	0x1B,3
(0051) 	  a=a<<1;
      A6 0F44      LSL	R20
(0052)       lcd_port|=BIT(lcd_sclk);//sclk=1;
      A7 9ADA      SBI	0x1B,2
(0053) 	  lcd_port&=~BIT(lcd_sclk);//sclk=0;
      A8 98DA      CBI	0x1B,2
      A9 94A3      INC	R10
      AA 2D8A      MOV	R24,R10
      AB 3084      CPI	R24,4
      AC F390      BCS	0x009F
(0054)     }
(0055)     lcd_port&=~(1<<lcd_std);//PORTC&=~BIT(lcd_std);//std=0;
      AD 98DB      CBI	0x1B,3
(0056)     for(i=0;i<4;i++)      //发送4个空数据
      AE 24AA      CLR	R10
      AF C003      RJMP	0x00B3
(0057)     {
(0058)       lcd_port|=BIT(lcd_sclk);//sclk=1;
      B0 9ADA      SBI	0x1B,2
(0059) 	  lcd_port&=~BIT(lcd_sclk);//sclk=0;
      B1 98DA      CBI	0x1B,2
      B2 94A3      INC	R10
      B3 2D8A      MOV	R24,R10
      B4 3084      CPI	R24,4
      B5 F3D0      BCS	0x00B0
      B6 9563      INC	R22
      B7 3062      CPI	R22,2
      B8 F320      BCS	0x009D
(0060)     }
(0061)   }
(0062)   lcd_port|=BIT(lcd_cs);
      B9 9ADC      SBI	0x1B,4
      BA C1A4      RJMP	pop_xgsetF03C
(0063) }
(0064) 
(0065) //LCD初始化
(0066) void LCD_init(void)
(0067) {
(0068)   /**********LCD12232串口口线设置************/
(0069)   lcd_port|=BIT(lcd_cs)|BIT(lcd_sclk)|BIT(lcd_std);
_LCD_init:
      BB B38B      IN	R24,0x1B
      BC 618C      ORI	R24,0x1C
      BD BB8B      OUT	0x1B,R24
(0070)   lcd_ddr|=BIT(lcd_cs)|BIT(lcd_sclk)|BIT(lcd_std);
      BE B38A      IN	R24,0x1A
      BF 618C      ORI	R24,0x1C
      C0 BB8A      OUT	0x1A,R24
(0071)   
(0072)   lcd_write(command,0x30);  //30---基本指令动作
      C1 E320      LDI	R18,0x30
      C2 2700      CLR	R16
      C3 DFBA      RCALL	_lcd_write
(0073)   //lcd_write(command,0x04);  //点设定:显示字符/光标从左到右移位,DDRAM地址加1 
(0074)   lcd_write(command,0x01);  //清屏,地址指针指向00H
      C4 E021      LDI	R18,1
      C5 2700      CLR	R16
      C6 DFB7      RCALL	_lcd_write
(0075)   lcd_write(command,0x06);  //光标的移动方向
      C7 E026      LDI	R18,6
      C8 2700      CLR	R16
      C9 DFB4      RCALL	_lcd_write
(0076)   lcd_write(command,0x0c);  //开显示,关游标
      CA E02C      LDI	R18,0xC
      CB 2700      CLR	R16
      CC DFB1      RCALL	_lcd_write
(0077)   delay_1ms(); //液晶初始化后延时
      CD CF97      RJMP	_delay_1ms
_lcd_display:
  i                    --> R20
  chn                  --> R10
      CE D173      RCALL	push_xgset300C
      CF 0158      MOVW	R10,R16
(0078) }
(0079) 
(0080) //LCD全屏显示字符
(0081) void lcd_display(unsigned char chn[30])
(0082) {
(0083)   unsigned char i;
(0084)   lcd_write(command,0x30);
      D0 E320      LDI	R18,0x30
      D1 2700      CLR	R16
      D2 DFAB      RCALL	_lcd_write
(0085)   lcd_write(command,x1);
      D3 E820      LDI	R18,0x80
      D4 2700      CLR	R16
      D5 DFA8      RCALL	_lcd_write
(0086)   for(i=0;i<15;i++)
      D6 2744      CLR	R20
      D7 C004      RJMP	0x00DC
(0087)   lcd_write(data,chn[i]);
      D8 940E 0264 CALL	<created procedures>
      DA DFA3      RCALL	_lcd_write
      DB 9543      INC	R20
      DC 304F      CPI	R20,0xF
      DD F3D0      BCS	0x00D8
(0088)   lcd_write(command,x2);
      DE E920      LDI	R18,0x90
      DF 2700      CLR	R16
      E0 DF9D      RCALL	_lcd_write
(0089)   for(i=0;i<15;i++)
      E1 2744      CLR	R20
      E2 C008      RJMP	0x00EB

⌨️ 快捷键说明

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