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

📄 led_8.lst

📁 16个单片机c语言实验程序
💻 LST
字号:
__start:
__text_start:
      72 EFCF      LDI	R28,0xFF
      73 E2D1      LDI	R29,0x21
      74 BFCD      OUT	0x3D,R28
      75 BFDE      OUT	0x3E,R29
      76 51CE      SUBI	R28,0x1E
      77 40D0      SBCI	R29,0
      78 EA0A      LDI	R16,0xAA
      79 8308      STD	Y+0,R16
      7A 2400      CLR	R0
      7B E0E0      LDI	R30,0
      7C E0F2      LDI	R31,2
      7D E012      LDI	R17,2
      7E 30E0      CPI	R30,0
      7F 07F1      CPC	R31,R17
      80 F011      BEQ	0x0083
      81 9201      ST	R0,Z+
      82 CFFB      RJMP	0x007E
      83 8300      STD	Z+0,R16
      84 EEE4      LDI	R30,0xE4
      85 E0F0      LDI	R31,0
      86 E0A0      LDI	R26,0
      87 E0B2      LDI	R27,2
      88 E010      LDI	R17,0
      89 E000      LDI	R16,0
      8A BF0B      OUT	0x3B,R16
      8B 3EE4      CPI	R30,0xE4
      8C 07F1      CPC	R31,R17
      8D F021      BEQ	0x0092
      8E 95C8      LPM
      8F 9631      ADIW	R30,1
      90 920D      ST	R0,X+
      91 CFF9      RJMP	0x008B
      92 940E 00FA CALL	_main
_exit:
      94 CFFF      RJMP	_exit
_encoder:
  code                 --> R20
  num                  --> R16
      95 940E 0120 CALL	push_xgsetF000
FILE: E:\16实验程序\数码管显示1\encoder.h
(0001) //数码管译码函数
(0002) uchar encoder(uchar num)
(0003) {
(0004) uchar code;
(0005) switch(num)
      97 2F60      MOV	R22,R16
      98 2777      CLR	R23
      99 3060      CPI	R22,0
      9A 0767      CPC	R22,R23
      9B F129      BEQ	0x00C1
      9C 3061      CPI	R22,1
      9D E0E0      LDI	R30,0
      9E 077E      CPC	R23,R30
      9F F119      BEQ	0x00C3
      A0 3062      CPI	R22,2
      A1 E0E0      LDI	R30,0
      A2 077E      CPC	R23,R30
      A3 F109      BEQ	0x00C5
      A4 3063      CPI	R22,3
      A5 E0E0      LDI	R30,0
      A6 077E      CPC	R23,R30
      A7 F0F9      BEQ	0x00C7
      A8 3064      CPI	R22,4
      A9 E0E0      LDI	R30,0
      AA 077E      CPC	R23,R30
      AB F0E9      BEQ	0x00C9
      AC 3065      CPI	R22,5
      AD E0E0      LDI	R30,0
      AE 077E      CPC	R23,R30
      AF F0D9      BEQ	0x00CB
      B0 3066      CPI	R22,6
      B1 E0E0      LDI	R30,0
      B2 077E      CPC	R23,R30
      B3 F0C9      BEQ	0x00CD
      B4 3067      CPI	R22,7
      B5 E0E0      LDI	R30,0
      B6 077E      CPC	R23,R30
      B7 F0B9      BEQ	0x00CF
      B8 3068      CPI	R22,0x8
      B9 E0E0      LDI	R30,0
      BA 077E      CPC	R23,R30
      BB F0A9      BEQ	0x00D1
      BC 3069      CPI	R22,0x9
      BD E0E0      LDI	R30,0
      BE 077E      CPC	R23,R30
      BF F099      BEQ	0x00D3
      C0 C013      RJMP	0x00D4
(0006) {
(0007)   case 0x00:
(0008)   code=0xc0;break;
      C1 EC40      LDI	R20,0xC0
      C2 C011      RJMP	0x00D4
(0009)   case 0x01:
(0010)   code=0xf9;break;
      C3 EF49      LDI	R20,0xF9
      C4 C00F      RJMP	0x00D4
(0011)   case 0x02:
(0012)   code=0xa4;break;
      C5 EA44      LDI	R20,0xA4
      C6 C00D      RJMP	0x00D4
(0013)   case 0x03:
(0014)   code=0xb0;break;
      C7 EB40      LDI	R20,0xB0
      C8 C00B      RJMP	0x00D4
(0015)   case 0x04:
(0016)   code=0x99;break;
      C9 E949      LDI	R20,0x99
      CA C009      RJMP	0x00D4
(0017)   case 0x05:
(0018)   code=0x92;break;
      CB E942      LDI	R20,0x92
      CC C007      RJMP	0x00D4
(0019)   case 0x06:
(0020)   code=0x82;break;
      CD E842      LDI	R20,0x82
      CE C005      RJMP	0x00D4
(0021)   case 0x07:
(0022)   code=0xf8;break;
      CF EF48      LDI	R20,0xF8
      D0 C003      RJMP	0x00D4
(0023)   case 0x08:
(0024)   code=0x80;break;
      D1 E840      LDI	R20,0x80
      D2 C001      RJMP	0x00D4
(0025)   case 0x09:
(0026)   code=0x90;break;
      D3 E940      LDI	R20,0x90
(0027)    }
(0028)   return(code);
      D4 2F04      MOV	R16,R20
      D5 940C 0125 JMP	pop_xgsetF000
FILE: E:\16实验程序\数码管显示1\ch595.h
(0001) //ch595的数据输入
(0002) #define srclk  1
(0003) #define rclk 2
(0004) #define ser  3  
(0005) 
(0006) //延时函数
(0007) void s_ms(unsigned int t)
(0008) {
(0009)     for(;t>1;t--)
_s_ms:
  t                    --> R16
      D7 C002      RJMP	0x00DA
      D8 5001      SUBI	R16,1
      D9 4010      SBCI	R17,0
      DA E081      LDI	R24,1
      DB E090      LDI	R25,0
      DC 1780      CP	R24,R16
      DD 0791      CPC	R25,R17
      DE F3C8      BCS	0x00D8
      DF 9508      RET
_sendbyte:
  tem                  --> R10
  i                    --> R22
  byte                 --> R20
      E0 940E 012A CALL	push_xgsetF00C
      E2 2F40      MOV	R20,R16
(0010)     {
(0011)     }
(0012) }
(0013) //写74hc595函数
(0014) void sendbyte(uchar byte)
(0015) {    
(0016)    uchar i,tem; 
(0017)    byte=encoder(byte);       //译码
      E3 2F04      MOV	R16,R20
      E4 DFB0      RCALL	_encoder
      E5 2F40      MOV	R20,R16
(0018)    for(i=0;i<8;i++)          
      E6 2766      CLR	R22
      E7 C00C      RJMP	0x00F4
(0019)         {
(0020)          PORTA&=~(1<<srclk);    //srclk 清零
      E8 98D9      CBI	0x1B,1
(0021)          tem=(byte&0x80);       //最高位是1
      E9 2F84      MOV	R24,R20
      EA 7880      ANDI	R24,0x80
      EB 2EA8      MOV	R10,R24
(0022) 		 if(tem==0)
      EC 2388      TST	R24
      ED F411      BNE	0x00F0
(0023) 		   {
(0024) 		   PORTA&=~(1<<ser);   //ser 清零
      EE 98DB      CBI	0x1B,3
(0025) 		   }
      EF C001      RJMP	0x00F1
(0026) 		   else
(0027) 		   {
(0028) 		   PORTA|=(1<<ser);    //ser 置1   ser为高电平时工作
      F0 9ADB      SBI	0x1B,3
(0029) 		   }
(0030)          byte=byte<<1;         //数据左移1位
      F1 0F44      LSL	R20
(0031)          PORTA|=(1<<srclk);      //srclk=1
      F2 9AD9      SBI	0x1B,1
      F3 9563      INC	R22
      F4 3068      CPI	R22,0x8
      F5 F390      BCS	0x00E8
(0032)          }
(0033)          PORTA&=~(1<<rclk);   //rclk=0
      F6 98DA      CBI	0x1B,2
(0034)          PORTA|=(1<<rclk);     //rclk=1    
      F7 9ADA      SBI	0x1B,2
      F8 940C 0131 JMP	pop_xgsetF00C
FILE: E:\16实验程序\数码管显示1\led_8.c
(0001) //数码管显示程序
(0002) #define uchar unsigned char 
(0003) #define uint unsigned int 
(0004) #include<iom16v.h>
(0005) //7段译码
(0006) #include"encoder.h"    
(0007) //写74hc595
(0008) #include"ch595.h"
(0009) 
(0010) 
(0011) 
(0012) //主函数
(0013) main()
(0014) {
(0015) uchar aa,cc=0x0;
_main:
  aa                   --> R10
  bb                   --> R22
  cc                   --> R20
      FA 2744      CLR	R20
(0016) uint bb;
(0017) DDRA=0xff;      //初始化端口A
      FB EF8F      LDI	R24,0xFF
      FC BB8A      OUT	0x1A,R24
(0018) PORTA=0xef;
      FD EE8F      LDI	R24,0xEF
      FE BB8B      OUT	0x1B,R24
      FF C01E      RJMP	0x011E
(0019) while(1)
(0020)      {
(0021) 	 PORTA|=(1<<4);               //74ls138使能
     100 9ADC      SBI	0x1B,4
(0022) 	 for(aa=0;aa<=9;aa++)         //循环发送0-9的数字
     101 24AA      CLR	R10
     102 C018      RJMP	0x011B
(0023) 	    {
(0024) 	     sendbyte(aa);            //向74hc595写入数据
     103 2D0A      MOV	R16,R10
     104 DFDB      RCALL	_sendbyte
(0025) 		 for(bb=0;bb<1600;bb++)   //每个数字扫描2000次,每个数码管200次
     105 2766      CLR	R22
     106 2777      CLR	R23
     107 C00E      RJMP	0x0116
(0026) 		     {
(0027) 			 PORTA&=~cc;          //74hc138依次输出
     108 2E24      MOV	R2,R20
     109 9420      COM	R2
     10A B23B      IN	R3,0x1B
     10B 2032      AND	R3,R2
     10C BA3B      OUT	0x1B,R3
(0028) 			 cc=cc+0x20;          //这里可能不好理解,138的ABC在A口的567位,每加0x20就是进一位,加到溢出就回到000;
     10D 5E40      SUBI	R20,0xE0
(0029) 			 s_ms(700);
     10E EB0C      LDI	R16,0xBC
     10F E012      LDI	R17,2
     110 DFC6      RCALL	_s_ms
(0030) 			 PORTA|=0xF0;         
FILE: <library>
     111 B38B      IN	R24,0x1B
     112 6F80      ORI	R24,0xF0
     113 BB8B      OUT	0x1B,R24
     114 5F6F      SUBI	R22,0xFF
     115 4F7F      SBCI	R23,0xFF
     116 3460      CPI	R22,0x40
     117 E0E6      LDI	R30,6
     118 077E      CPC	R23,R30
     119 F370      BCS	0x0108
     11A 94A3      INC	R10
     11B E089      LDI	R24,0x9
     11C 158A      CP	R24,R10
     11D F728      BCC	0x0103
     11E CFE1      RJMP	0x0100
     11F 9508      RET
push_xgsetF000:
     120 937A      ST	R23,-Y
     121 936A      ST	R22,-Y
     122 935A      ST	R21,-Y
     123 934A      ST	R20,-Y
     124 9508      RET
pop_xgsetF000:
     125 9149      LD	R20,Y+
     126 9159      LD	R21,Y+
     127 9169      LD	R22,Y+
     128 9179      LD	R23,Y+
     129 9508      RET
push_xgsetF00C:
     12A 937A      ST	R23,-Y
     12B 936A      ST	R22,-Y
     12C 935A      ST	R21,-Y
     12D 934A      ST	R20,-Y
     12E 92BA      ST	R11,-Y
     12F 92AA      ST	R10,-Y
     130 9508      RET
pop_xgsetF00C:
     131 90A9      LD	R10,Y+
     132 90B9      LD	R11,Y+
     133 9149      LD	R20,Y+
     134 9159      LD	R21,Y+
     135 9169      LD	R22,Y+
     136 9179      LD	R23,Y+
     137 9508      RET

⌨️ 快捷键说明

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