📄 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
2786 bsct
2787 0000 _table:
2788 0000 ff dc.b 255
2789 0001 83 dc.b 131
2790 0002 ef dc.b 239
2791 0003 ef dc.b 239
2792 0004 ef dc.b 239
2793 0005 ef dc.b 239
2794 0006 83 dc.b 131
2795 0007 ff dc.b 255
2796 0008 ff dc.b 255
2797 0009 83 dc.b 131
2798 000a ef dc.b 239
2799 000b ef dc.b 239
2800 000c ef dc.b 239
2801 000d ef dc.b 239
2802 000e 83 dc.b 131
2803 000f ff dc.b 255
2804 0010 ff dc.b 255
2805 0011 83 dc.b 131
2806 0012 ef dc.b 239
2807 0013 ef dc.b 239
2808 0014 ef dc.b 239
2809 0015 ef dc.b 239
2810 0016 83 dc.b 131
2811 0017 ff dc.b 255
2812 0018 ff dc.b 255
2813 0019 ff dc.b 255
2814 001a ef dc.b 239
2815 001b ff dc.b 255
2816 001c ff dc.b 255
2817 001d ff dc.b 255
2818 001e ff dc.b 255
2819 001f ff dc.b 255
2820 0020 ff dc.b 255
2821 0021 93 dc.b 147
2822 0022 ef dc.b 239
2823 0023 ff dc.b 255
2824 0024 ff dc.b 255
2825 0025 ff dc.b 255
2826 0026 ff dc.b 255
2827 0027 ff dc.b 255
2828 0028 ff dc.b 255
2829 0029 93 dc.b 147
2830 002a 6d dc.b 109
2831 002b ff dc.b 255
2832 002c ff dc.b 255
2833 002d ff dc.b 255
2834 002e ff dc.b 255
2835 002f ff dc.b 255
2836 0030 ff dc.b 255
2837 0031 93 dc.b 147
2838 0032 6d dc.b 109
2839 0033 7d dc.b 125
2840 0034 ff dc.b 255
2841 0035 ff dc.b 255
2842 0036 ff dc.b 255
2843 0037 ff dc.b 255
2844 0038 ff dc.b 255
2845 0039 93 dc.b 147
2846 003a 6d dc.b 109
2847 003b 7d dc.b 125
2848 003c bb dc.b 187
2849 003d ff dc.b 255
2850 003e ff dc.b 255
2851 003f ff dc.b 255
2852 0040 ff dc.b 255
2853 0041 93 dc.b 147
2854 0042 6d dc.b 109
2855 0043 7d dc.b 125
2856 0044 bb dc.b 187
2857 0045 d7 dc.b 215
2858 0046 ff dc.b 255
2859 0047 ff dc.b 255
2860 0048 ff dc.b 255
2861 0049 93 dc.b 147
2862 004a 6d dc.b 109
2863 004b 7d dc.b 125
2864 004c bb dc.b 187
2865 004d d7 dc.b 215
2866 004e ef dc.b 239
2867 004f ff dc.b 255
2868 0050 ff dc.b 255
2869 0051 93 dc.b 147
2870 0052 6d dc.b 109
2871 0053 7d dc.b 125
2872 0054 bb dc.b 187
2873 0055 d7 dc.b 215
2874 0056 ef dc.b 239
2875 0057 ff dc.b 255
2876 0058 ff dc.b 255
2877 0059 bb dc.b 187
2878 005a bb dc.b 187
2879 005b bb dc.b 187
2880 005c bb dc.b 187
2881 005d bb dc.b 187
2882 005e c7 dc.b 199
2883 005f ff dc.b 255
2884 0060 ff dc.b 255
2885 0061 bb dc.b 187
2886 0062 bb dc.b 187
2887 0063 bb dc.b 187
2888 0064 bb dc.b 187
2889 0065 bb dc.b 187
2890 0066 c7 dc.b 199
2891 0067 ff dc.b 255
2892 0068 ff dc.b 255
2893 0069 bb dc.b 187
2894 006a bb dc.b 187
2895 006b bb dc.b 187
2896 006c bb dc.b 187
2897 006d bb dc.b 187
2898 006e c7 dc.b 199
2899 006f ff dc.b 255
2950 ; 35 void delay(uint s)
2950 ; 36 {
2952 switch .text
2953 0000 _delay:
2955 0000 89 pushw x
2956 0001 88 push a
2957 00000001 OFST: set 1
2960 ; 38 for(s;s>0;s--)
2963 0002 2011 jra L3102
2964 0004 L7002:
2965 ; 39 for(i=0;i<200;i++);
2967 0004 0f01 clr (OFST+0,sp)
2968 0006 L7102:
2972 0006 0c01 inc (OFST+0,sp)
2975 0008 7b01 ld a,(OFST+0,sp)
2976 000a a1c8 cp a,#200
2977 000c 25f8 jrult L7102
2978 ; 38 for(s;s>0;s--)
2980 000e 1e02 ldw x,(OFST+1,sp)
2981 0010 1d0001 subw x,#1
2982 0013 1f02 ldw (OFST+1,sp),x
2983 0015 L3102:
2986 0015 1e02 ldw x,(OFST+1,sp)
2987 0017 26eb jrne L7002
2988 ; 40 }
2991 0019 5b03 addw sp,#3
2992 001b 81 ret
3024 ; 42 void init(void) //初始化函数,PC是用来控制138以驱动点阵的行
3024 ; 43 {
3025 switch .text
3026 001c _init:
3030 ; 44 PG_DDR=0x01;
3032 001c 35015020 mov _PG_DDR,#1
3033 ; 45 PG_CR1=0x01;
3035 0020 35015021 mov _PG_CR1,#1
3036 ; 46 PG_CR2=0x00;
3038 0024 725f5022 clr _PG_CR2
3039 ; 48 PD_DDR=0x70;
3041 0028 35705011 mov _PD_DDR,#112
3042 ; 49 PD_CR1=0x70;
3044 002c 35705012 mov _PD_CR1,#112
3045 ; 50 PD_CR2=0x00;
3047 0030 725f5013 clr _PD_CR2
3048 ; 52 PC_DDR=0x0f;
3050 0034 350f500c mov _PC_DDR,#15
3051 ; 53 PC_CR1=0x0f;
3053 0038 350f500d mov _PC_CR1,#15
3054 ; 54 PC_CR2=0x00;
3056 003c 725f500e clr _PC_CR2
3057 ; 55 }
3060 0040 81 ret
3119 ; 56 void display(void) //显示子函数
3119 ; 57 {
3120 switch .text
3121 0041 _display:
3123 0041 5203 subw sp,#3
3124 00000003 OFST: set 3
3127 ; 59 E=1; //先关闭595(赋值时会影响显示效果)
3129 0043 7210501e bset _E
3130 ; 60 m=table[a][b]; //将要显示的table[a][b]赋值给m
3132 0047 b601 ld a,_a
3133 0049 97 ld xl,a
3134 004a a608 ld a,#8
3135 004c 42 mul x,a
3136 004d 01 rrwa x,a
3137 004e bb00 add a,_b
3138 0050 2401 jrnc L21
3139 0052 5c incw x
3140 0053 L21:
3141 0053 02 rlwa x,a
3142 0054 e600 ld a,(_table,x)
3143 0056 6b03 ld (OFST+0,sp),a
3144 ; 61 for(q=0;q<8;q++)
3146 0058 0f01 clr (OFST-2,sp)
3147 005a L3602:
3148 ; 63 p=0;
3150 005a 0f02 clr (OFST-1,sp)
3151 ; 64 if((m&0x80)==0x80)
3153 005c 7b03 ld a,(OFST+0,sp)
3154 005e a480 and a,#128
3155 0060 a180 cp a,#128
3156 0062 2604 jrne L1702
3157 ; 65 p=1; //这三句的意思是如果m的最高位是1,则p=1,否则为0,就是把m最高位赋值给p
3159 0064 a601 ld a,#1
3160 0066 6b02 ld (OFST-1,sp),a
3161 0068 L1702:
3162 ; 66 SER=p; //把p输入595输入口
3164 0068 0d02 tnz (OFST-1,sp)
3165 006a 2602 jrne L02
3166 006c 2006 jp L41
3167 006e L02:
3168 006e 721c500f bset _SER
3169 0072 2004 jra L61
3170 0074 L41:
3171 0074 721d500f bres _SER
3172 0078 L61:
3173 ; 67 SRCLK=0;
3175 0078 721b500f bres _SRCLK
3176 ; 68 RCLK=1;
3178 007c 7218500f bset _RCLK
3179 ; 70 SRCLK=1;
3182 0080 721a500f bset _SRCLK
3183 ; 71 RCLK=0; //以上语句涉及 595的操作时序, 请参考595芯片资料
3185 0084 7219500f bres _RCLK
3186 ; 72 m=(m<<1);
3188 0088 0803 sll (OFST+0,sp)
3189 ; 61 for(q=0;q<8;q++)
3191 008a 0c01 inc (OFST-2,sp)
3194 008c 7b01 ld a,(OFST-2,sp)
3195 008e a108 cp a,#8
3196 0090 25c8 jrult L3602
3197 ; 74 E=0; //赋值完后打开595
3199 0092 7211501e bres _E
3200 ; 75 }
3203 0096 5b03 addw sp,#3
3204 0098 81 ret
3244 ; 77 void main()
3244 ; 78 {
3245 switch .text
3246 0099 _main:
3248 0099 89 pushw x
3249 00000002 OFST: set 2
3252 ; 80 init();
3254 009a ad80 call _init
3256 009c L1112:
3257 ; 83 for(a=0;a<14;a++) //有14个数组要传送
3259 009c 3f01 clr _a
3260 009e L5112:
3261 ; 85 for(i=0;i<10;i++) //每个数组扫描10次,这样才 能看清楚
3263 009e 5f clrw x
3264 009f 1f01 ldw (OFST-1,sp),x
3265 00a1 L3212:
3266 ; 87 for(b=0;b<8;b++) //每个数组有8个数
3268 00a1 3f00 clr _b
3269 00a3 L1312:
3270 ; 89 display();
3272 00a3 ad9c call _display
3274 ; 90 PC_ODR=b*2; //让138和595同步
3276 00a5 b600 ld a,_b
3277 00a7 48 sll a
3278 00a8 c7500a ld _PC_ODR,a
3279 ; 91 delay(2); //延时一会,以使显示清楚, 延时不能太长,太长会看到闪烁,也不能太短,太短显示不清楚
3281 00ab ae0002 ldw x,#2
3282 00ae cd0000 call _delay
3284 ; 87 for(b=0;b<8;b++) //每个数组有8个数
3286 00b1 3c00 inc _b
3289 00b3 b600 ld a,_b
3290 00b5 a108 cp a,#8
3291 00b7 25ea jrult L1312
3292 ; 85 for(i=0;i<10;i++) //每个数组扫描10次,这样才 能看清楚
3294 00b9 1e01 ldw x,(OFST-1,sp)
3295 00bb 1c0001 addw x,#1
3296 00be 1f01 ldw (OFST-1,sp),x
3299 00c0 1e01 ldw x,(OFST-1,sp)
3300 00c2 a3000a cpw x,#10
3301 00c5 25da jrult L3212
3302 ; 83 for(a=0;a<14;a++) //有14个数组要传送
3304 00c7 3c01 inc _a
3307 00c9 b601 ld a,_a
3308 00cb a10e cp a,#14
3309 00cd 25cf jrult L5112
3310 ; 95 delay(1000); //为了使得看起来是I LOVE U是一个周期,这里循环一次后,延时1秒
3312 00cf ae03e8 ldw x,#1000
3313 00d2 cd0000 call _delay
3316 00d5 20c5 jra L1112
3400 xdef _main
3401 xdef _display
3402 xdef _init
3403 xdef _delay
3404 xdef _table
3405 switch .ubsct
3406 0000 _b:
3407 0000 00 ds.b 1
3408 xdef _b
3409 0001 _a:
3410 0001 00 ds.b 1
3411 xdef _a
3431 end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -