锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

touch cube1.1程序(立方体或光立方)

时间:2024-05-25 02:37:11

前期发布的程序是为1.0版本,经过我的不断测试,发现存在漏洞,现将修正的后的控制程序发布如下。
现在发现不讲公德的人太多,转载我的文章、程序都不注明出自我处,实属无奈,有些甚至摸去我照片的水印·····为了保障我的原创性,后期的更新程序笔者都会发在个人QQ空间里,还要麻烦大家多点下鼠标,希望大家理解。
程序更新内容:
1、解决了单片机死机问题
2、动画编码修改为16进制,方便替换为c语言码表,c语言朋友可以用记事本把ASM格式的字符替换为c语言的0X格式,简单而快捷。
3、简化了部分代码
4、去除了一个子程序,现在只有中断程序和显示程序,不再以调用方式。
源程序代码:
说明:不管是1.0还是1.1程序,标值内的数字编号到了后来是乱的,大家可以忽略。

outputledx equ p1   ;伪定义部分,分别定义了X/Y/Z轴的输出端口outputledy equ p2outputledz equ p3org  00h            ;程序起始地址                                                                                          sjmp start          ;开始程序                                                                          org  000bh          ;定时中断0地址sjmp count          ;动画次数变量函数                                                  ;; 1      start:              ;                                                                     初   mov dptr,#tab       ;表格首地址给DPTR寄存器,此时首地址为6fh,程序长度不同,首地址不同MOV SP,#70h         ;设置堆栈                                                             始  ;mov a,#0           ;在变量变化中,理论上这条是应该加上去的,但我屏蔽后也没发现有什么问题mov r0,#6dh         ;r0,r1为显示计数变量,用次方法可以突破255上限,数值由计算而得        化                                                 mov r1,#00h         ;r0为dpl变量储存器,r1为dph储存器,c语言中,可直接定义16为变量查表    部                                     mov r3,#0feh        ;Y轴起始位初值                                                        分mov r4,#30          ;此寄存器控制的动画变化速度                                                                   SETB EA             ;开起中断 MOV TMOD,#01H       ;定时器0工作在方式1    SETB ET0            ;开起定时中断1                                                MOV TH0,#0d8H       ;TH0与TL0决定着中断的发生时间,与r4的乘机即为动画切换时间             MOV TL0,#0f0H                                                                            ;;                                    ;;SETB TR0            ;启动定时器0main:                                                                                    ;;2mov  r2,#0feh       ;Z轴起始位初值                                                        显mov  dpl,r0         ;动画显示变量,dph与dpl即为DPTR的高(八位)低(八位)寄存器           示mov  dph,r1         ;dptr的地址变化由r0、r1共同控制,变量的数学计算参见count程序段        程cjne r1,#5ah,led    ;判断显示是否完成,完成则跳转到开始,否则继续显示,数值计算而得       序sjmp  start         ;                                                                      led:                ;                                                                     mov  outputledz,r2  ;Z轴控制                                                              jump:               ;单画面显示程序,与8x8点阵显示无异                                  ;;4mov  outputledy,r3  ;Y轴控制字                                                            单mov  a,#0           ;清除a的值,使其不影响下面的查表,此处与一般的用法不一样,请注意      画movc a,@a+dptr      ;查表后的数值给a                                                      面mov  outputledx,a   ;a给X轴显示                                                           显mov  r7,#255        ;延时关断,修改此处的时间可以粗略的条件亮度,此处为255us              程djnz r7,$           ;当然,我也期待有朋友给出pwm条件亮度的程序,并且公开代码              序mov  outputledx,#00hinc  dptr           ;dptr寄存器自加1,目的是为取下一个表值mov  a,r3           ;Y轴的切换rl   a              mov  r3,acjne r3,#0feh,jump  ;Y轴未完全扫描完继续该子程序,扫描完毕则下一步程序mov  r3,#0feh       ;Z轴的切换,此段可以写在其他地方,比如说led程序段mov  a,r2           ;用c语言的朋友不必太在意Y轴,Z轴控制程序的位置,rl   a              ;因为是顺序执行的,符合扫描原理即可mov  r2,a            cjne r2,#0feh,led   ;判断Z轴是否显示完,未完继续,完成挑战到变量修正程序main            ;;sjmp maincount:              ;中断服务子程序(同时包含了数学计算,使得动画变换)                 ;;3DJNZ R4,NEXT        ;判断是否发生了2次中断,是则执行下面的程序,不是返回主程序           中MOV  R4,#30         ;变量修正                                                            断mov  r6,amov  a,r0           ;dptr第八位+64                                                       程add  a,#64          ;                                                                    序mov  r0,a           ;变量保存mov  a,r1           ;dptr高八位+进位,+0不改变r1的数值,但addc指令为带进位加法,addc a,#0           ;第八位加分中产生的进位会由此加到r1里面,保证数学计算准确mov  r1,aclr  cy             ;标志位清零mov  a,r6NEXT:MOV TH0,#0d8HMOV TL0,#0f0HRETI                ;中断返回                                                          ;;                                                                                                                         tab:      ; ,因为控制程序只写到了     ;6d位置,那么实际可以操作的rom为ffff-006dh,有着相当大的发挥空间,     ;在这里要说一下的是,c语言可以直接定义16位变量去查表,但是c语言占用的资源还是很多的,如果想写满rom     ;就必须要知道表格的其实地址,再除以64就知道能写多少动画了,如果用16进制字符,每个画面0.125秒(很快很犀利的效果了)     ;那么64K的rom还是能写到3分钟左右的,甚至更长,我对c语言不是很了解,不知道如果计算出表格的首地址,汇编就简单多了,     ;既可以数数计算,也可以单步调试直接看结果,有耐心编辑动画的朋友,一定要注意,不要溢出rom!!!;1db 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffhdb 00h,00h,00h,00h,00h,00h,00h,00hdb 00h,00h,00h,00h,00h,00h,00h,00hdb 00h,00h,00h,00h,00h,00h,00h,00hdb 00h,00h,00h,00h,00h,00h,00h,00hdb 00h,00h,00h,00h,00h,00h,00h,00hdb 00h,00h,00h,00h,00h,00h,00h,00hdb 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh;2db 0ffh,81h,81h,81h,81h,81h,81h,0ffhdb 00h,7eh,7eh,7eh,7eh,7eh,7eh,00hdb 00h,00h,00h,00h,00h,00h,00h,00hdb 00h,00h,00h,00h,00h,00h,00h,00hdb 00h,00h,00h,00h,00h,00h,00h,00hdb 00h,00h,00h,00h,00h,00h,00h,00hdb 00h,7eh,7eh,7eh,7eh,7eh,7eh,00hdb 0ffh,81h,81h,81h,81h,81h,81h,0ffh;3db 0ffh,81h,81h,81h,81h,81h,81h,0ffhdb 00h,7eh,42h,42h,42h,42h,7eh,00hdb 00h,00h,3ch,3ch,3ch,3ch,00h,00hdb 00h,00h,00h,00h,00h,00h,00h,00hdb 00h,00h,00h,00h,00h,00h,00h,00hdb 00h,00h,3ch,3ch,3ch,3ch,00h,00hdb 00h,7eh,42h,42h,42h,42h,7eh,00hdb 0ffh,81h,81h,81h,81h,81h,81h,0ffh;4db 0ffh,81h,81h,81h,81h,81h,81h,0ffhdb 00h,7eh,42h,42h,42h,42h,7eh,00hdb 00h,00h,3ch,24h,24h,3ch,00h,00hdb 00h,00h,00h,18h,18h,00h,00h,00hdb 00h,00h,00h,18h,18h,00h,00h,00hdb 00h,00h,3ch,24h,24h,3ch,00h,00hdb 00h,7eh,42h,42h,42h,42h,7eh,00hdb 0ffh,81h,81h,81h,81h,81h,81h,0ffh;5db 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffhdb 00h,00h,00h,00h,00h,00h,00h,00hdb 00h,00h,00h,00h,00h,00h,00h,00hdb 00h,00h,00h,00h,00h,00h,00h,00hdb 00h,00h,00h,00h,00h,00h,00h,00hdb 00h,00h,00h,00h,00h,00h,00h,00hdb 00h,00h,00h,00h,00h,00h,00h,00hdb 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh;6db 0ffh,81h,81h,81h,81h,81h,81h,0ffhdb 00h,7eh,7eh,7eh,7eh,7eh,7eh,00hdb 00h,00h,00h,00h,00h,00h,00h,00hdb 00h,00h,00h,00h,00h,00h,00h,00hdb 00h,00h,00h,00h,00h,00h,00h,00hdb 00h,00h,00h,00h,00h,00h,00h,00hdb 00h,7eh,7eh,7eh,7eh,7eh,7eh,00hdb 0ffh,81h,81h,81h,81h,81h,81h,0ffh;7db 0ffh,81h,81h,81h,81h,81h,81h,0ffhdb 00h,7eh,42h,42h,42h,42h,7eh,00hdb 00h,00h,3ch,3ch,3ch,3ch,00h,00hdb 00h,00h,00h,00h,00h,00h,00h,00hdb 00h,00h,00h,00h,00h,00h,00h,00hdb 00h,00h,3ch,3ch,3ch,3ch,00h,00hdb 00h,7eh,42h,42h,42h,42h,7eh,00hdb 0ffh,81h,81h,81h,81h,81h,81h,0ffh;8db 0ffh,81h,81h,81h,81h,81h,81h,0ffhdb 00h,7eh,42h,42h,42h,42h,7eh,00hdb 00h,00h,3ch,24h,24h,3ch,00h,00hdb 00h,00h,00h,18h,18h,00h,00h,00hdb 00h,00h,00h,18h,18h,00h,00h,00hdb 00h,00h,3ch,24h,24h,3ch,00h,00hdb 00h,7eh,42h,42h,42h,42h,7eh,00hdb 0ffh,81h,81h,81h,81h,81h,81h,0ffh;9db 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffhdb 00h,00h,00h,00h,00h,00h,00h,00hdb 00h,00h,00h,00h,00h,00h,00h,00hdb 00h,00h,00h,00h,00h,00h,00h,00hdb 00h,00h,00h,00h,00h,00h,00h,00hdb 00h,00h,00h,00h,00h,00h,00h,00hdb 00h,00h,00h,00h,00h,00h,00h,00hdb 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh;10db 0ffh,81h,81h,81h,81h,81h,81h,0ffhdb 00h,7eh,7eh,7eh,7eh,7eh,7eh,00hdb 00h,00h,00h,00h,00h,00h,00h,00hdb 00h,00h,00h,00h,00h,00h,00h,00hdb 00h,00h,00h,00h,00h,00h,00h,00hdb 00h,00h,00h,00h,00h,00h,00h,00hdb 00h,7eh,7eh,7eh,7eh,7eh,7eh,00hdb 0ffh,81h,81h,81h,81h,81h,81h,0ffh;11db 0ffh,81h,81h,81h,81h,81h,81h,0ffhdb 00h,7eh,42h,42h,42h,42h,7eh,00hdb 00h,00h,3ch,3ch,3ch,3ch,00h,00hdb 00h,00h,00h,00h,00h,00h,00h,00hdb 00h,00h,00h,00h,00h,00h,00h,00hdb 00h,00h,3ch,3ch,3ch,3ch,00h,00hdb 00h,7eh,42h,42h,42h,42h,7eh,00hdb 0ffh,81h,81h,81h,81h,81h,81h,0ffh;12db 0ffh,81h,81h,81h,81h,81h,81h,0ffhdb 00h,7eh,42h,42h,42h,42h,7eh,00hdb 00h,00h,3ch,24h,24h,3ch,00h,00hdb 00h,00h,00h,18h,18h,00h,00h,00hdb 00h,00h,00h,18h,18h,00h,00h,00hdb 00h,00h,3ch,24h,24h,3ch,00h,00hdb 00h,7eh,42h,42h,42h,42h,7eh,00hdb 0ffh,81h,81h,81h,81h,81h,81h,0ffh;13db 00h,00h,00h,00h,00h,00h,00h,00hdb 0ffh,0ffh,0c3h,
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章