stm32 点阵移动程序.docx
if(S<anRow=1.ED_SET.Firs(Row)16行(假如完成,帧扫描,置标记.扫描完ScanFIag=1;只有当SvanFIag=1时,才能切换显示内容)elseIScanFIag=O;)U#ifdefOS_T1CKS_PER_SEC/傲如时神节拍数定义广.说明婺运用ucosll?.OS_EXrr_CRITICA1.。;/*endif1.edDeIayC1.ED_SET.BIankTiine);消隐时间if(1.ED_SET.OnOff=ON)假如显示屏配置为显示,那么开显示if(!1.ED.SETENMode)(1.CdEn_£>:1“开显示else(1.cdEn_H();1JIvoidGct_HzMai(unsignedchar*c<k,unsigncdchar*mat.uint8jsize)(unsignedCharqh.ql;unsignedchari;unsignedlongfoffsct;WifOS_CRITICA1._METHOD=3OS_CPU_SRcpu_sr=Ou:中断函数被设定为模式3Sendifqh=*code:ql=*(+-Hx>de);ImpDala=*tpBuf;tmpData&=OKfY«(X-tmprow);ImPDiKaI=()xf>>improw:ImPData&=(*fb11l6x8mpu*16+8=tj÷i)»improw:*pBuf=tmpData;elseif(row>=8)&&(now<16)Iif。=O)IImPDaS=tpBuf;(mpDla=Oxff;*pBuf=tmpData;PBUf+=1.ED_SET,Widlh;ImpData=pBuf;tmpData&=Ox(X);tmpData=(-foncl6x8tmptt*16÷8*j÷i)>>improw;*Buf=CmPDala;>elseif(row>-8)&&(row<=0)Iif(j=)ItmpData=*pBuf;ImPDala&=0x00;ImpDala=(-font16x8Imptl*16+8*ej+i)<<-improw:tmpData=Oxff»(8÷tmprow);fpBuf'=tnDa;pBuf-=1.ED.SET.Widh:tmpData=pBut,;tmpData&=0x00;ImpDataI=(-fontl6x8mpu"6+8*ji)»(8+ImlXDW)I(Oxff«-(mprw):tmpData&=(*fontl6x8tmptt*16+i)«-tmprow)(0xff»(8÷<mprow);tBuf=ImPDa【a;elseif(row>-16)&&(row<=-8)Iif<j=)ItmpData=pBuf;UnPDataI=Oxfl':pBuf=ImPDala:PBUf-=1.ED_SETWidth;UnPData=*pBf;ImPDala&=0x00;tmpData=(-fontl6x8(tmptt*16+8*j+ij)<<-tmprow:tmpData=Oxff>>(8+tmprow);*Buf=ImPData;>)J)尸*程序名称:voidShowHZ(intl6jrow.intl6jcol.uint8-t4hzk.uint8jback) 输入参数:intl6_trow显示行坐标 *inl6-tcol显示列坐标 *uint8.t*hzk指向指定汉字内码的指针UintSjback指示写入字模的显示援存 输出参数:无 *返回值;无 *描述:在指定位置显示一个16*16汉字.注:运用GBK16字库。 冷«山>»*/voidShow_HZ<intl6_(wj11l6jcol,uint8j*hzk,ui118jback)(Uiin8dzk32J;uint8j*pBuftmp;uin(8_(mp!X>w;Uim8,tmpData:Uinl8,i,j;产纵向取模字库/Gct.HzMat(hzk,dzk,l6);/取字模tmprow=row%8:i1(!back)(pBuf=ButD;Jelse(pBuf=BufI:J(n=PBUf;for(j=()Jv2J+)for(i=0;i<16;i+)(,"推断溢出条件,在这里行可以到-15去iR(row+j)<1.ED_SET.Hcight)&&(col+i)>=0)&&(COIi)<1.ED-SETAVidth)(pBuf=tmp+j*1.ED-SET.Width+(col+i);PBuf的计算方法.纵向取模if(row>=0)&&(row<8)Iif(j=Ow推断在上面还是在下面的IX域ItmpData=pBuf;tm)Data=0x00;全部清等ImpDataI=(-dzk2*i+(j%2)1)»tmprow;U将高位清零,低位放的是原来高位的pBuf=ImpDaia;pBuf+=1.ED.SET.Widlh;tmpData=pBuf;tmpData&=OXo0;/帚零UnpDataI=(dzk2*i+(j%2)«(8ImPrOW);将前一个低位的位放到高位,低位为0tmpData&=Oxff«(8-tmprow);"全部清零tmpDaa=Oxfl->>tmprow;"高位不变.低位全为(mpDal<&=(dzk2*i+(j%2)+1J»tmprow):H将高位清零.低位放的是原来高位的fpBuf'=tnDa;IelseIImPDaIa=pBuf;UImPDaIa&=Oxff«(8-tmprow):"全部清零U(mpDala=0xf»improw;"高位不变,低位全为IImPDMa&=dzk2*i÷(j%2)»ImPrOw):将离位消等,低位放的是原来高位的4pBuf=tmpData:elseif(row>=8>&&(row<16)Iif(j=O)IImpData=pBuf;tmpData=Oxff:pBuf-tmpData;pBuf+=1.ED_SET,Widih;tmpData=pBuf;tmpData&=Ox(X);ImPData=(-dzk2*i+(j(2)»(nxou;*pBuf=tmpData:)elseif(row>-8)&&(row<=0)if0=)ItmpData=pBuf;tmpData&=0x00;tmpData=-dzk2*i+(j%2)J«-tmprow;tmpData=()xf>>(8Improw);*)Buf=UnPDala:pBuf-=1.ED_SET.Width:tmpData=pBuf;ImPDala&=0x00;ImpDataI=(dzk2*i+(j%2)»(8+(mprw)(Oxff«-t11prow):tmpDta&=(izk2*i÷(j%2)-1«-tmprow)(0xfl,>>(8÷tmprow);*pBuf=tmpData;elseif(row>-16)&&(IOW<=8)Iif(j=)QmPDa【a三pBuf;ImpData=Oxff:4pBuf=tmpData:pBuf=1.ED-SETWidih;ImpData=pBuf;tmpData&=0x00:ImPDaIa=(-dzk(2*i÷(j%2)1)<<tmprow;tmpData-OXfr»(8÷tmprow);*pBuf=ImpDala;程序名称:Show_Str(in(l6_txjnd6jy,uint8jfs(r,uin8jback)*食输入参数:inil6y显示行坐标intl6.lx显示列坐标uint8jstr指向字符串的指针”输出参数:无襁返回检无行描述:在指定位置开场及示一个字符:k(xy):起始坐标,voidShoW_SiNini16x,intl6jy,uini8j*str)inti6_tx=x;in16jy=y;字符或者中文uim8jbHz=0;uint8-lforgel_back:/检测显示缓存位置,不允许写入正在显示的缓存/if(BackF1ag).'.'BackFIag前后台标记,初始值为1Ibrgcjback=(kIelse(fbrgct-back=I;前分后台I1.edClear(li>rget_back):“清空要写入的缓存数据未完毕/bHz=l表示是中文中文字符换行符号.忽视WhilC("str!=0)if(!bHz)(ifl!*s(r>0x8O)bHz=l;else(if(*str=13)Istr+;)else“有效用部写入ShoW_ChaNyo,x,*Syfclrge1.baCk):str+;Ix+=8;字符,为全字的一半J)else中文(bHz=O:有汉字库Show_HZ(yO,x0.slr.forgel_ba<k);str+=2:x()*=16;下一个汉字偏移/*等待一帧显示完成,将显示缓存切换到当前缓存,WhiIc(JScanRag);BackFIag=forge.back;voidI.CdCIosc(Void)/关显示*/ill(!1.ED.SET.ENMode)(1.edEn-Ho;关显示)elseI1.edEn_1.O:)1.ED-SE1.OnOff=OFF:Ivoid1.CdOPen(void)(/开显示(消隐)/if(!1.ED_SET.ENMode)(1.CdEn_1.(>:关显示1else(1.edEn_H();J1.ED-SETQnOff=ON:I/左移显示/voidDisplajzMvoe1.efKvoid*p_arg)(uint8-tst11intl6.(i:uinl!6-tIenght:(voi<i)p.arg;vhile<)str写自己要显示的东西!:s<r=p_arg;Iengln=OS_S(r1.en(sir)*8:for(i=-1.ED_SET.Width;i<Icnght;i+=2)"左移.每次移动2位(Show_Str(0i.O.str);/Show-HZ(3.10,str.O);;/Show_HZ(3.10.str.l);OSTimcDlyHMSM(0.0.0,5(X);J)/右移显示/voidDispIayMoveRighUvoid*p_arg)(uint8_tst11intl6.ti;uint!6-tIenght:(void)p_arg;while(l)$tr="写自己要显示的东西;str=p_arg:Ienght=OS_Str1.en(str)*8;for(i=Ienght:i>1.ED-SE.Wdth);i-=2)左移.每次移动2位Show_Slr(Oi.O.str);OSTimeDlylIMSM(0.0.0,500);)I,上移动显示7voidDisplayMovcUp<voidp_arg)(uinl8_t*M11intl6ji;H(voi<i)p.at:whildl)Isir=p_arg:for(i=15;i>-16;i)Show_Str(0,i,Mr);OSTimeDIyHMSM(0.0.0500):)产下移显示*/voidDisplayMveDuwn(void*p_arg)(uint8jstr:intl6_ti;U(void)p-ag:WhiIe(I)(str=p_aij:fr(i=-I5;i<I6;i+)(ShOW_SU(O.i.str);OSnmeDlyHMSM(0.0.0.500):IJI,不移动,但是始终在闪着0示干VniiiDiSPlayBlink(VOid*p_arg)Ilinl8*Str=加油!”;uiu16_tIcnghl;(VOid)P一晔whilc(l)(Ienght=OS-Str1.en(Str)48:ShOW_S<K(1.ED_SETWidth-lcnght2.0.str):将要显示的字放到中间部位1.oiCIcar(O);“清屏,什么都不显示,只消一个缓存的,这样才会闪雄显示1.edClear(I)OSTimeDlyllMSM(0.0.0.500):