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

📄 main.ls

📁 STM8S105S4程序
💻 LS
📖 第 1 页 / 共 2 页
字号:
   1                     ; C Compiler for STM8 (COSMIC Software)
   2                     ; Parser V4.9.10 - 10 Feb 2011
   3                     ; Generator (Limited) V4.3.6 - 15 Feb 2011
2776                     	bsct
2777  0000               _table:
2778  0000 c0            	dc.b	192
2779  0001 f9            	dc.b	249
2780  0002 a4            	dc.b	164
2781  0003 b0            	dc.b	176
2782  0004 99            	dc.b	153
2783  0005 92            	dc.b	146
2784  0006 82            	dc.b	130
2785  0007 f8            	dc.b	248
2786  0008 80            	dc.b	128
2787  0009 90            	dc.b	144
2788  000a 88            	dc.b	136
2789  000b 83            	dc.b	131
2790  000c c6            	dc.b	198
2791  000d a1            	dc.b	161
2792  000e 86            	dc.b	134
2793  000f 8e            	dc.b	142
2842                     ; 12 void delay(uchar a)
2842                     ; 13 {
2844                     	switch	.text
2845  0000               _delay:
2847  0000 88            	push	a
2848  0001 88            	push	a
2849       00000001      OFST:	set	1
2852                     ; 15 	for(a;a>0;a--)
2855  0002 200c          	jra	L3102
2856  0004               L7002:
2857                     ; 16 	  for(i=0;i<255;i++);
2859  0004 0f01          	clr	(OFST+0,sp)
2860  0006               L7102:
2864  0006 0c01          	inc	(OFST+0,sp)
2867  0008 7b01          	ld	a,(OFST+0,sp)
2868  000a a1ff          	cp	a,#255
2869  000c 25f8          	jrult	L7102
2870                     ; 15 	for(a;a>0;a--)
2872  000e 0a02          	dec	(OFST+1,sp)
2873  0010               L3102:
2876  0010 0d02          	tnz	(OFST+1,sp)
2877  0012 26f0          	jrne	L7002
2878                     ; 17 }
2881  0014 85            	popw	x
2882  0015 81            	ret
2913                     ; 19 void init(void)
2913                     ; 20 {
2914                     	switch	.text
2915  0016               _init:
2919                     ; 21 		PB_DDR=0XFF;
2921  0016 35ff5007      	mov	_PB_DDR,#255
2922                     ; 22     PB_CR1=0XFF;    // 将PB设置成推挽输出
2924  001a 35ff5008      	mov	_PB_CR1,#255
2925                     ; 24     PC_DDR=0X1F;
2927  001e 351f500c      	mov	_PC_DDR,#31
2928                     ; 25     PC_CR1=0XFF;    // 将PC设置成推挽输出
2930  0022 35ff500d      	mov	_PC_CR1,#255
2931                     ; 27 	  PE_DDR=0x26;
2933  0026 35265016      	mov	_PE_DDR,#38
2934                     ; 28     PE_CR1=0XFF;     //将PE5,PE2,PE1为推挽输出,其他的设为上拉输入
2936  002a 35ff5017      	mov	_PE_CR1,#255
2937                     ; 30     PD_DDR=0X80;
2939  002e 35805011      	mov	_PD_DDR,#128
2940                     ; 31     PD_CR1=0X80;   //将PD7设为推挽输出	
2942  0032 35805012      	mov	_PD_CR1,#128
2943                     ; 32 }
2946  0036 81            	ret
2986                     ; 36 uchar keys(void)    //此子函数看起来很长,实则只有前面一截内容,下面的“同理可得”
2986                     ; 37 {
2987                     	switch	.text
2988  0037               _keys:
2990  0037 88            	push	a
2991       00000001      OFST:	set	1
2994                     ; 39 	PE_ODR=0X26;             //将列中的PD7置为低电平,列中的其他三个置为高电平
2996  0038 35265014      	mov	_PE_ODR,#38
2997                     ; 40 	PD_ODR=0x00;
2999  003c 725f500f      	clr	_PD_ODR
3000                     ; 41 	delay(40);          //这里要说明一下,由于矩阵键盘第一列和AD键盘共用一个IO口
3002  0040 a628          	ld	a,#40
3003  0042 adbc          	call	_delay
3005                     ; 43 	if((PE_IDR&0x40)==0)    //如果第一列的第四行按键被按下,则进入if语句内
3007  0044 c65015        	ld	a,_PE_IDR
3008  0047 a540          	bcp	a,#64
3009  0049 2616          	jrne	L3012
3010                     ; 45     delay(5);               //延时一段时间,等待IO口电平稳定,即消抖
3012  004b a605          	ld	a,#5
3013  004d adb1          	call	_delay
3015                     ; 46 		if((PE_IDR&0x40)==0)    //再次判断按键是否被按下,避免干扰
3017  004f c65015        	ld	a,_PE_IDR
3018  0052 a540          	bcp	a,#64
3019  0054 260b          	jrne	L3012
3020                     ; 48       num=12;                //如果第一列的第四行按键被按下,则令num=12,即数码管显示 为C        
3022  0056 350c0000      	mov	_num,#12
3024  005a               L3112:
3025                     ; 49 		  while((PE_IDR&0x40)==0);   //如果按键没有松开,则等待
3027  005a c65015        	ld	a,_PE_IDR
3028  005d a540          	bcp	a,#64
3029  005f 27f9          	jreq	L3112
3030  0061               L3012:
3031                     ; 52 	temp=PC_IDR&0xe0;       
3033  0061 c6500b        	ld	a,_PC_IDR
3034  0064 a4e0          	and	a,#224
3035  0066 6b01          	ld	(OFST+0,sp),a
3036                     ; 53 	if(temp!=0xe0)
3038  0068 7b01          	ld	a,(OFST+0,sp)
3039  006a a1e0          	cp	a,#224
3040  006c 2736          	jreq	L7112
3041                     ; 55 		 delay(5);
3043  006e a605          	ld	a,#5
3044  0070 ad8e          	call	_delay
3046                     ; 56 		 temp=PC_IDR&0xe0;
3048  0072 c6500b        	ld	a,_PC_IDR
3049  0075 a4e0          	and	a,#224
3050  0077 6b01          	ld	(OFST+0,sp),a
3051                     ; 57 		 if(temp!=0xe0)           
3053  0079 7b01          	ld	a,(OFST+0,sp)
3054  007b a1e0          	cp	a,#224
3055  007d 2725          	jreq	L7112
3056                     ; 59 			 switch(temp)
3058  007f 7b01          	ld	a,(OFST+0,sp)
3060                     ; 66 									break;
3061  0081 a060          	sub	a,#96
3062  0083 2712          	jreq	L1402
3063  0085 a040          	sub	a,#64
3064  0087 2708          	jreq	L7302
3065  0089 a020          	sub	a,#32
3066  008b 260e          	jrne	L1312
3067                     ; 61 				 case 0xc0:num=0;       //如果temp的值为0xc0,则说明第1个按键被按下,下面的依次类推
3069  008d 3f00          	clr	_num
3070                     ; 62 									break;
3072  008f 200a          	jra	L1312
3073  0091               L7302:
3074                     ; 63 				 case 0xa0:num=4;
3076  0091 35040000      	mov	_num,#4
3077                     ; 64 									break;
3079  0095 2004          	jra	L1312
3080  0097               L1402:
3081                     ; 65 				 case 0x60:num=8;
3083  0097 35080000      	mov	_num,#8
3084                     ; 66 									break;
3086  009b               L5212:
3088  009b               L1312:
3089                     ; 68 			 while((PC_IDR&0xe0)!=0xe0);
3091  009b c6500b        	ld	a,_PC_IDR
3092  009e a4e0          	and	a,#224
3093  00a0 a1e0          	cp	a,#224
3094  00a2 26f7          	jrne	L1312
3095  00a4               L7112:
3096                     ; 73 	PE_ODR=0X24;
3098  00a4 35245014      	mov	_PE_ODR,#36
3099                     ; 74 	PD_ODR=0x80;
3101  00a8 3580500f      	mov	_PD_ODR,#128
3102                     ; 75 	if((PE_IDR&0x40)==0)
3104  00ac c65015        	ld	a,_PE_IDR
3105  00af a540          	bcp	a,#64
3106  00b1 2610          	jrne	L5312
3107                     ; 77     num=13;
3109  00b3 350d0000      	mov	_num,#13
3110                     ; 78 		delay(5);
3112  00b7 a605          	ld	a,#5
3113  00b9 cd0000        	call	_delay
3116  00bc               L1412:
3117                     ; 79 		while((PE_IDR&0x40)==0);
3119  00bc c65015        	ld	a,_PE_IDR
3120  00bf a540          	bcp	a,#64
3121  00c1 27f9          	jreq	L1412
3122  00c3               L5312:
3123                     ; 81 	temp=PC_IDR&0xe0;
3125  00c3 c6500b        	ld	a,_PC_IDR
3126  00c6 a4e0          	and	a,#224
3127  00c8 6b01          	ld	(OFST+0,sp),a
3128                     ; 82 	if(temp!=0xe0)
3130  00ca 7b01          	ld	a,(OFST+0,sp)
3131  00cc a1e0          	cp	a,#224
3132  00ce 2739          	jreq	L5412
3133                     ; 84 		 delay(5);
3135  00d0 a605          	ld	a,#5
3136  00d2 cd0000        	call	_delay
3138                     ; 85 		 temp=PC_IDR&0xe0;
3140  00d5 c6500b        	ld	a,_PC_IDR
3141  00d8 a4e0          	and	a,#224
3142  00da 6b01          	ld	(OFST+0,sp),a
3143                     ; 86 		 if(temp!=0xe0)
3145  00dc 7b01          	ld	a,(OFST+0,sp)
3146  00de a1e0          	cp	a,#224
3147  00e0 2727          	jreq	L5412
3148                     ; 88 			 switch(temp)
3150  00e2 7b01          	ld	a,(OFST+0,sp)
3152                     ; 95 									break;
3153  00e4 a060          	sub	a,#96
3154  00e6 2714          	jreq	L7402
3155  00e8 a040          	sub	a,#64
3156  00ea 270a          	jreq	L5402
3157  00ec a020          	sub	a,#32

⌨️ 快捷键说明

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