找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7157|回复: 28
打印 上一主题 下一主题
收起左侧

从STC12到STC8G单片机的汇编程序移植(日记)

  [复制链接]
跳转到指定楼层
楼主
初学单片机是从STC12开始,写了不少汇编程序,最近多用STC8G来制作,已经移植过几个程序到STC8G,过程相当费力,但每次做完后就算了,没有记下过程,等下一次要再移植又再从头做起,今晚又开始移植一个旧软件,摸了两个小时总算点亮了指示灯,决定一面做一面把移植过程记在网上,就永远不会忘记了。


1.我的底板的指示灯是在P1.6,所以一开始就在程序最前面写CLR P1.6, 应该是马上看见等亮起来,结果没有动静,试了几次,只好先测试UART1:
TEST:

MOV A, #55H
LCALL SENTONEBYTE
LCALL DELAY1
JMP TEST
上载后用STC ISP串口助手就看见从UART1连续传来的55,表示程序会动,而且波特率正确,那为何指示灯不亮呢?翻看已经移植过的旧程序,这才想起原来新的单片8G的IO口初始是是高阻的,必须设置,抄下以下这段贴上,指示灯就亮了:
;-----------I/O CONFIGUE
MOV 93H, #00000000B      ;SET P0 0,0=I/0, 0,1=HIGH CURRENT OUTPUT, 1,0=HIGH IMPEDENY INPUT 1,1=OPEN COLLECTIVE OUTPUT
MOV 94H, #00000000B      ;SET P0 (COMBINE WITH 93H THIS IS SENCOND BIT)
MOV 91H, #00000000B      ;SET P1
MOV 92H, #00000000B      ;SET P1
MOV 95H, #00000000B      ;SET P2
MOV 96H, #00000000B      ;SET P2
MOV 0B1H, #00110100B     ;SET P3
MOV 0B2H, #00000000B     ;SET P3 P3.2=MIC P3.4=X P3.5=Y
MOV 0B3H, #00000000B     ;SET P4
MOV 0B4H, #00000000B     ;SET P4
MOV 0C9H, #00000000B     ;SET P5
MOV 0CAH, #00000000B     ;SET P5
MOV 0CBH, #00000000B     ;SET P6
MOV 0CCH, #00000000B     ;SET P6
;MOV 0E1H, #00000000B     ;SET P7
;MOV 0E2H, #00000000B     ;SET P7

待续。。。


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

来自 2#
ID:283954 发表于 2020-10-20 22:16 | 只看该作者
2. 第二步是调整UART2的波特率,STC12的T2称为BRT , 专门作为波特率产生器,是8位自动重载,控制波特率的寄存器地址是9CH,而STC8G就叫T2,T2有新的模式叫“16 位自动重载”,所以要用到两个新寄存器:
T2H EQU 0D6H           
T2L EQU 0D7H

比较两个初始化程序

STC12的UART2初始化:
INITIAL_UART2: ;USE FOR CLOCK OUT MIDI DATA
MOV S2CON, #01010000B           ;SET AS BAUD VERIABLE, NO ODD/EVEN CHECK
MOV BRT, #BRTLOAD                 ;RELOAD 1152000
ORL AUXR, #10H                       ;BRT START RUN
MOV IE2, #01H                         ;ENABLE UART2 INTERRUPT
RET

STC8G的初始化:
INITIAL_UART2:                       ;USE FOR SENT MIDI DATA
MOV S2CON, #01010000B         ;SET AS BAUD VERIABLE, NO ODD/EVEN CHECK
MOV T2H, #0FFH                     ;18.432 38400 12T=FFF6 1T=FF88 T2 RUN AS 16BIT AUTO LOAD
MOV T2L, #88H                       ;88(18.432M 26U 38400) #6CH=32US=MIDI
CLR 41H
MOV IE2, #00000001B             ;ENABLE TIMER2 INTERR UART2 INTERRUPT
RET

一个用到BRT, 一个用到T2H,T2L, 把STC8的UART2初始程序抄进来就是了。
定时器2还被另一个寄存器AUXR所控制:

MOV AUXR,#01000101B  
;T0x12,T1x12,UART_M0x6,BRTRUN, ;S2SMOD,BRTx12,EXTRAM, S1BRS(1=UART1 USE BRT 0=USE T1)

这里面的BRTRUN位也就是T2R(T2RUN)控制位,位0是控制UART1该使用哪个定时器,改为1后UART1就使用T2为波特率发生器了,这样就可以用STC-ISP的串口助手来观察T2的波特率了。

编译后上载,毫无动静,UART1没有收到号码,连指示灯也不闪了,只好在程序前面放CLR P1.6,证明程序来到LCALL SENTONEBYTE就死机了,最后发现是AUXR的T2RUN位没有开,定时器没有动,旧的UART2初始化有“ORL AUXR, #10H ;BRT START RUN”句子,新的没有,直接把AUXR位4改为1后,就跑动起来,正常了。

待续。。
回复

使用道具 举报

来自 3#
ID:283954 发表于 2020-10-21 17:46 | 只看该作者
谢谢各位的建议, 不打算学C了, 汇编很直接,所有犯错的都是自己的错,不会有语句错的烦恼。STC单片机从STC12到STC8的改进很可喜,而且更加便宜,说明书都有看,但记不了那么多,只有通过实干累计经验才能记得了。

3. 昨天解决了UART2的问题,接下的就是调整延时程序了,很明显STC8跑得比STC12快了一倍左右,LED灯闪很快:

DELAY1:
LCALL DELAY2
LCALL DELAY2
SETB P1.6
LCALL DELAY2
LCALL DELAY2
CLR P1.6
RET

DELAY2:
MOV 35H, #255
SLOWDOWN0:
MOV 34H, #170
SLOWDOWN:
MOV 36H, #2
SLOWDOWN2:
DJNZ 36H, SLOWDOWN2
DJNZ 34H, SLOWDOWN
DJNZ 35H, SLOWDOWN0
RET

改动延迟程序的参数就行了,这些延时程序只有在起始阶段或设定参数时用到,主程序都不用,因为会浪费CPU空转,一切改动好之后,就该脱线运转了,在UART1插入JDY-18蓝牙模块,插上电源,咦!死机不动。拔出蓝牙模块,再上电,会动,插上另一款蓝牙模块,再上电,会动,问题肯定是出在JDY-18模块,究竟是什么原因呢?

同样的模块插在STC12没问题,插上STC8G就不动,怀疑是蓝牙模块上电时TX脚输出了什么字串干扰了CPU的启动,因为手册说CPU启动时会先测试是否有烧录信号,把TX脚剪掉后上电就能启动了,果然干扰来自TX脚。但TX脚是必须用的,如何是好呢?最后是重病乱投医,在TX脚与V+间焊上一个3K上拉电阻,就这样意外解决了,看来是IO脚启动后是高阻问题吧?已经没有精力去追根究底了,会动就好,会动就好,CLOSE CASE 啦!



回复

使用道具 举报

地板
ID:58110 发表于 2020-10-20 08:07 | 只看该作者
你用C写,再移植就不会那么费劲了
回复

使用道具 举报

5#
ID:832072 发表于 2020-10-20 09:06 | 只看该作者
c语言看起来挺难的
回复

使用道具 举报

6#
ID:385637 发表于 2020-10-21 10:37 | 只看该作者
用C比汇编简单多了呀,移植起来也简单。
回复

使用道具 举报

7#
ID:106977 发表于 2020-10-21 12:30 | 只看该作者
移植到不同型号的单片机,即使是STC同一厂家,首先要仔细阅读芯片手册。比较两种芯片硬件的不同点,特别是自己要用到的部分,做好笔记。再开始修改原来的程序。C也好汇编也好,才能减少错误。
回复

使用道具 举报

8#
ID:47286 发表于 2020-10-22 00:16 | 只看该作者
我只会c 楼主这样会汇编的人 我通常都是心中默默仰望的样子

从STC的89系开始就接触 这个厂家的产品线好乱的 比如12C56XX的片子和其它片子N多配置就不一样 同一个ADC中断法函数都不能通用

我个人是自己写了个配置文件 每个程序配置自己的 这样移植起来很容易 只要改一下配置文件 其它不动直接就可以跑起来了
回复

使用道具 举报

9#
ID:401564 发表于 2020-10-22 09:06 | 只看该作者
我用了几年的汇编,现在在开始学C了,汇编的缺点太多了,主要是太考验一个的严谨性了,很有可能只是一个指令不对,你搞一个星期都找不到问题出现在哪里,特别是在有复杂运算的情况下,STC8G倒是有点进步了,有了一个16位的乘除法器,这个到你要用的时候你就会知道这玩意的好处了,其它的功能都是些花里胡哨的功能
但如果还要有更复杂的算法,那就是恐怖级别的,像PID算法,如果用C语言的话,也就是几个语句完成,如果用汇编,估计是200条指令以上,我前几个月在搞一个重力加速度的程序,现在先停下来了,用汇编太难搞了,所以,还是先停下来学一下C
至于移植性,在真正的实用项目面前,C和汇编是一样的,基本是没有移植性,最多是复制几段代码而已,其它的基本是重新写,像STC的单片机从12C到8G,几乎每个外设功能,像ADC,PWM,串口这些的,寄存器和操作都是不一样的,都得按照数据手册来改的
有汇编经验的,学C是相对要快的,思想转变一下,不出几个月,你就会发现C比汇编好太多了,现在的单片机,汇编唯一的优点是在低成本单片机上,用汇编大多是公司指定要用汇编的,用C你也写不下,有的国产单片机程序空间只有512B,但成本应该是一两毛一片,我做LED手电用的就是这种,LED手电它不要什么功能,就是开关,闪灯和低电压指示
至于效率和时序这些优点早就没有了
有C经验的去学汇编,那就难了
回复

使用道具 举报

10#
ID:744327 发表于 2020-10-22 14:12 | 只看该作者
汇编接近单片机底层了。在TX脚与V+间焊上一个3K上拉电阻,是干扰问题。有时,数据传输干扰很严重。
回复

使用道具 举报

11#
ID:283954 发表于 2020-10-24 02:24 | 只看该作者
谢谢YGG分享学习经验,对我而言,汇编就很够用了,能自己规划使用CPU内的资源很有满足感,单片机发展到现在功能可以说是非常齐全,这些功能以前是必须用外部元件来完成的,要玩看门狗,ADC,PWM都得自己设计电路才可以,现在几块钱一个单片机就可以玩了,用汇编来写软件也能做到模块化,用LCALL跑副程序非常好用。

4. 软件移植完成后我又忙着焊多几片板来测试,这里顺便给大家看我用来放置QFN48的装置,sam2695实在太小了,脚又多,在电路板被确定无误的过程中必须有能力焊出一片来测试,因此就搞了这个装置,底版放在一个能X-Y-Z-R调整的微调平台,IC用吸风机吸在半空,用带灯的放大镜看,调整到脚对齐了,关闭吸风机,IC自由落体掉下来就行了。





回复

使用道具 举报

12#
ID:283954 发表于 2021-9-5 02:38 | 只看该作者
移植含ADC的STC12程序到STC8G要点:

最近把含ADC的STC12程序移植到STC8G,因为有过经验,信心十足,可是还是花了几天找不到毛病,无法产生UART中断,又发现多次验证过的T2L和T2H设定值产生不了T2的波特率,后来发现,原本用18.432烧录的程序改为11.0952烧录,就可以得到正确的波特率,够玄了,难道STC8G2K的时钟加快了?直到把初始时的一个副程式给禁止掉,问题才浮现出来:

ADCINIT:
MOV P1ASF, #10000001B     ;SET P1.0 AS ADC FOR VOLUME P1.7 FOR EXT ADC
MOV ADC_R, #0             ;CLEAR PREVIOUS RESULT
MOV ADC_C, 57H            ;P0WER, SPEED1,SPEED0, ADCFLAG, ADCSTART, CHS2, CHS1, CHS0, ON POWER, HIGH SPEED,CLRFLAG, CHANNEL #0
NOP
NOP
NOP
RET

原本STC12做ADC用的PIASF寄存器的地址在STC8G已经改为“IRC频段检测检测”,赋值后时钟频率会改变,造成T2的波特率不对了。

另外STC12与STC8G的ADC_C虽然都是在BCH, 但有几个位已经变更位置了,有一个位拿去用作ADC_EPWMT,这一赋值就产生不可预料的结果,造成UART2产生不了中断。

那个ADC_R没问题,

结论:移植前记得把所有ADC的副程式禁止掉,以免浪费时间找毛病。
回复

使用道具 举报

13#
ID:99987 发表于 2021-9-7 10:56 | 只看该作者
楼主品德、人格不错,是个严谨的人,坚持自己,坚持真理,走自己的路,不随波逐流,楼主继续保持。底层语言是地基,非常重要,高级语言有一定的束缚,虽然代码效率高,但很容易或肯定被卡脖子,因为高级语言非常依赖官方做好的函数库,具体内部构架、执行的内容你并不了解,日后人家不提供了,高级语言做的代码将没有灵魂,只剩躯体没有生机而慢慢衰败而死掉。
回复

使用道具 举报

14#
ID:283954 发表于 2021-9-8 01:55 | 只看该作者
madell 发表于 2021-9-7 10:56
楼主品德、人格不错,是个严谨的人,坚持自己,坚持真理,走自己的路,不随波逐流,楼主继续保持。底层语言 ...

谢谢你的鼓励!用汇编来写单片机程序可以学会很多计算机的底层原理,这也是我兴趣的,随着自己写的代码越来越多,也就有了自己的“库”,写起来也就越来越方便。用高级语言写好像很便利,但出现问题时比较难排除,论坛上很多人问的都是语法错误,汇编语言则直接指到指令行,多好。
回复

使用道具 举报

15#
ID:283954 发表于 2021-9-15 23:47 | 只看该作者
终于把原本是STC125A60S2的ADC程序给移植到STC8G2K64S2了,代码不需要什么改变,就是初始化有些不同:

INITADC:
MOV P_SW2,#80H           ;访问X寄存器打开
MOV DPTR,#ADCTIM;       ;设置 ADC 内部时序 #0FEA8H 这是厂家的数值
MOV A,#3FH                  ;必须通过A才能送到
MOVX @DPTR,A
MOV P_SW2,#00H           ;访问X寄存器关闭
MOV ADCCFG,#04H         ;设置 ADC 时钟为系统时钟/2/XXXX 16=慢,8=快 B6决定结果的格式 8=45US, 4=26US F=每81US一次
;MOV ADC_CONTR,#10001111B ;使能 ADC 模块, #1000 CCCC B 通道暂定15  为内部参考电压1.91V
MOV ADC_CONTR,#10000111B ;使能 ADC 模块, #1000 CCCC B 通道07

ADC的时序设定是放在外(X)寄存器,需要打开一个 P_SW2开关去赋值。

另外发现硬件有些不同,我的红外线发射时靠MCU内的T0产生40K方波在P3.4脚输出的,但两款MCU的T0输出脚不不同的
STC12:
MOV WAKE_CLKO,#00000001B     ;HAVE CLOCK OUTPUT BRT@P1.0 T1@P3.5 T0@P3.4

STC8G:
MOV INTCLKO, #00000010B         ;T2@P3.0 T1@P3.4 T0@P3.5

T0与T1的输出脚对调了,移植完毕后,发现ADC的输出值一直是零,用内部基准电压ADC15测定也是零,我这ADC代码可是经过验证的,绝对没错,但就是不行,只好再去看说明书,看到红字说明:ADC的外部参考电源管脚ADC_VREF+一定不能浮空,这才发现这一低级错误,这管脚就在V+旁边,用络铁焊上点锡造成短路,一切就正常了。




回复

使用道具 举报

16#
ID:262 发表于 2021-9-17 18:34 | 只看该作者
好资料,51黑有你更精彩!!!
回复

使用道具 举报

17#
ID:383215 发表于 2021-9-21 15:29 | 只看该作者
看了这个帖子,真是让我感慨万千啊!楼主从去年10月搞到现在,快一年了,一直不打算学C,精神可嘉!然而我至少用了六年的汇编,才学的C,究竟汇编好用还是C好用,这个问题说清楚足够写出一大篇文章了,简单说,楼主如果还不想学C的话,进展缓慢,我用了六年的汇编,现在让我回去用汇编,我一万个不愿意。看到楼主用了SAM2695,恰恰我也用过,对于楼主焊接SAM2695的方法,我狂晕啊,哪里会有那么复杂?




看看我手工做出来的试验板,焊接SAM2695毫无压力,楼主怎么搞的那么复杂,我只提醒几点,就用恒温精度稍微高一点的936电烙铁,要用纯铜的烙铁头,越尖越好,不够尖自己打磨,再把松香用好,放大镜看见位置摆好了,轻轻松松的就可以把SAM2695焊上去,SAM2695肚子下面的接地,画电路板打一个大一点的孔,最后用烙铁焊点锡进去就完事了。楼主用的是机制板,对我来说,焊接SAM2695更是没有任何压力可言。我手工做电路板,15mil安全间距和线宽成功率很高,10mil安全间距和线宽成功率不太高,由于SAM2695的安全间距和线宽低于10mil,我就做个小扩展板,先把SAM2695焊在扩展板上再把扩展板焊在电路板上,扩展板一次做四个,总有一个成功,扩展板很小,就算做失败浪费也不大,现在10×10以内的打样免费了,我也宁愿自己做板,像这样只做一片搞不清楚是否成功的情况下,我免费做5片就是浪费。我非常尊重别人的劳动,我用热转印做手工电路板轻车熟路,我把需要做试验的电路攒够几个到十几个品种,花个一天时间做出来,就算每个月有四个品种的免费打样,浪费实在太大了,就算免费,依然是浪费,我只有试验成功的电路板,把握性很大的情况下才会去打样。
从汇编到焊接SAM2695,明显感觉楼主最大的问题是不会找捷径,建议楼主立即学习C,我经常把51和AVR单片机的程序双向移植过来,移植过去,楼主觉得STC单片机的两个型号之间的汇编程序移植都有点困难,换个品种的单片机用汇编移植,如何移植?如果楼主继续用汇编就是继续走弯路,楼主觉得汇编直观,担心C不好用,我以前也有这个担心,汇编能做到的,C基本上都能做到,实在做不到的,还可以混合编程,也就是用C来调用汇编,然而我至今都没有搞过混合编程,我遇到的所有问题,C就解决了,C的编程效率比汇编高10倍以上,移植程序也比汇编简单好几倍。楼主的焊工,有待于提高,必须学会用电烙铁把SAM2695焊上去。再看PCB,走线不应该出现90度转角,有的走线到焊盘,没有经过圆心,走线方面仍然有待于提高。


回复

使用道具 举报

18#
ID:283954 发表于 2021-9-22 03:16 | 只看该作者
佩服佩服!能手工焊接sam2695的手艺真高超,我四年前从焊接穿孔插件,慢慢学焊到SMD,越焊越小,到了这QFN48就投降了,恨这些IC怎么这么小,为了克服难关,就购买这些器材来帮忙了,成绩是焊了10片,七片成功,还算不错,基本上证明线路无误就行了。

我的板子都是付款打样,一般要打样三次才定型,所以家里留下大量无用底板,钢网也不少,心感不安,后来听到一句话说“都是机器做的,不要紧的”,也就释怀了。

画底板的水平只是达到“接通”,什么电磁干扰全不懂考虑,好在我的设计多是电池供电,干扰很小,很少跑飞。

我学单片机只是为了做自己的项目,主要是关于电子琴的东西,所以用51单片机就很够了。
汇编语言非常够用了,复杂的下点苦功也就做完了,好处是不必学另一种语法,来这论坛后C语言基本上能看懂,但没有写的欲望,除非有一天要搞什么项目,非得C不可,就会乖乖学起。
回复

使用道具 举报

19#
ID:298713 发表于 2021-9-22 08:47 | 只看该作者
    汇编效率太低,可移植性又差。C语言绝对是开发MCU的好工具!现在的51内核的MCU上集成了很多的外设,如果还是用汇编,可读性与可维护性也差,开发周期也长。在公司研发上这是不允许的。
   另外应该学习使用STC宏晶提供的API库函数做开发工具,效率更高。
回复

使用道具 举报

20#
ID:283954 发表于 2021-10-1 04:02 | 只看该作者
wjw7680 发表于 2021-9-22 08:47
汇编效率太低,可移植性又差。C语言绝对是开发MCU的好工具!现在的51内核的MCU上集成了很多的外设,如 ...

说得没错,学会C语言才有可能在职场找到职位,而我写代码遇到麻烦时,总会想:如果这时老板催说要交货了,得快点,那是一种怎样的心情?因此我不敢把写代码当职业,只能业余玩玩汇编。
回复

使用道具 举报

21#
ID:966104 发表于 2021-10-4 00:09 | 只看该作者
还是用C吧,可以模块化...移植性大大提高
回复

使用道具 举报

22#
ID:345426 发表于 2021-11-24 08:41 | 只看该作者
想起敲汇编的时代,真是爽,估计只有体会过才知道
回复

使用道具 举报

23#
ID:975054 发表于 2021-12-23 09:39 | 只看该作者
过来人不少,我几十年射频工程师,才开始学c语言,stc8起步,四个月了,产品数字化轻量化超低功耗改进很成功.
STC型号太多,小揪揪太多...得反复看手册例程逐步优化.......
回复

使用道具 举报

24#
ID:17204 发表于 2022-2-16 15:27 | 只看该作者
佩服这么多牛人,向这些大佬致敬
回复

使用道具 举报

25#
ID:1003226 发表于 2022-2-23 10:40 | 只看该作者
会汇编的,真是牛人
回复

使用道具 举报

26#
ID:922504 发表于 2022-3-16 09:20 | 只看该作者
dalaoshi 发表于 2021-9-8 01:55
谢谢你的鼓励!用汇编来写单片机程序可以学会很多计算机的底层原理,这也是我兴趣的,随着自己写的代码越 ...

哈哈  我也是这样想的  可惜我还很差  继续学习
回复

使用道具 举报

27#
ID:74953 发表于 2022-5-19 20:48 | 只看该作者
kmsj 发表于 2021-9-21 15:29
看了这个帖子,真是让我感慨万千啊!楼主从去年10月搞到现在,快一年了,一直不打算学C,精神可嘉!然而我 ...

你好大神,这个SAM2695是法国DREAM的MIDI音源芯片吗? 这东西里面不需要写固件,直接用单片机串口输入MIDI格式命令就可以播放音乐是吗?还是需要SPI口?
回复

使用道具 举报

28#
ID:383215 发表于 2022-5-20 20:58 | 只看该作者
cornrn 发表于 2022-5-19 20:48
你好大神,这个SAM2695是法国DREAM的MIDI音源芯片吗? 这东西里面不需要写固件,直接用单片机串口输入MID ...

我不是大神,SAM2695是法国DREAM的MIDI音源芯片,不需要固件,直接发送标准MIDI信号就可以发声,连接USB转MIDI芯片CH345可以播放电脑MIDI音乐,效果超过电脑声卡,本论坛有详细资料下载http://www.51hei.com/bbs/dpj-83651-1.html
回复

使用道具 举报

29#
ID:283954 发表于 2022-11-10 15:19 | 只看该作者
昨晚把以前写好的TFT显示屏程序取出来,用在新的128X160的带触摸显示屏,更改了接脚的定义后,很快就能显示了,但有点毛病,查了半天才发现原来STC12和STC8的双DPTR指针控制器不同(AUXR1 DPS),改正以后就正常了。这代码写好后一直没什么用途,所以没有进步,现在打算用来做一个蓝牙MIDI接收器,显示乐器的名字,方便设定电吹管和电子琴。把代码贴在这,方便查找。






;PIN CONNECT IC:ST7735S 14/09/2018 USE IN ULTRA BOARD
SCL EQU P0.7  ;SPICLK  
SDA EQU P0.6  ;MISO  
BL EQU P0.1   ;(BACK LIGHT)1=ON 0=OFF
RES EQU P0.5  ;(RESET) 0=RESET
DACM EQU P0.4 ;0=COMMAND, 1=DATA
CS EQU P0.3   ;CLIP SELECT 0=ENABLE 1=DISABLE (EVERY COMMAND NEED 0 THEN 1


;30H STORE BYTE FOR WRITE TO LCD
;31H TEMP STORE
;32H FOR COLUME
;33H FOR ROW
;34H FOR STORE H-COLOR BYTE
;35H FOR STORE L-COLOR BYTE
;36H FOR STORE BACK H-COLOR BYTE
;37H FOR STORE BACK L-COLOR BYTE
;38H CHRACTER FOR DISPLAY

;55H, 56H, 57H FOR DELAYLOOP
;70H-7FH STORE STRING FOR DISPLAY
;MOV 97H, #00000111; SLOW DOWN
P4SW EQU 0BBH
P4 EQU 0C0H
MOV P4SW, #00010000B ;TURN ON P4.4 PORT

AUXR1 EQU 0A2H ;7,6=PCA-P4,5=SPI-P4,4=S2-P4,3=GF2,2=ADRJ,1,0=DPS(0=DPTR1,1=DPTR2)
CLR BL
CLR RES         ;RESET
LCALL DELAY2
SETB RES
LCALL DELAY2

MOV 30H, #11H   ;Sleep exit
LCALL LCDCOMMAND
LCALL DELAY1

MOV 30H, #3AH   ;65k mode
LCALL LCDCOMMAND
MOV 30H, #05H
LCALL LCDDATA
MOV 30H, #29H   ;//Display on
LCALL LCDCOMMAND

LCALL SETAREA
LCALL CLEARSCREEN
LCALL DELAY2
SETB BL ;ON BACKLIGHT
LCALL SHOWLOGO ;lao cai pai

MOV DPTR, #1500H
MOV 32H, #0
MOV 33H, #7
MOV 34H, #0FFH
MOV 35H, #0FFH
MOV 36H, #0
MOV 37H, #0
LCALL SETWORD
LCALL SHOWVERSION

START:
MOV 70H, #"F";
MOV 71H, #"I";
MOV 72H, #"S";
MOV 73H, #"H";
MOV 74H, #" ";
MOV 75H, #"L";
MOV 76H, #"e";
MOV 77H, #"e";
MOV 78H, #"K";
MOV 79H, #"u";
MOV 7AH, #"a";
MOV 7BH, #"n";
MOV 7CH, #"Y";
MOV 7DH, #"e";
MOV 7EH, #"w";
MOV 7FH, #13;

MOV 32H, #0
MOV 33H, #0
;LCALL SETWORD
;MOV 38H, #"E";
LCALL SHOWSTRING
MOV 32H, #0
INC 33H
LCALL SHOWSTRING
MOV 32H, #0
INC 33H
LCALL SHOWSTRING
MOV 32H, #0
INC 33H
LCALL SHOWSTRING


LOOP:
SETB P4.4
LCALL DELAY2
CLR P4.4
LCALL DELAY2

JMP LOOP

SHOWSTRING:
MOV R0, #70H
SHOWSTRING1:
MOV A, @R0
CJNE A, #13, SHOWSTRING2
JMP SHOWSTRINGEXIT
SHOWSTRING2:
MOV 38H, A
LCALL SHOWCHR
INC R0
JMP SHOWSTRING1
SHOWSTRINGEXIT:
RET


SHOWVERSION:
MOV AUXR1, #1 ;USE 2DPTR
MOV DPTR ,#1500H
SHOWVERSION2:
MOV A, #0
MOV AUXR1, #1 ;USE 2DPTR
MOVC A, @A+DPTR
INC DPTR
MOV AUXR1, #0 ;USE 1DPTR
CJNE A, #32, SHOWVERSION3 ;USE 127 AS SPACE PATTERN
MOV A, #127
SHOWVERSION3:
CJNE A, #13, GOSHOW
JMP EXITSHOWVERSION
GOSHOW:
MOV 38H, A
LCALL SHOWCHR
JMP SHOWVERSION2
EXITSHOWVERSION:
RET

SHOWLOGO:
MOV 32H, #0 ;COL
MOV 33H, #0 ;ROW
;MOV 34H, #0F0H
MOV 35H, #0
MOV 36H, #0
MOV 37H, #0
MOV DPTR, #1600H
LCALL SETLOGO1
MOV 34H, #0F0H
LCALL SHOWASC32
LCALL SETLOGO2
MOV 34H, #8FH
LCALL SHOWASC32
LCALL SETLOGO3
MOV 34H, #0FFH
LCALL SHOWASC32
RET

SHOWASC32:
MOV 55H, #128
SHOWASC322:
MOV A, #0
MOVC A,@A+DPTR
MOV 31H, A ;STORE
MOV R1,#8
ROLLBIT32:
MOV A, 31H
RLC A
MOV 31H, A
JC ONEPIXEL32
ZEROPIXEL32:
LCALL PUTPIXELZERO
JMP NEXTWORDBIT32
ONEPIXEL32:
LCALL PUTPIXELONE
NEXTWORDBIT32:
DJNZ R1, ROLLBIT32
INC DPTR
DJNZ 55H,SHOWASC322
RET

SHOWCHR:    ;NEED TO COUNT CHARACTER POSITION AT MAP
MOV A, 38H
CJNE A, #32, SHOWCHR1 ;USE 127 AS SPACE PATTERN
MOV A, #127
SHOWCHR1:
CLR C       ;LEARN LONG TIME
SUBB A, #48 ;CHARATER DOT STORE START FROM CHR(48)
MOV B, #16  ;EACH CHARACTER NEED 16BYTE TO STORE
MUL AB
MOV DPL, A
MOV A, B    ;OVER 255 STORE AT B
ADD A, #10H ;ASC MAP START AT #1000H
MOV DPH, A
LCALL SETWORD
LCALL SHOWASC
RET

SETWORD:         ;AUTO INCEASE AFTER SET
MOV 30H, #2AH
LCALL LCDCOMMAND
MOV 30H, #0
LCALL LCDDATA
MOV A, 32H       ;COUNT COL
MOV B, #8
MUL AB
INC A
MOV B, A         ;SAVE TO B

MOV 30H, A       ;x_start+2
LCALL LCDDATA
MOV 30H, #0
LCALL LCDDATA
MOV A, B
ADD A, #8
MOV 30H, A       ;x_end+2
LCALL LCDDATA

MOV 30H, #2BH
LCALL LCDCOMMAND
MOV 30H, #0
LCALL LCDDATA
MOV A, 33H       ;COUNT ROW
MOV B, #16
MUL AB
MOV B, A         ;SAVE TO B
MOV 30H, A       ;Y_start+3
LCALL LCDDATA
MOV 30H, #0
LCALL LCDDATA
MOV A, B
ADD A, #16
MOV 30H, A       ;Y_end+2
LCALL LCDDATA
MOV 30H, #2CH
LCALL LCDCOMMAND
MOV A, 32H
CJNE A, #15, NOTMAX1
MOV 32H, #0
JMP CHECKROW
NOTMAX1:
INC A
MOV 32H, A
JMP CHECKEXIT
CHECKROW:
MOV A, 33H
CJNE A, #7, NOTMAX2 ;7
MOV 33H, #0
JMP CHECKEXIT
NOTMAX2:
INC A
MOV 33H, A
CHECKEXIT:
RET

SHOWASC:
MOV R5, #16
SHOWASC2:
MOV A, #0
MOVC A,@A+DPTR
MOV 31H, A ;STORE
MOV R1,#8 ;9
ROLLBIT:
MOV A, 31H
RLC A
MOV 31H, A
JC ONEPIXEL
ZEROPIXEL:
LCALL PUTPIXELZERO
JMP NEXTWORDBIT
ONEPIXEL:
LCALL PUTPIXELONE
NEXTWORDBIT:
DJNZ R1, ROLLBIT
LCALL PUTPIXELZERO
INC DPTR
DJNZ R5,SHOWASC2
RET

PUTPIXELONE:
MOV 30H, 34H ;BLUE SCREEN
LCALL LCDDATA
MOV 30H, 35H
LCALL LCDDATA
RET

PUTPIXELZERO:
MOV 30H, 36H ;WHITE SCREEN
LCALL LCDDATA
MOV 30H, 37H
LCALL LCDDATA
RET

CLEARSCREEN:
MOV 34H, #00H
MOV 35H, #0H
MOV 36H, #0
MOV 37H, #0
MOV R4, #64 ;#192
CLEARBIT:
MOV 30H, 34H
LCALL LCDDATA
MOV 30H, 35H
LCALL LCDDATA
DJNZ R3, CLEARBIT
DJNZ R4, CLEARBIT
RET

LCDDATA:
CLR CS
SETB DACM
LCALL SPIWRITE
SETB CS
RET

LCDCOMMAND:
CLR CS
CLR DACM
LCALL SPIWRITE
SETB CS
RET

SPIWRITE: ;30H
MOV R6, #8
NEXTBIT:
MOV A, 30H
RLC A
MOV 30H, A
;MOV P2, A
JC ONE
CLR SDA
CLR SCL ;CLOCK
NOP
NOP
SETB SCL
JMP ZERO
ONE:
SETB SDA
CLR SCL ;CLOCK
NOP
NOP
NOP
NOP
NOP
NOP
SETB SCL
ZERO:
DJNZ R6, NEXTBIT
RET

SETLOGO1:
MOV 30H, #2AH
LCALL LCDCOMMAND
MOV 30H, #0
LCALL LCDDATA
MOV 30H, #15      ;x_start+2 #18
LCALL LCDDATA
MOV 30H, #0
LCALL LCDDATA
MOV 30H,#46    ;x_end+2
LCALL LCDDATA
LCALL SETLOGOV
RET

SETLOGO2:
MOV 30H, #2AH
LCALL LCDCOMMAND
MOV 30H, #0
LCALL LCDDATA
MOV 30H, #49      ;x_start+2
LCALL LCDDATA
MOV 30H, #0
LCALL LCDDATA
MOV 30H,#80     ;x_end+2
LCALL LCDDATA
LCALL SETLOGOV
RET

SETLOGO3:
MOV 30H, #2AH
LCALL LCDCOMMAND
MOV 30H, #0
LCALL LCDDATA
MOV 30H, #83      ;x_start+2
LCALL LCDDATA
MOV 30H, #0
LCALL LCDDATA
MOV 30H,#114     ;x_end+2
LCALL LCDDATA
LCALL SETLOGOV
RET

SETLOGOV:
MOV 30H, #2BH
LCALL LCDCOMMAND
MOV 30H, #0
LCALL LCDDATA
MOV 30H, #76      ;Y_start+3
LCALL LCDDATA
MOV 30H, #0
LCALL LCDDATA
MOV 30H,#108    ;Y_end+2
LCALL LCDDATA
MOV 30H, #2CH
LCALL LCDCOMMAND
RET

SETAREA: ;THIS SET AN AREA
MOV 30H, #2AH    ;COLUME SET
LCALL LCDCOMMAND
MOV 30H, #0
LCALL LCDDATA
MOV 30H, #2      ;x_start+2 2
LCALL LCDDATA
MOV 30H, #0
LCALL LCDDATA
MOV 30H,#129     ;x_end+2
LCALL LCDDATA

MOV 30H, #2BH    ;ROW SET
LCALL LCDCOMMAND
MOV 30H, #0
LCALL LCDDATA
MOV 30H, #1      ;Y_start+3
LCALL LCDDATA
MOV 30H, #0
LCALL LCDDATA
MOV 30H,#128    ;Y_end+2
LCALL LCDDATA
MOV 30H, #2CH
LCALL LCDCOMMAND
RET

DELAY1:
MOV 56H, #20
DELAY1A:
MOV 55H, #200
DELAY1B:
DJNZ 55H, DELAY1B
DJNZ 56H, DELAY1A
RET

DELAY2:
MOV 56H, #255
DELAY2A:
MOV 55H, #255
DELAY2B:
MOV 57H, #2
DELAY2C:
DJNZ 57H, DELAY2C
DJNZ 55H, DELAY2B
DJNZ 56H, DELAY2A
RET


ORG 1000H ;ASC 8X16 FONT:SYSTEM
DB 00H,00H,00H,1EH,33H,37H,37H,33H,3BH,3BH,33H,1EH,00H,00H,00H,00H;"0",31
DB 00H,00H,00H,0CH,1CH,7CH,0CH,0CH,0CH,0CH,0CH,0CH,00H,00H,00H,00H;"1",32
DB 00H,00H,00H,3CH,66H,66H,06H,0CH,18H,30H,60H,7EH,00H,00H,00H,00H;"2",33
DB 00H,00H,00H,3CH,66H,66H,06H,1CH,06H,66H,66H,3CH,00H,00H,00H,00H;"3",34
DB 00H,00H,00H,30H,30H,36H,36H,36H,66H,7FH,06H,06H,00H,00H,00H,00H;"4",35
DB 00H,00H,00H,7EH,60H,60H,60H,7CH,06H,06H,0CH,78H,00H,00H,00H,00H;"5",36
DB 00H,00H,00H,1CH,18H,30H,7CH,66H,66H,66H,66H,3CH,00H,00H,00H,00H;"6",37
DB 00H,00H,00H,7EH,06H,0CH,0CH,18H,18H,30H,30H,30H,00H,00H,00H,00H;"7",38
DB 00H,00H,00H,3CH,66H,66H,76H,3CH,6EH,66H,66H,3CH,00H,00H,00H,00H;"8",39
DB 00H,00H,00H,3CH,66H,66H,66H,66H,3EH,0CH,18H,38H,00H,00H,00H,00H;"9",40
DB 00H,00H,00H,00H,00H,00H,18H,18H,00H,00H,00H,00H,18H,18H,00H,00H;":",0
DB 00H,00H,00H,00H,00H,00H,00H,10H,00H,00H,00H,00H,00H,10H,10H,20H;";",1
DB 00H,00H,00H,02H,04H,08H,10H,20H,40H,20H,10H,08H,04H,02H,00H,00H;"<",2
DB 00H,00H,00H,00H,00H,00H,0FEH,00H,00H,00H,0FEH,00H,00H,00H,00H,00H;"=",3
DB 00H,00H,00H,40H,20H,10H,08H,04H,02H,04H,08H,10H,20H,40H,00H,00H;">",4
DB 00H,00H,00H,3CH,42H,42H,62H,02H,04H,08H,08H,00H,18H,18H,00H,00H;"?",5
DB 00H,00H,00H,38H,44H,5AH,0AAH,0AAH,0AAH,0AAH,0B4H,42H,44H,38H,00H,00H;"@",6
DB 00H,00H,00H,18H,3CH,66H,66H,66H,7EH,66H,66H,66H,00H,00H,00H,00H;"A",0
DB 00H,00H,00H,7CH,66H,66H,66H,7CH,66H,66H,66H,7CH,00H,00H,00H,00H;"B",1
DB 00H,00H,00H,3CH,66H,66H,60H,60H,60H,66H,66H,3CH,00H,00H,00H,00H;"C",2
DB 00H,00H,00H,78H,6CH,66H,66H,66H,66H,66H,6CH,78H,00H,00H,00H,00H;"D",3
DB 00H,00H,00H,7EH,60H,60H,60H,7CH,60H,60H,60H,7EH,00H,00H,00H,00H;"E",4
DB 00H,00H,00H,7EH,60H,60H,60H,7CH,60H,60H,60H,60H,00H,00H,00H,00H;"F",5
DB 00H,00H,00H,3CH,66H,66H,60H,60H,6EH,66H,66H,3EH,00H,00H,00H,00H;"G",6
DB 00H,00H,00H,66H,66H,66H,66H,7EH,66H,66H,66H,66H,00H,00H,00H,00H;"H",7
DB 00H,00H,00H,3CH,18H,18H,18H,18H,18H,18H,18H,3CH,00H,00H,00H,00H;"I",8
DB 00H,00H,00H,06H,06H,06H,06H,06H,06H,66H,66H,3CH,00H,00H,00H,00H;"J",9
DB 00H,00H,00H,66H,66H,6CH,6CH,78H,6CH,6CH,66H,66H,00H,00H,00H,00H;"K",10
DB 00H,00H,00H,60H,60H,60H,60H,60H,60H,60H,60H,7EH,00H,00H,00H,00H;"L",11
DB 00H,00H,00H,63H,63H,77H,6BH,6BH,6BH,63H,63H,63H,00H,00H,00H,00H;"M",12
DB 00H,00H,00H,63H,63H,73H,7BH,6FH,67H,63H,63H,63H,00H,00H,00H,00H;"N",13
DB 00H,00H,00H,3CH,66H,66H,66H,66H,66H,66H,66H,3CH,00H,00H,00H,00H;"O",14
DB 00H,00H,00H,7CH,66H,66H,66H,7CH,60H,60H,60H,60H,00H,00H,00H,00H;"P",15
DB 00H,00H,00H,3CH,66H,66H,66H,66H,66H,66H,66H,3CH,0CH,06H,00H,00H;"Q",16
DB 00H,00H,00H,7CH,66H,66H,66H,7CH,6CH,66H,66H,66H,00H,00H,00H,00H;"R",17
DB 00H,00H,00H,3CH,66H,60H,30H,18H,0CH,06H,66H,3CH,00H,00H,00H,00H;"S",18
DB 00H,00H,00H,7EH,18H,18H,18H,18H,18H,18H,18H,18H,00H,00H,00H,00H;"T",19
DB 00H,00H,00H,66H,66H,66H,66H,66H,66H,66H,66H,3CH,00H,00H,00H,00H;"U",21
DB 00H,00H,00H,66H,66H,66H,66H,66H,66H,66H,3CH,18H,00H,00H,00H,00H;"V",21
DB 00H,00H,00H,63H,63H,63H,6BH,6BH,6BH,36H,36H,36H,00H,00H,00H,00H;"W",22
DB 00H,00H,00H,66H,66H,34H,18H,18H,2CH,66H,66H,66H,00H,00H,00H,00H;"X",23
DB 00H,00H,00H,66H,66H,66H,66H,3CH,18H,18H,18H,18H,00H,00H,00H,00H;"Y",24
DB 00H,00H,00H,7EH,06H,06H,0CH,18H,30H,60H,60H,7EH,00H,00H,00H,00H;"Z",25
DB 00H,1EH,10H,10H,10H,10H,10H,10H,10H,10H,10H,10H,10H,10H,1EH,00H;"[",0
DB 00H,00H,40H,40H,20H,20H,10H,10H,10H,08H,08H,04H,04H,04H,02H,02H;"\",1
DB 00H,78H,08H,08H,08H,08H,08H,08H,08H,08H,08H,08H,08H,08H,78H,00H;"]",2
DB 00H,1CH,22H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H;"^",3
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,01H,01H,01H,01H,01H,01H,00H;"-",1 USE _ TO DISPLAY-
DB 00H,60H,10H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H;"`",5
DB 00H,00H,00H,00H,00H,00H,00H,3CH,42H,1EH,22H,42H,42H,3FH,00H,00H;"a",6
DB 00H,00H,00H,0C0H,40H,40H,40H,58H,64H,42H,42H,42H,64H,58H,00H,00H;"b",7
DB 00H,00H,00H,00H,00H,00H,00H,1CH,22H,40H,40H,40H,22H,1CH,00H,00H;"c",8
DB 00H,00H,00H,06H,02H,02H,02H,1EH,22H,42H,42H,42H,26H,1BH,00H,00H;"d",9
DB 00H,00H,00H,00H,00H,00H,00H,3CH,42H,7EH,40H,40H,42H,3CH,00H,00H;"e",10
DB 00H,00H,00H,0FH,11H,10H,10H,7EH,10H,10H,10H,10H,10H,7CH,00H,00H;"f",11
DB 00H,00H,00H,00H,00H,00H,00H,3EH,44H,44H,38H,40H,3CH,42H,42H,3CH;"g",12
DB 00H,00H,00H,0C0H,40H,40H,40H,5CH,62H,42H,42H,42H,42H,0E7H,00H,00H;"h",13
DB 00H,00H,00H,30H,30H,00H,00H,70H,10H,10H,10H,10H,10H,7CH,00H,00H;"i",14
DB 00H,00H,00H,0CH,0CH,00H,00H,1CH,04H,04H,04H,04H,04H,04H,44H,78H;"j",15
DB 00H,00H,00H,0C0H,40H,40H,40H,4EH,48H,50H,68H,48H,44H,0EEH,00H,00H;"k",16
DB 00H,00H,00H,70H,10H,10H,10H,10H,10H,10H,10H,10H,10H,7CH,00H,00H;"l",17
DB 00H,00H,00H,00H,00H,00H,00H,0FEH,49H,49H,49H,49H,49H,0EDH,00H,00H;"m",18
DB 00H,00H,00H,00H,00H,00H,00H,0DCH,62H,42H,42H,42H,42H,0E7H,00H,00H;"n",19
DB 00H,00H,00H,00H,00H,00H,00H,3CH,42H,42H,42H,42H,42H,3CH,00H,00H;"o",20
DB 00H,00H,00H,00H,00H,00H,00H,0D8H,64H,42H,42H,42H,44H,78H,40H,0E0H;"p",21
DB 00H,00H,00H,00H,00H,00H,00H,1EH,22H,42H,42H,42H,22H,1EH,02H,07H;"q",22
DB 00H,00H,00H,00H,00H,00H,00H,0EEH,32H,20H,20H,20H,20H,0F8H,00H,00H;"r",23
DB 00H,00H,00H,00H,00H,00H,00H,3EH,42H,40H,3CH,02H,42H,7CH,00H,00H;"s",24
DB 00H,00H,00H,00H,00H,10H,10H,7CH,10H,10H,10H,10H,10H,0CH,00H,00H;"t",25
DB 00H,00H,00H,00H,00H,00H,00H,0C6H,42H,42H,42H,42H,46H,3BH,00H,00H;"u",26
DB 00H,00H,00H,00H,00H,00H,00H,0E7H,42H,24H,24H,28H,10H,10H,00H,00H;"v",27
DB 00H,00H,00H,00H,00H,00H,00H,0D7H,92H,92H,0AAH,0AAH,44H,44H,00H,00H;"w",28
DB 00H,00H,00H,00H,00H,00H,00H,6EH,24H,18H,18H,18H,24H,76H,00H,00H;"x",29
DB 00H,00H,00H,00H,00H,00H,00H,0E7H,42H,24H,24H,28H,18H,10H,10H,0E0H;"y",30
DB 00H,00H,00H,00H,00H,00H,00H,7EH,44H,08H,10H,10H,22H,7EH,00H,00H;"z",31
DB 00H,03H,04H,04H,04H,04H,04H,08H,04H,04H,04H,04H,04H,04H,03H,00H;"{",32
DB 08H,08H,08H,08H,08H,08H,08H,08H,08H,08H,08H,08H,08H,08H,08H,08H;"|",33
DB 00H,60H,10H,10H,10H,10H,10H,08H,10H,10H,10H,10H,10H,10H,60H,00H;"}",34
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,0CH,0CH,00H,00H,00H;".",0  USE ~ TO DISPLAY . DOT
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H;" ", SPACE AS 128

ORG 1500H
DB "POWER MIDI 1~0",13;

ORG 1600H ;PIXEL 32X32 16BIT 5,5,5
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,03H,00H,00H;
DB 00H,03H,0C0H,00H,00H,01H,0C4H,00H,00H,01H,0C3H,00H,00H,03H,0F7H,00H;
DB 00H,3FH,0F7H,00H,00H,1FH,0CEH,00H,00H,0FH,9CH,00H,00H,03H,38H,00H;
DB 00H,07H,7FH,80H,00H,0FH,0FFH,0C0H,00H,7FH,0C3H,80H,03H,0FBH,80H,00H;
DB 0FH,0C7H,20H,00H,0FH,0FH,18H,00H,00H,1EH,3CH,00H,00H,3EH,0FCH,00H;
DB 00H,7BH,0E0H,00H,00H,0E7H,80H,00H,01H,0C6H,02H,00H,03H,86H,02H,00H;
DB 07H,04H,02H,00H,0EH,06H,0FH,00H,18H,03H,0FFH,00H,00H,03H,0FEH,00H;
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H;"?",0
DB 00H,00H,00H,00H,00H,00H,18H,00H,00H,00H,1CH,00H,00H,0CH,1CH,00H;
DB 00H,0EH,1CH,00H,00H,06H,1EH,00H,00H,07H,7FH,00H,00H,1FH,0F8H,00H;
DB 00H,7EH,30H,00H,00H,7EH,70H,00H,00H,71H,0F8H,00H,00H,07H,0C0H,00H;
DB 00H,1CH,38H,00H,00H,07H,0DCH,00H,00H,49H,0B8H,00H,00H,39H,0E0H,00H;
DB 00H,39H,0F8H,00H,00H,17H,0F8H,00H,00H,7FH,0C0H,00H,03H,0FFH,0C0H,00H;
DB 07H,0CFH,0F0H,00H,02H,1CH,0F8H,00H,00H,18H,0BEH,00H,00H,30H,9FH,80H;
DB 00H,70H,8FH,0E0H,00H,0C1H,87H,0F8H,03H,11H,83H,0FCH,00H,0FH,80H,00H;
DB 00H,0FH,80H,00H,00H,07H,80H,00H,00H,03H,80H,00H,00H,00H,00H,00H;"?",1
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,30H,00H;
DB 00H,10H,30H,00H,00H,38H,60H,00H,00H,1CH,0E7H,00H,00H,18H,0DFH,0C0H;
DB 03H,19H,0F8H,0E0H,03H,9BH,98H,0E0H,03H,9BH,1CH,0E0H,03H,7BH,0FDH,0C0H;
DB 03H,0FDH,0F9H,80H,03H,71H,0BBH,80H,03H,21H,0BFH,00H,03H,5DH,0FEH,00H;
DB 03H,0FCH,0ECH,00H,03H,0F8H,0CCH,00H,03H,0F8H,0FFH,0E0H,03H,91H,0FFH,0F0H;
DB 03H,17H,0ECH,00H,03H,17H,8CH,00H,03H,10H,0CH,00H,06H,10H,0CH,00H;
DB 06H,10H,0CH,00H,02H,10H,0CH,00H,02H,10H,0CH,00H,00H,00H,0CH,00H;
DB 00H,00H,08H,00H,00H,00H,08H,00H,00H,00H,00H,00H,00H,00H,00H,00H;"?",2

END

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表