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

📄 display.lst

📁 屏幕显示程序。用于液晶屏幕及数码显示管的显示程序。已调试通过。
💻 LST
字号:
__start:
__text_start:
    000D E5CF      LDI	R28,0x5F
    000E E0D2      LDI	R29,2
    000F BFCD      OUT	0x3D,R28
    0010 BFDE      OUT	0x3E,R29
    0011 51C0      SUBI	R28,0x10
    0012 40D0      SBCI	R29,0
    0013 EA0A      LDI	R16,0xAA
    0014 8308      STD	Y+0,R16
    0015 2400      CLR	R0
    0016 E6E6      LDI	R30,0x66
    0017 E0F0      LDI	R31,0
    0018 E010      LDI	R17,0
    0019 36E6      CPI	R30,0x66
    001A 07F1      CPC	R31,R17
    001B F011      BEQ	0x001E
    001C 9201      ST	R0,Z+
    001D CFFB      RJMP	0x0019
    001E 8300      STD	Z+0,R16
    001F E1E4      LDI	R30,0x14
    0020 E0F0      LDI	R31,0
    0021 E6A0      LDI	R26,0x60
    0022 E0B0      LDI	R27,0
    0023 E010      LDI	R17,0
    0024 31EA      CPI	R30,0x1A
    0025 07F1      CPC	R31,R17
    0026 F021      BEQ	0x002B
    0027 95C8      LPM
    0028 9631      ADIW	R30,1
    0029 920D      ST	R0,X+
    002A CFF9      RJMP	0x0024
    002B D025      RCALL	_main
_exit:
    002C CFFF      RJMP	_exit
FILE: display.c
(0001) /*********************************************
(0002)                HTTP://WWW.SL.COM.CN
(0003)           	        双龙电子
(0004)                六路动态扫描显示程序		 
(0005) **********************************************/
(0006) #include <iom16v.h>
(0007) extern void delay_ms(unsigned int n);//引用外部函数
(0008) extern void delay_1ms(void); 
(0009)           /*   七段译码字形表     */        
(0010) const unsigned char tabel[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
(0011)           /*     显示缓冲区       */
(0012) unsigned char ledbuff[]={0x3f,0x3f,0x3f,0x3f,0x3f,0x3f};
(0013) void port_init(void)//端口初始化
(0014)  {
(0015)   DDRD=0x3f;
_port_init:
    002D E38F      LDI	R24,0x3F
    002E BB81      OUT	0x11,R24
(0016)   DDRB=0xff;
    002F EF8F      LDI	R24,0xFF
    0030 BB87      OUT	0x17,R24
(0017)   PORTD=0xff;
    0031 BB82      OUT	0x12,R24
(0018)   PORTB=0xff;
    0032 BB88      OUT	0x18,R24
    0033 9508      RET
_display:
  i                    --> R20
    0034 D065      RCALL	push_gset1
(0019)  }
(0020) void display(void)//六路动态扫描显示电路
(0021) {
(0022)  unsigned char i;
(0023)  for (i=0;i<6;i++)
    0035 2744      CLR	R20
    0036 C016      RJMP	0x004D
(0024)   {
(0025)    PORTB=ledbuff[i];//将显示缓冲区数据送PORTB口
    0037 E680      LDI	R24,0x60
    0038 E090      LDI	R25,0
    0039 2FE4      MOV	R30,R20
    003A 27FF      CLR	R31
    003B 0FE8      ADD	R30,R24
    003C 1FF9      ADC	R31,R25
    003D 8020      LDD	R2,Z+0
    003E BA28      OUT	0x18,R2
(0026)    PORTD=~(1<<i);   //开始显示
    003F E001      LDI	R16,1
    0040 2F14      MOV	R17,R20
    0041 D06F      RCALL	lsl8
    0042 2E20      MOV	R2,R16
    0043 9420      COM	R2
    0044 BA22      OUT	0x12,R2
(0027)    delay_1ms();     //每一位显示保持一定时间
    0045 D031      RCALL	_delay_1ms
(0028)    PORTD|=(1<<i);   //关闭显示
    0046 E001      LDI	R16,1
    0047 2F14      MOV	R17,R20
    0048 D068      RCALL	lsl8
    0049 B222      IN	R2,0x12
    004A 2A20      OR	R2,R16
    004B BA22      OUT	0x12,R2
    004C 9543      INC	R20
    004D 3046      CPI	R20,6
    004E F340      BCS	0x0037
    004F D04D      RCALL	pop_gset1
    0050 9508      RET
(0029)   }
(0030) }
(0031) /*主程序功能:演示了一个多路动态扫描程序的工作过程*/
(0032) void main(void)
(0033) {
(0034)  unsigned char i,j;
(0035)  MCUCR=0;
_main:
  i                    --> R20
  j                    --> R22
    0051 2422      CLR	R2
    0052 BE25      OUT	0x35,R2
(0036)  port_init(); //端口初始化
    0053 DFD9      RCALL	_port_init
    0054 C020      RJMP	0x0075
(0037)  while(1)
(0038)   {
(0039)    for(i=0;i<0x10;i++)  
    0055 2744      CLR	R20
    0056 C01C      RJMP	0x0073
(0040)      {
(0041) 	  for(j=0;j<6;j++)
    0057 2766      CLR	R22
    0058 C011      RJMP	0x006A
(0042) 	      ledbuff[j]=tabel[i] ;//更换显示字形
    0059 E084      LDI	R24,4
    005A E090      LDI	R25,0
    005B 2E24      MOV	R2,R20
    005C 2433      CLR	R3
    005D 0E28      ADD	R2,R24
    005E 1E39      ADC	R3,R25
    005F 2DE2      MOV	R30,R2
    0060 2DF3      MOV	R31,R3
    0061 95C8      LPM
    0062 E680      LDI	R24,0x60
    0063 E090      LDI	R25,0
    0064 2FE6      MOV	R30,R22
    0065 27FF      CLR	R31
    0066 0FE8      ADD	R30,R24
    0067 1FF9      ADC	R31,R25
    0068 8200      STD	Z+0,R0
    0069 9563      INC	R22
    006A 3066      CPI	R22,6
    006B F368      BCS	0x0059
(0043)       for (j=0;j<200;j++)	 
    006C 2766      CLR	R22
    006D C002      RJMP	0x0070
(0044)           display();	      //循环显示200次
    006E DFC5      RCALL	_display
    006F 9563      INC	R22
    0070 3C68      CPI	R22,0xC8
    0071 F3E0      BCS	0x006E
    0072 9543      INC	R20
    0073 3140      CPI	R20,0x10
    0074 F310      BCS	0x0057
    0075 CFDF      RJMP	0x0055
    0076 9508      RET
(0045) 	 } 
(0046)   }
(0047) }
(0048) 
(0049) #define xtal 8   
(0050) void delay_1ms(void)
(0051) { unsigned int i;
(0052)  for(i=1;i<(unsigned int)(xtal*143-2);i++)
_delay_1ms:
  i                    --> R16
    0077 E001      LDI	R16,1
    0078 E010      LDI	R17,0
    0079 C002      RJMP	0x007C
    007A 5F0F      SUBI	R16,0xFF
    007B 4F1F      SBCI	R17,0xFF
    007C E786      LDI	R24,0x76
    007D E094      LDI	R25,4
    007E 1708      CP	R16,R24
    007F 0719      CPC	R17,R25
    0080 F3C8      BCS	0x007A
    0081 9508      RET
_delay_ms:
  i                    --> R20
  n                    --> R22
    0082 D015      RCALL	push_gset2
    0083 2F60      MOV	R22,R16
    0084 2F71      MOV	R23,R17
(0053)     ;
(0054) }
(0055) void delay_ms(unsigned int n)
(0056) {
(0057)  unsigned int i=0;
    0085 2744      CLR	R20
    0086 2755      CLR	R21
    0087 C003      RJMP	0x008B
(0058)    while(i<n)
(0059)    {delay_1ms();
    0088 DFEE      RCALL	_delay_1ms
(0060)     i++;
FILE: <library>
    0089 5F4F      SUBI	R20,0xFF
    008A 4F5F      SBCI	R21,0xFF
    008B 1746      CP	R20,R22
    008C 0757      CPC	R21,R23
    008D F3D0      BCS	0x0088
    008E D001      RCALL	pop_gset2
    008F 9508      RET
pop_gset2:
    0090 E0E2      LDI	R30,2
    0091 C00C      RJMP	pop
push_gset5:
    0092 92FA      ST	R15,-Y
    0093 92EA      ST	R14,-Y
push_gset4:
    0094 92DA      ST	R13,-Y
    0095 92CA      ST	R12,-Y
push_gset3:
    0096 92BA      ST	R11,-Y
    0097 92AA      ST	R10,-Y
push_gset2:
    0098 937A      ST	R23,-Y
    0099 936A      ST	R22,-Y
push_gset1:
    009A 935A      ST	R21,-Y
    009B 934A      ST	R20,-Y
    009C 9508      RET
pop_gset1:
    009D E0E1      LDI	R30,1
pop:
    009E 9149      LD	R20,Y+
    009F 9159      LD	R21,Y+
    00A0 FDE0      SBRC	R30,0
    00A1 9508      RET
    00A2 9169      LD	R22,Y+
    00A3 9179      LD	R23,Y+
    00A4 FDE1      SBRC	R30,1
    00A5 9508      RET
    00A6 90A9      LD	R10,Y+
    00A7 90B9      LD	R11,Y+
    00A8 FDE2      SBRC	R30,2
    00A9 9508      RET
    00AA 90C9      LD	R12,Y+
    00AB 90D9      LD	R13,Y+
    00AC FDE3      SBRC	R30,3
    00AD 9508      RET
    00AE 90E9      LD	R14,Y+
    00AF 90F9      LD	R15,Y+
    00B0 9508      RET
lsl8:
    00B1 2311      TST	R17
    00B2 F019      BEQ	0x00B6
    00B3 0F00      LSL	R16
    00B4 951A      DEC	R17
    00B5 CFFB      RJMP	lsl8
    00B6 9508      RET

⌨️ 快捷键说明

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