📄 main.ls
字号:
1 ; C Compiler for STM8 (COSMIC Software)
2 ; Generator V4.2.4 - 19 Dec 2007
2765 bsct
2766 0000 _table0:
2767 0000 746f6461792e dc.b "today...",0
2768 0009 _table1:
2769 0009 4920616d2076 dc.b "I am very happy!",0
2770 001a _table2:
2771 001a 7777772e6764 dc.b "www.gdutelc.cn",0
2772 0029 _table3:
2773 0029 57656c636f6d dc.b "Welcome to LCD",0
2831 ; 19 void delay(uint a)
2831 ; 20 {
2833 switch .text
2834 0000 _delay:
2836 0000 89 pushw x
2837 0001 88 push a
2838 00000001 OFST: set 1
2841 ; 22 for(a;a>0;a--)
2844 0002 2011 jra L3102
2845 0004 L7002:
2846 ; 23 for(i=0;i<250;i++);
2848 0004 0f01 clr (OFST+0,sp)
2849 0006 L7102:
2853 0006 0c01 inc (OFST+0,sp)
2856 0008 7b01 ld a,(OFST+0,sp)
2857 000a a1fa cp a,#250
2858 000c 25f8 jrult L7102
2859 ; 22 for(a;a>0;a--)
2861 000e 1e02 ldw x,(OFST+1,sp)
2862 0010 1d0001 subw x,#1
2863 0013 1f02 ldw (OFST+1,sp),x
2864 0015 L3102:
2867 0015 1e02 ldw x,(OFST+1,sp)
2868 0017 26eb jrne L7002
2869 ; 24 }
2872 0019 5b03 addw sp,#3
2873 001b 81 ret
2902 ; 25 void init_stm8(void)
2902 ; 26 {
2903 switch .text
2904 001c _init_stm8:
2908 ; 27 PA_DDR=0x70;
2910 001c 35705002 mov _PA_DDR,#112
2911 ; 28 PA_CR1=0x70;
2913 0020 35705003 mov _PA_CR1,#112
2914 ; 29 PA_CR2=0x00;
2916 0024 725f5004 clr _PA_CR2
2917 ; 31 PB_DDR=0xff;
2919 0028 35ff5007 mov _PB_DDR,#255
2920 ; 32 PB_CR1=0xff;
2922 002c 35ff5008 mov _PB_CR1,#255
2923 ; 33 PB_CR2=0x00;
2925 0030 725f5009 clr _PB_CR2
2926 ; 34 }
2929 0034 81 ret
2954 ; 36 void init_1602(void)
2954 ; 37 {
2955 switch .text
2956 0035 _init_1602:
2960 ; 38 write_com(0x38); //显示模式设置
2962 0035 a638 ld a,#56
2963 0037 ad15 call _write_com
2965 ; 39 write_com(0x0c); //开显示,不显示光标
2967 0039 a60c ld a,#12
2968 003b ad11 call _write_com
2970 ; 40 write_com(0x06); //地址指针自动加一
2972 003d a606 ld a,#6
2973 003f ad0d call _write_com
2975 ; 41 write_com(0x01); //清屏
2977 0041 a601 ld a,#1
2978 0043 ad09 call _write_com
2980 ; 42 write_com(0x80+0x04); //指针指向第一行第四格
2982 0045 a684 ld a,#132
2983 0047 ad05 call _write_com
2985 ; 43 RW=0; //因只涉及向1602写数据,不涉及读,写的时候RW引脚都为低电平,故将RW置低
2987 0049 721b5000 bres _RW
2988 ; 44 }
2991 004d 81 ret
3029 ; 47 void write_com(uchar com)
3029 ; 48 {
3030 switch .text
3031 004e _write_com:
3035 ; 49 RS=0;
3037 004e 72195000 bres _RS
3038 ; 50 E=0;
3040 0052 721d5000 bres _E
3041 ; 51 PB_ODR=com;
3043 0056 c75005 ld _PB_ODR,a
3044 ; 52 delay(2);
3046 0059 ae0002 ldw x,#2
3047 005c ada2 call _delay
3049 ; 53 E=1;
3051 005e 721c5000 bset _E
3052 ; 54 E=0;
3054 0062 721d5000 bres _E
3055 ; 55 }
3058 0066 81 ret
3096 ; 57 void write_data(uchar data)
3096 ; 58 {
3097 switch .text
3098 0067 _write_data:
3102 ; 59 RS=1;
3104 0067 72185000 bset _RS
3105 ; 60 E=0;
3107 006b 721d5000 bres _E
3108 ; 61 PB_ODR=data;
3110 006f c75005 ld _PB_ODR,a
3111 ; 62 delay(2);
3113 0072 ae0002 ldw x,#2
3114 0075 ad89 call _delay
3116 ; 63 E=1;
3118 0077 721c5000 bset _E
3119 ; 64 E=0;
3121 007b 721d5000 bres _E
3122 ; 65 }
3125 007f 81 ret
3162 ; 67 void display(uchar *s)
3162 ; 68 {
3163 switch .text
3164 0080 _display:
3166 0080 89 pushw x
3167 00000000 OFST: set 0
3170 0081 2013 jra L1212
3171 0083 L7112:
3172 ; 71 write_data(*s++); //显示指针×s所指地址的字符
3174 0083 1e01 ldw x,(OFST+1,sp)
3175 0085 1c0001 addw x,#1
3176 0088 1f01 ldw (OFST+1,sp),x
3177 008a 1d0001 subw x,#1
3178 008d f6 ld a,(x)
3179 008e add7 call _write_data
3181 ; 72 delay(50);
3183 0090 ae0032 ldw x,#50
3184 0093 cd0000 call _delay
3186 0096 L1212:
3187 ; 69 while(*s>0) //在有n个字符的字符组中有n+1字节,最后一字节为0,故这里就是把所有字符显示完后退出显示
3189 0096 1e01 ldw x,(OFST+1,sp)
3190 0098 7d tnz (x)
3191 0099 26e8 jrne L7112
3192 ; 74 }
3195 009b 85 popw x
3196 009c 81 ret
3239 ; 76 void main()
3239 ; 77 {
3240 switch .text
3241 009d _main:
3243 009d 88 push a
3244 00000001 OFST: set 1
3247 ; 79 init_stm8();
3249 009e cd001c call _init_stm8
3251 00a1 L3412:
3252 ; 82 init_1602(); //初始化1602
3254 00a1 ad92 call _init_1602
3256 ; 83 display(table0); //显示today···
3258 00a3 ae0000 ldw x,#_table0
3259 00a6 add8 call _display
3261 ; 85 write_com(0x80+0x40); //将地址指针移到第二行
3263 00a8 a6c0 ld a,#192
3264 00aa ada2 call _write_com
3266 ; 86 display(table1); //显示table1中的字符
3268 00ac ae0009 ldw x,#_table1
3269 00af adcf call _display
3271 ; 87 delay(1000); //延时一段时间
3273 00b1 ae03e8 ldw x,#1000
3274 00b4 cd0000 call _delay
3276 ; 89 write_com(0x01); //清屏
3278 00b7 a601 ld a,#1
3279 00b9 ad93 call _write_com
3281 ; 90 write_com(0x38); //显示模式设置
3283 00bb a638 ld a,#56
3284 00bd ad8f call _write_com
3286 ; 91 write_com(0x80+0x10); //地址指针移到第一行第17列中
3288 00bf a690 ld a,#144
3289 00c1 ad8b call _write_com
3291 ; 92 display(table2);
3293 00c3 ae001a ldw x,#_table2
3294 00c6 adb8 call _display
3296 ; 94 write_com(0x80+0x40+0x10); //地址指针移到第二行第17列中
3298 00c8 a6d0 ld a,#208
3299 00ca ad82 call _write_com
3301 ; 95 display(table3);
3303 00cc ae0029 ldw x,#_table3
3304 00cf adaf call _display
3306 ; 96 for(i=0;i<15;i++) //整屏左移15行
3308 00d1 0f01 clr (OFST+0,sp)
3309 00d3 L7412:
3310 ; 98 write_com(0x18); //整屏向左移
3312 00d3 a618 ld a,#24
3313 00d5 cd004e call _write_com
3315 ; 99 delay(200);
3317 00d8 ae00c8 ldw x,#200
3318 00db cd0000 call _delay
3320 ; 96 for(i=0;i<15;i++) //整屏左移15行
3322 00de 0c01 inc (OFST+0,sp)
3325 00e0 7b01 ld a,(OFST+0,sp)
3326 00e2 a10f cp a,#15
3327 00e4 25ed jrult L7412
3328 ; 101 delay(2000);
3330 00e6 ae07d0 ldw x,#2000
3331 00e9 cd0000 call _delay
3334 00ec 20b3 jra L3412
3419 xdef _main
3420 xdef _display
3421 xdef _write_data
3422 xdef _init_1602
3423 xdef _init_stm8
3424 xdef _delay
3425 xdef _write_com
3426 xdef _table3
3427 xdef _table2
3428 xdef _table1
3429 xdef _table0
3448 end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -