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

📄 lcd1602显示.lst

📁 ICC mega8例子
💻 LST
字号:
__start:
__text_start:
      19 E5CF      LDI	R28,0x5F
      1A E0D4      LDI	R29,4
      1B BFCD      OUT	0x3D,R28
      1C BFDE      OUT	0x3E,R29
      1D 51CE      SUBI	R28,0x1E
      1E 40D0      SBCI	R29,0
      1F EA0A      LDI	R16,0xAA
      20 8308      STD	Y+0,R16
      21 2400      CLR	R0
      22 E6EC      LDI	R30,0x6C
      23 E0F0      LDI	R31,0
      24 E010      LDI	R17,0
      25 36EC      CPI	R30,0x6C
      26 07F1      CPC	R31,R17
      27 F011      BEQ	0x002A
      28 9201      ST	R0,Z+
      29 CFFB      RJMP	0x0025
      2A 8300      STD	Z+0,R16
      2B E2E6      LDI	R30,0x26
      2C E0F0      LDI	R31,0
      2D E6A0      LDI	R26,0x60
      2E E0B0      LDI	R27,0
      2F E010      LDI	R17,0
      30 E000      LDI	R16,0
      31 BF0B      OUT	0x3B,R16
      32 33E2      CPI	R30,0x32
      33 07F1      CPC	R31,R17
      34 F021      BEQ	0x0039
      35 95C8      LPM
      36 9631      ADIW	R30,1
      37 920D      ST	R0,X+
      38 CFF9      RJMP	0x0032
      39 D092      RCALL	_main
_exit:
      3A CFFF      RJMP	_exit
FILE: E:\xiaozhiyong2009\设计资料\项目设计\ICCAVR_mega8_C\ICCAVR_mega8_LCD1602显示\LCD1602显示.c
(0001) //ICC-AVR application builder : 2009-3-12 16:02:34
(0002) // Target : M8
(0003) // Crystal: 8.0000Mhz
(0004) 
(0005) #include <iom8v.h>
(0006) #include <macros.h>
(0007) 
(0008) void port_init(void)
(0009) {
(0010)  PORTB = 0x00;
_port_init:
      3B 2422      CLR	R2
      3C BA28      OUT	0x18,R2
(0011)  DDRB  = 0x00;
      3D BA27      OUT	0x17,R2
(0012)  PORTC = 0x00; //m103 output only
      3E BA25      OUT	0x15,R2
(0013)  DDRC  = 0x00;
      3F BA24      OUT	0x14,R2
(0014)  PORTD = 0x00;
      40 BA22      OUT	0x12,R2
(0015)  DDRD  = 0x00;
      41 BA21      OUT	0x11,R2
      42 9508      RET
(0016) }
(0017) 
(0018) //call this routine to initialize all peripherals
(0019) void init_devices(void)
(0020) {
(0021)  //stop errant interrupts until set up
(0022)  CLI(); //disable all interrupts
_init_devices:
      43 94F8      BCLR	7
(0023)  port_init();
      44 DFF6      RCALL	_port_init
(0024) 
(0025)  MCUCR = 0x00;
      45 2422      CLR	R2
      46 BE25      OUT	0x35,R2
(0026)  GICR  = 0x00;
      47 BE2B      OUT	0x3B,R2
(0027)  TIMSK = 0x00; //timer interrupt sources
      48 BE29      OUT	0x39,R2
(0028)  SEI(); //re-enable interrupts
      49 9478      BSET	7
      4A 9508      RET
_delay:
  i                    --> R20
  j                    --> R22
  ms                   --> R16
      4B D0B3      RCALL	push_xgsetF000
(0029)  //all peripherals are now initialized
(0030) }
(0031) 
(0032) /*************************************************************************
(0033) 用    途:LCD1602显示
(0034) Taget   :mega8
(0035) crystal :8M
(0036) 介    绍:用PB做端口,
(0037)          PB0-D0
(0038) 		 PB7-D7
(0039) 		 ------
(0040) 		 PC0-6
(0041) 		 PC1-5
(0042) 		 PC2-4----456为控制引脚
(0043) 入口参数:
(0044) 出口参数:
(0045) *************************************/
(0046) //延时程序
(0047) void delay(unsigned int ms)
(0048) {
(0049)  	 unsigned int i,j;
(0050) 	 for(i=0;i<ms;i++)
      4C 2744      CLR	R20
      4D 2755      CLR	R21
      4E C00B      RJMP	0x005A
(0051) 	 	{for(j=0;j<200;j++);}
      4F 2766      CLR	R22
      50 2777      CLR	R23
      51 C002      RJMP	0x0054
      52 5F6F      SUBI	R22,0xFF
      53 4F7F      SBCI	R23,0xFF
      54 3C68      CPI	R22,0xC8
      55 E0E0      LDI	R30,0
      56 077E      CPC	R23,R30
      57 F3D0      BCS	0x0052
      58 5F4F      SUBI	R20,0xFF
      59 4F5F      SBCI	R21,0xFF
      5A 1740      CP	R20,R16
      5B 0751      CPC	R21,R17
      5C F390      BCS	0x004F
      5D C0A6      RJMP	pop_xgsetF000
_com_lcd:
  com                  --> R10
      5E 92AA      ST	R10,-Y
      5F 2EA0      MOV	R10,R16
(0052) }
(0053) //送指令子程序
(0054) void com_lcd(unsigned char com)
(0055) {
(0056)  	 PORTC&=~(1<<PC2);
      60 98AA      CBI	0x15,2
(0057) 	 PORTC&=~(1<<PC1);
      61 98A9      CBI	0x15,1
(0058) 	 PORTB=com;
      62 BAA8      OUT	0x18,R10
(0059) 	 PORTC|=(1<<PC0);
      63 9AA8      SBI	0x15,0
(0060) 	 delay(5);
      64 E005      LDI	R16,5
      65 E010      LDI	R17,0
      66 DFE4      RCALL	_delay
(0061) 	 PORTC&=~(1<<PC0);
      67 98A8      CBI	0x15,0
      68 90A9      LD	R10,Y+
      69 9508      RET
_data_lcd:
  data                 --> R10
      6A 92AA      ST	R10,-Y
      6B 2EA0      MOV	R10,R16
(0062) }
(0063) //送数据子程序
(0064) void data_lcd(unsigned char data)
(0065) {
(0066)  	 PORTC|=(1<<PC2);
      6C 9AAA      SBI	0x15,2
(0067) 	 PORTC&=~(1<<PC1);
      6D 98A9      CBI	0x15,1
(0068) 	 PORTB=data;
      6E BAA8      OUT	0x18,R10
(0069) 	 PORTC|=(1<<PC0);
      6F 9AA8      SBI	0x15,0
(0070) 	 delay(5);
      70 E005      LDI	R16,5
      71 E010      LDI	R17,0
      72 DFD8      RCALL	_delay
(0071) 	 PORTC&=~(1<<PC0);
      73 98A8      CBI	0x15,0
      74 90A9      LD	R10,Y+
      75 9508      RET
(0072) }
(0073) //初始化
(0074) void LCD1602_init()
(0075) {
(0076)  	 DDRB=0XFF;
_LCD1602_init:
      76 EF8F      LDI	R24,0xFF
      77 BB87      OUT	0x17,R24
(0077) 	 DDRC|=0X07;
      78 B384      IN	R24,0x14
      79 6087      ORI	R24,7
      7A BB84      OUT	0x14,R24
(0078) 	 PORTC&=~(1<<PC0);
      7B 98A8      CBI	0x15,0
(0079) 	 
(0080) 	 com_lcd(0x38);//5*7,2行显示
      7C E308      LDI	R16,0x38
      7D DFE0      RCALL	_com_lcd
(0081) 	 delay(5);
      7E E005      LDI	R16,5
      7F E010      LDI	R17,0
      80 DFCA      RCALL	_delay
(0082) 	 com_lcd(0x01);	//清屏
      81 E001      LDI	R16,1
      82 DFDB      RCALL	_com_lcd
(0083) 	 delay(5);
      83 E005      LDI	R16,5
      84 E010      LDI	R17,0
      85 DFC5      RCALL	_delay
(0084) 	 com_lcd(0x0C);//文字不动,光标自动右移
      86 E00C      LDI	R16,0xC
      87 DFD6      RCALL	_com_lcd
(0085) 	 delay(5);
      88 E005      LDI	R16,5
      89 E010      LDI	R17,0
      8A DFC0      RCALL	_delay
(0086) 	 com_lcd(0x06);//开显示
      8B E006      LDI	R16,6
      8C DFD1      RCALL	_com_lcd
(0087) 	 delay(5);
      8D E005      LDI	R16,5
      8E E010      LDI	R17,0
      8F DFBB      RCALL	_delay
      90 9508      RET
(0088) }
(0089) //清屏
(0090) void LCD1602_clear()
(0091) {
(0092)  	 com_lcd(0x01);	//清屏
_LCD1602_clear:
      91 E001      LDI	R16,1
      92 DFCB      RCALL	_com_lcd
(0093) 	 delay(5);
      93 E005      LDI	R16,5
      94 E010      LDI	R17,0
      95 DFB5      RCALL	_delay
      96 9508      RET
_LCD1602_goxy:
  row                  --> R10
  line                 --> R20
      97 D05D      RCALL	push_xgset300C
      98 2EA2      MOV	R10,R18
      99 2F40      MOV	R20,R16
(0094) }
(0095) //定位x,y(x-列,y-行)
(0096) void LCD1602_goxy(unsigned char line,unsigned char row)
(0097) {
(0098)  if (row==0)
      9A 20AA      TST	R10
      9B F411      BNE	0x009E
(0099)  	line+=0x81;
      9C 574F      SUBI	R20,0x7F
      9D C001      RJMP	0x009F
(0100)  else
(0101)  	line+=0xc0;
      9E 5440      SUBI	R20,0x40
(0102)  com_lcd(line);//第二行首地址
      9F 2F04      MOV	R16,R20
      A0 DFBD      RCALL	_com_lcd
(0103)  delay(5);
      A1 E005      LDI	R16,5
      A2 E010      LDI	R17,0
      A3 DFA7      RCALL	_delay
      A4 C055      RJMP	pop_xgset300C
_LCD1602_print:
  str                  --> R20
      A5 934A      ST	R20,-Y
      A6 935A      ST	R21,-Y
      A7 01A8      MOVW	R20,R16
(0104) }
(0105) //显示字符串
(0106) LCD1602_print(char *str)
(0107) {
      A8 C008      RJMP	0x00B1
(0108)  while(*str)
(0109)  {
(0110)   data_lcd(*str);
      A9 01FA      MOVW	R30,R20
      AA 8100      LDD	R16,Z+0
      AB DFBE      RCALL	_data_lcd
(0111)   delay(10);
      AC E00A      LDI	R16,0xA
      AD E010      LDI	R17,0
      AE DF9C      RCALL	_delay
(0112)   str++;
      AF 5F4F      SUBI	R20,0xFF
      B0 4F5F      SBCI	R21,0xFF
      B1 01FA      MOVW	R30,R20
      B2 8020      LDD	R2,Z+0
      B3 2022      TST	R2
      B4 F7A1      BNE	0x00A9
      B5 9159      LD	R21,Y+
      B6 9149      LD	R20,Y+
      B7 9508      RET
_LCD1602_printD:
  n                    --> R10
      B8 92AA      ST	R10,-Y
      B9 2EA0      MOV	R10,R16
(0113)  }
(0114) }
(0115) //显示一个二位十位数
(0116) LCD1602_printD(unsigned char n)
(0117) {
(0118)  data_lcd(n/10+0x30);
      BA E01A      LDI	R17,0xA
      BB 2D0A      MOV	R16,R10
      BC D022      RCALL	div8u
      BD 5D00      SUBI	R16,0xD0
      BE DFAB      RCALL	_data_lcd
(0119)  delay(10);
      BF E00A      LDI	R16,0xA
      C0 E010      LDI	R17,0
      C1 DF89      RCALL	_delay
(0120)  data_lcd(n%10+0x30);
      C2 E01A      LDI	R17,0xA
      C3 2D0A      MOV	R16,R10
      C4 D018      RCALL	mod8u
      C5 5D00      SUBI	R16,0xD0
      C6 DFA3      RCALL	_data_lcd
(0121)  delay(10);
      C7 E00A      LDI	R16,0xA
      C8 E010      LDI	R17,0
      C9 DF81      RCALL	_delay
      CA 90A9      LD	R10,Y+
      CB 9508      RET
(0122) }
(0123) //**************************************************************************	
(0124) 
(0125) void main()
(0126) {
(0127)  unsigned char i=23;
_main:
  i                    --> R20
      CC E147      LDI	R20,0x17
(0128)  port_init();
      CD DF6D      RCALL	_port_init
(0129)  init_devices();
      CE DF74      RCALL	_init_devices
(0130)  
(0131)  LCD1602_init();
      CF DFA6      RCALL	_LCD1602_init
(0132)  LCD1602_goxy(2,0);
      D0 2722      CLR	R18
      D1 E002      LDI	R16,2
      D2 DFC4      RCALL	_LCD1602_goxy
(0133)  LCD1602_print("xiaozhiyong");
      D3 E600      LDI	R16,0x60
      D4 E010      LDI	R17,0
      D5 DFCF      RCALL	_LCD1602_print
(0134)  LCD1602_goxy(2,1);
      D6 E021      LDI	R18,1
      D7 E002      LDI	R16,2
      D8 DFBE      RCALL	_LCD1602_goxy
(0135)  LCD1602_printD(i);
      D9 2F04      MOV	R16,R20
      DA DFDD      RCALL	_LCD1602_printD
(0136)  
(0137)  while(1)
FILE: <library>
      DB CFFF      RJMP	0x00DB
      DC 9508      RET
mod8u:
      DD 9468      BSET	6
      DE C001      RJMP	xdiv8u
div8u:
      DF 94E8      BCLR	6
xdiv8u:
      E0 932A      ST	R18,-Y
      E1 92FA      ST	R15,-Y
      E2 92EA      ST	R14,-Y
      E3 24FF      CLR	R15
      E4 24EE      CLR	R14
      E5 E120      LDI	R18,0x10
      E6 0F00      LSL	R16
      E7 1CFF      ROL	R15
      E8 1CEE      ROL	R14
      E9 16E1      CP	R14,R17
      EA F010      BCS	0x00ED
      EB 1AE1      SUB	R14,R17
      EC 9503      INC	R16
      ED 952A      DEC	R18
      EE F7B9      BNE	0x00E6
      EF F40E      BRTC	0x00F1
      F0 2D0E      MOV	R16,R14
      F1 90E9      LD	R14,Y+
      F2 90F9      LD	R15,Y+
      F3 9129      LD	R18,Y+
      F4 9508      RET
push_xgset300C:
      F5 935A      ST	R21,-Y
      F6 934A      ST	R20,-Y
      F7 92BA      ST	R11,-Y
      F8 92AA      ST	R10,-Y
      F9 9508      RET
pop_xgset300C:
      FA 90A9      LD	R10,Y+
      FB 90B9      LD	R11,Y+
      FC 9149      LD	R20,Y+
      FD 9159      LD	R21,Y+
      FE 9508      RET
push_xgsetF000:
      FF 937A      ST	R23,-Y
     100 936A      ST	R22,-Y
     101 935A      ST	R21,-Y
     102 934A      ST	R20,-Y
     103 9508      RET
pop_xgsetF000:
     104 9149      LD	R20,Y+
     105 9159      LD	R21,Y+
     106 9169      LD	R22,Y+
     107 9179      LD	R23,Y+
     108 9508      RET

⌨️ 快捷键说明

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