六位数码管显示.lst

来自「ICC mega8例子」· LST 代码 · 共 281 行

LST
281
字号
__text_start:
__start:
      1E E5CF      LDI	R28,0x5F
      1F E0D4      LDI	R29,4
      20 BFCD      OUT	0x3D,R28
      21 BFDE      OUT	0x3E,R29
      22 51CE      SUBI	R28,0x1E
      23 40D0      SBCI	R29,0
      24 EA0A      LDI	R16,0xAA
      25 8308      STD	Y+0,R16
      26 2400      CLR	R0
      27 E6E0      LDI	R30,0x60
      28 E0F0      LDI	R31,0
      29 E010      LDI	R17,0
      2A 36E0      CPI	R30,0x60
      2B 07F1      CPC	R31,R17
      2C F011      BEQ	0x002F
      2D 9201      ST	R0,Z+
      2E CFFB      RJMP	0x002A
      2F 8300      STD	Z+0,R16
      30 E3EC      LDI	R30,0x3C
      31 E0F0      LDI	R31,0
      32 E6A0      LDI	R26,0x60
      33 E0B0      LDI	R27,0
      34 E010      LDI	R17,0
      35 E000      LDI	R16,0
      36 BF0B      OUT	0x3B,R16
      37 33EC      CPI	R30,0x3C
      38 07F1      CPC	R31,R17
      39 F021      BEQ	0x003E
      3A 95C8      LPM
      3B 9631      ADIW	R30,1
      3C 920D      ST	R0,X+
      3D CFF9      RJMP	0x0037
      3E D042      RCALL	_main
_exit:
      3F CFFF      RJMP	_exit
FILE: E:\xiaozhiyong2009\设计资料\项目设计\ICCAVR_mega8_C\ICCAVR_mega8_六位数码管显示\六位数码管显示.c
(0001) //ICC-AVR application builder : 2009-3-11 12:19:32
(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:
      40 2422      CLR	R2
      41 BA28      OUT	0x18,R2
(0011)  DDRB  = 0x00;
      42 BA27      OUT	0x17,R2
(0012)  PORTC = 0x00; //m103 output only
      43 BA25      OUT	0x15,R2
(0013)  DDRC  = 0x00;
      44 BA24      OUT	0x14,R2
(0014)  PORTD = 0x00;
      45 BA22      OUT	0x12,R2
(0015)  DDRD  = 0x00;
      46 BA21      OUT	0x11,R2
      47 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:
      48 94F8      BCLR	7
(0023)  port_init();
      49 DFF6      RCALL	_port_init
(0024) 
(0025)  MCUCR = 0x00;
      4A 2422      CLR	R2
      4B BE25      OUT	0x35,R2
(0026)  GICR  = 0x00;
      4C BE2B      OUT	0x3B,R2
(0027)  TIMSK = 0x00; //timer interrupt sources
      4D BE29      OUT	0x39,R2
(0028)  SEI(); //re-enable interrupts
      4E 9478      BSET	7
      4F 9508      RET
(0029)  //all peripherals are now initialized
(0030) }
(0031) 
(0032) /************************************
(0033) 用    途:微秒级延时程序
(0034) Taget   :mega8
(0035) crystal :8M
(0036) 介    绍:在8M的晶振上进行us级的延时
(0037) 入口参数:
(0038) *************************************/
(0039) void delay_us(int time)
(0040) {
(0041)     do
(0042)     {
(0043)         time--;
_delay_us:
  time                 --> R16
      50 5001      SUBI	R16,1
      51 4010      SBCI	R17,0
(0044)     } 
(0045)     while (time > 1);
      52 E081      LDI	R24,1
      53 E090      LDI	R25,0
      54 1780      CP	R24,R16
      55 0791      CPC	R25,R17
      56 F3CC      BLT	0x0050
      57 9508      RET
_show_6_digit:
  j                    --> R20
  i                    --> R10
  p                    --> R22
      58 D03B      RCALL	push_xgsetF00C
      59 01B8      MOVW	R22,R16
(0046) }
(0047) 
(0048) /************************************
(0049) 用    途:六位数码管的显示程序
(0050) Taget   :mega8
(0051) crystal :8M
(0052) 介    绍:数码管共阳
(0053) 	     a-PB0
(0054) 		 b-PB1
(0055) 		 ...
(0056) 		 h-PB6
(0057) 		 DP-PB7
(0058) 		 -------
(0059) 		 1-PC5
(0060) 		 2-PC4
(0061) 		 3-PC3
(0062) 		 4-PC2
(0063) 		 5-PC1
(0064) 		 6-PC0
(0065) 	     使用show_6_digit(p)
(0066) 	     unsigned char数组
(0067) 	  	 B用作数据口
(0068)          C用作片选
(0069) 入口参数:显示数组
(0070) *************************************/
(0071) const unsigned char num[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
(0072) 	   			0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
(0073) void show_6_digit(unsigned char *p)
(0074) {
(0075)  unsigned char i,j;
(0076)  DDRB=0xff;
      5A EF8F      LDI	R24,0xFF
      5B BB87      OUT	0x17,R24
(0077)  DDRC=0xff;
      5C BB84      OUT	0x14,R24
(0078)  for (j=0;j<200;j++)
      5D 2744      CLR	R20
      5E C01F      RJMP	0x007E
(0079)  {
(0080)   for (i=0;i<6;i++)
      5F 24AA      CLR	R10
      60 C019      RJMP	0x007A
(0081)   {
(0082)     PORTC=0;//先关显示
      61 2422      CLR	R2
      62 BA25      OUT	0x15,R2
(0083)     PORTB=~num[*(p+5-i)];//送数据
      63 2C2A      MOV	R2,R10
      64 2433      CLR	R3
      65 01FB      MOVW	R30,R22
      66 9635      ADIW	R30,5
      67 19E2      SUB	R30,R2
      68 09F3      SBC	R31,R3
      69 81E0      LDD	R30,Z+0
      6A 27FF      CLR	R31
      6B E286      LDI	R24,0x26
      6C E090      LDI	R25,0
      6D 0FE8      ADD	R30,R24
      6E 1FF9      ADC	R31,R25
      6F 9024      LPM	R2,0(Z)
      70 9420      COM	R2
      71 BA28      OUT	0x18,R2
(0084) 	PORTC=(0x1<<i);//开显示
      72 E001      LDI	R16,1
      73 2D1A      MOV	R17,R10
      74 D02D      RCALL	lsl8
      75 BB05      OUT	0x15,R16
(0085) 	delay_us(200);//小延时
      76 EC08      LDI	R16,0xC8
      77 E010      LDI	R17,0
      78 DFD7      RCALL	_delay_us
      79 94A3      INC	R10
      7A 2D8A      MOV	R24,R10
      7B 3086      CPI	R24,6
      7C F320      BCS	0x0061
      7D 9543      INC	R20
      7E 3C48      CPI	R20,0xC8
      7F F2F8      BCS	0x005F
      80 C01A      RJMP	pop_xgsetF00C
_main:
  p                    --> Y,+0
      81 9726      SBIW	R28,6
(0086)   }
(0087)  }
(0088) }
(0089) 
(0090) void main()
(0091) {
(0092)  unsigned char p[6]={1,2,3,4,5,6};
      82 E386      LDI	R24,0x36
      83 E090      LDI	R25,0
      84 01FE      MOVW	R30,R28
      85 E006      LDI	R16,6
      86 E010      LDI	R17,0
      87 93FA      ST	R31,-Y
      88 93EA      ST	R30,-Y
      89 939A      ST	R25,-Y
      8A 938A      ST	R24,-Y
      8B D01C      RCALL	asgncblk
(0093)  port_init();
      8C DFB3      RCALL	_port_init
(0094)  init_devices();
      8D DFBA      RCALL	_init_devices
      8E C002      RJMP	0x0091
(0095)  
(0096)  while(1)
(0097)  {
(0098)   show_6_digit(p);
FILE: <library>
      8F 018E      MOVW	R16,R28
      90 DFC7      RCALL	_show_6_digit
      91 CFFD      RJMP	0x008F
      92 9626      ADIW	R28,6
      93 9508      RET
push_xgsetF00C:
      94 937A      ST	R23,-Y
      95 936A      ST	R22,-Y
      96 935A      ST	R21,-Y
      97 934A      ST	R20,-Y
      98 92BA      ST	R11,-Y
      99 92AA      ST	R10,-Y
      9A 9508      RET
pop_xgsetF00C:
      9B 90A9      LD	R10,Y+
      9C 90B9      LD	R11,Y+
      9D 9149      LD	R20,Y+
      9E 9159      LD	R21,Y+
      9F 9169      LD	R22,Y+
      A0 9179      LD	R23,Y+
      A1 9508      RET
lsl8:
      A2 2311      TST	R17
      A3 F019      BEQ	0x00A7
      A4 0F00      LSL	R16
      A5 951A      DEC	R17
      A6 CFFB      RJMP	lsl8
      A7 9508      RET
asgncblk:
      A8 93AA      ST	R26,-Y
      A9 93BA      ST	R27,-Y
      AA 93EA      ST	R30,-Y
      AB 93FA      ST	R31,-Y
      AC 920A      ST	R0,-Y
      AD 81AF      LDD	R26,Y+7
      AE 85B8      LDD	R27,Y+8
      AF 81ED      LDD	R30,Y+5
      B0 81FE      LDD	R31,Y+6
      B1 3000      CPI	R16,0
      B2 0701      CPC	R16,R17
      B3 F031      BEQ	0x00BA
      B4 95C8      LPM
      B5 920D      ST	R0,X+
      B6 9631      ADIW	R30,1
      B7 5001      SUBI	R16,1
      B8 4010      SBCI	R17,0
      B9 CFF7      RJMP	0x00B1
      BA 9009      LD	R0,Y+
      BB 91F9      LD	R31,Y+
      BC 91E9      LD	R30,Y+
      BD 91B9      LD	R27,Y+
      BE 91A9      LD	R26,Y+
      BF 9624      ADIW	R28,4
      C0 9508      RET

⌨️ 快捷键说明

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