📄 main.ls
字号:
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 + -