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

📄 两位数码管显示.lst

📁 ICC mega8例子
💻 LST
字号:
__start:
__text_start:
      1B E5CF      LDI	R28,0x5F
      1C E0D4      LDI	R29,4
      1D BFCD      OUT	0x3D,R28
      1E BFDE      OUT	0x3E,R29
      1F 51CE      SUBI	R28,0x1E
      20 40D0      SBCI	R29,0
      21 EA0A      LDI	R16,0xAA
      22 8308      STD	Y+0,R16
      23 2400      CLR	R0
      24 E6E0      LDI	R30,0x60
      25 E0F0      LDI	R31,0
      26 E010      LDI	R17,0
      27 36E0      CPI	R30,0x60
      28 07F1      CPC	R31,R17
      29 F011      BEQ	0x002C
      2A 9201      ST	R0,Z+
      2B CFFB      RJMP	0x0027
      2C 8300      STD	Z+0,R16
      2D E3E6      LDI	R30,0x36
      2E E0F0      LDI	R31,0
      2F E6A0      LDI	R26,0x60
      30 E0B0      LDI	R27,0
      31 E010      LDI	R17,0
      32 E000      LDI	R16,0
      33 BF0B      OUT	0x3B,R16
      34 33E6      CPI	R30,0x36
      35 07F1      CPC	R31,R17
      36 F021      BEQ	0x003B
      37 95C8      LPM
      38 9631      ADIW	R30,1
      39 920D      ST	R0,X+
      3A CFF9      RJMP	0x0034
      3B D04C      RCALL	_main
_exit:
      3C CFFF      RJMP	_exit
FILE: E:\xiaozhiyong2009\设计资料\项目设计\mega8_C语言常用程序\ICCAVR_mega8_两位数码管显示\两位数码管显示.c
(0001) //ICC-AVR application builder : 2009-3-10 14:45:48
(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:
      3D 2422      CLR	R2
      3E BA28      OUT	0x18,R2
(0011)  DDRB  = 0x00;
      3F BA27      OUT	0x17,R2
(0012)  PORTC = 0x00; //m103 output only
      40 BA25      OUT	0x15,R2
(0013)  DDRC  = 0x00;
      41 BA24      OUT	0x14,R2
(0014)  PORTD = 0x00;
      42 BA22      OUT	0x12,R2
(0015)  DDRD  = 0x00;
      43 BA21      OUT	0x11,R2
      44 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:
      45 94F8      BCLR	7
(0023)  port_init();
      46 DFF6      RCALL	_port_init
(0024) 
(0025)  MCUCR = 0x00;
      47 2422      CLR	R2
      48 BE25      OUT	0x35,R2
(0026)  GICR  = 0x00;
      49 BE2B      OUT	0x3B,R2
(0027)  TIMSK = 0x00; //timer interrupt sources
      4A BE29      OUT	0x39,R2
(0028)  SEI(); //re-enable interrupts
      4B 9478      BSET	7
      4C 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
      4D 5001      SUBI	R16,1
      4E 4010      SBCI	R17,0
(0044)     } 
(0045)     while (time > 1);
      4F E081      LDI	R24,1
      50 E090      LDI	R25,0
      51 1780      CP	R24,R16
      52 0791      CPC	R25,R17
      53 F3CC      BLT	0x004D
      54 9508      RET
_show_2_digit:
  i                    --> Y,+1
  digi                 --> R10
      55 92AA      ST	R10,-Y
      56 2EA0      MOV	R10,R16
(0046) }
(0047) 
(0048) 
(0049) /************************************
(0050) 用    途:两位数码管显示一个数
(0051) Taget   :mega8
(0052) crystal :8M
(0053) 介    绍:共阳数码管
(0054) 	  	 1-PC1(片选)
(0055) 		 2-PC0
(0056) 		 -----
(0057) 		 a-PB0(数据)
(0058) 		 b-PB1
(0059) 		 ...
(0060) 		 h-PB6
(0061) 		 DP-PB7
(0062) 入口参数:要显示的数,十进制表示
(0063) *************************************/
(0064) const unsigned char num[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
(0065) 	   			0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
(0066) void show_2_digit(unsigned char digi)
(0067) {
(0068)  unsigned char i;
(0069)  DDRC=0xff;
      57 EF8F      LDI	R24,0xFF
      58 BB84      OUT	0x14,R24
(0070)  DDRB=0xff;
      59 BB87      OUT	0x17,R24
(0071)  PORTC=0;//关片选
      5A 2422      CLR	R2
      5B BA25      OUT	0x15,R2
(0072)  PORTB=~num[(unsigned char )(digi/10)];//显示十位
      5C E02A      LDI	R18,0xA
      5D E030      LDI	R19,0
      5E 2D0A      MOV	R16,R10
      5F 2711      CLR	R17
      60 D032      RCALL	div16s
      61 2FE0      MOV	R30,R16
      62 27FF      CLR	R31
      63 E286      LDI	R24,0x26
      64 E090      LDI	R25,0
      65 0FE8      ADD	R30,R24
      66 1FF9      ADC	R31,R25
      67 9024      LPM	R2,0(Z)
      68 9420      COM	R2
      69 BA28      OUT	0x18,R2
(0073)  PORTC=(0x1<<1);//开十位的显示
      6A E082      LDI	R24,2
      6B BB85      OUT	0x15,R24
(0074)  delay_us(200);
      6C EC08      LDI	R16,0xC8
      6D E010      LDI	R17,0
      6E DFDE      RCALL	_delay_us
(0075)  PORTC=0;//关显示
      6F 2422      CLR	R2
      70 BA25      OUT	0x15,R2
(0076)  PORTB=~num[(unsigned char )(digi%10)];//显示个位
      71 E02A      LDI	R18,0xA
      72 E030      LDI	R19,0
      73 2D0A      MOV	R16,R10
      74 2711      CLR	R17
      75 D019      RCALL	mod16s
      76 2FE0      MOV	R30,R16
      77 27FF      CLR	R31
      78 E286      LDI	R24,0x26
      79 E090      LDI	R25,0
      7A 0FE8      ADD	R30,R24
      7B 1FF9      ADC	R31,R25
      7C 9024      LPM	R2,0(Z)
      7D 9420      COM	R2
      7E BA28      OUT	0x18,R2
(0077)  PORTC=(0x1<<0);//开个位的显示
      7F E081      LDI	R24,1
      80 BB85      OUT	0x15,R24
(0078)  delay_us(200);
      81 EC08      LDI	R16,0xC8
      82 E010      LDI	R17,0
      83 DFC9      RCALL	_delay_us
(0079)  PORTC=0x0;//关显示
      84 2422      CLR	R2
      85 BA25      OUT	0x15,R2
      86 90A9      LD	R10,Y+
      87 9508      RET
(0080) }
(0081) 
(0082) void main()
(0083) {
(0084)  port_init();
_main:
      88 DFB4      RCALL	_port_init
(0085)  init_devices();
      89 DFBB      RCALL	_init_devices
      8A C002      RJMP	0x008D
(0086)  
(0087)  while(1)
(0088)  {
(0089)   show_2_digit(34);
FILE: <library>
      8B E202      LDI	R16,0x22
      8C DFC8      RCALL	_show_2_digit
      8D CFFD      RJMP	0x008B
      8E 9508      RET
mod16s:
      8F 9468      BSET	6
      90 92DA      ST	R13,-Y
      91 2ED1      MOV	R13,R17
      92 C004      RJMP	0x0097
div16s:
      93 94E8      BCLR	6
      94 92DA      ST	R13,-Y
      95 2ED1      MOV	R13,R17
      96 26D3      EOR	R13,R19
      97 FF17      SBRS	R17,7
      98 C004      RJMP	0x009D
      99 9510      COM	R17
      9A 9500      COM	R16
      9B 5F0F      SUBI	R16,0xFF
      9C 4F1F      SBCI	R17,0xFF
      9D FF37      SBRS	R19,7
      9E C004      RJMP	0x00A3
      9F 9530      COM	R19
      A0 9520      COM	R18
      A1 5F2F      SUBI	R18,0xFF
      A2 4F3F      SBCI	R19,0xFF
      A3 D00B      RCALL	xdiv16u
      A4 FED7      SBRS	R13,7
      A5 C004      RJMP	0x00AA
      A6 9510      COM	R17
      A7 9500      COM	R16
      A8 5F0F      SUBI	R16,0xFF
      A9 4F1F      SBCI	R17,0xFF
      AA 90D9      LD	R13,Y+
      AB 9508      RET
mod16u:
      AC 9468      BSET	6
      AD C001      RJMP	xdiv16u
div16u:
      AE 94E8      BCLR	6
xdiv16u:
      AF 92EA      ST	R14,-Y
      B0 92FA      ST	R15,-Y
      B1 938A      ST	R24,-Y
      B2 24EE      CLR	R14
      B3 24FF      CLR	R15
      B4 E180      LDI	R24,0x10
      B5 0F00      LSL	R16
      B6 1F11      ROL	R17
      B7 1CEE      ROL	R14
      B8 1CFF      ROL	R15
      B9 16E2      CP	R14,R18
      BA 06F3      CPC	R15,R19
      BB F018      BCS	0x00BF
      BC 1AE2      SUB	R14,R18
      BD 0AF3      SBC	R15,R19
      BE 9503      INC	R16
      BF 958A      DEC	R24
      C0 F7A1      BNE	0x00B5
      C1 F416      BRTC	0x00C4
      C2 2D0E      MOV	R16,R14
      C3 2D1F      MOV	R17,R15
      C4 9189      LD	R24,Y+
      C5 90F9      LD	R15,Y+
      C6 90E9      LD	R14,Y+
      C7 9508      RET

⌨️ 快捷键说明

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