stm32 点阵相关程序Word格式.docx
- 文档编号:20555671
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:23
- 大小:20.80KB
stm32 点阵相关程序Word格式.docx
《stm32 点阵相关程序Word格式.docx》由会员分享,可在线阅读,更多相关《stm32 点阵相关程序Word格式.docx(23页珍藏版)》请在冰豆网上搜索。
LedScanTime=0;
/*关显示(消隐)*/
if(!
LED_SET.ENMode)
{
LedEn_H();
//关显示
}
else
LedEn_L();
}
lenght=LED_SET.Width;
/*输出列数据*/
BackFlag)
data=Buf0+offset_addr;
while(lenght--)
{
LedOutBit(*data,ScanRow);
data++;
}
data=Buf1+offset_addr;
LedClk_L();
LedLat_L();
//锁存数据
LedDelay(10);
LedLat_H();
offset_addr=LedScanTime;
}
/*输出行扫描信号*/
ScanRow&
=0x0F;
LedRow(ScanRow);
ScanRow++;
//行+1
if(ScanRow==LED_SET.ScanMode)//16
ScanRow=0;
if(ScanRow==LED_SET.FirstRow)//如果完成一帧扫描,置标志,扫描完16行
ScanFlag=1;
//只有当ScanFlag=1时,才能切换显示内容
ScanFlag=0;
//OS_EXIT_CRITICAL();
LedDelay(LED_SET.BlankTime);
//消隐时间
if(LED_SET.OnOff==ON)//如果显示屏配置为显示,则开显示
if(!
LedEn_L();
//开显示
else
LedEn_H();
}
voidGet_HzMat(unsignedchar*code,unsignedchar*mat,uint8_tsize)
unsignedcharqh,ql;
unsignedchari;
unsignedlongfoffset;
#ifOS_CRITICAL_METHOD==3//中断函数被设定为模式3
OS_CPU_SRcpu_sr=0u;
#endif
qh=*code;
ql=*(++code);
if(qh<
0x81||ql<
0x40||ql==0xff||qh==0xff)//非常用汉字,没有包含在字库内
for(i=0;
i<
(size*2);
i++)
*mat++=0x00;
//填充满格
return;
//结束访问
if(ql<
0x7f)
ql-=0x40;
//注意!
else
ql-=0x41;
qh-=0x81;
foffset=((unsignedlong)190*qh+ql)*(size*2);
//得到字库中的字节偏移量
#ifdefOS_TICKS_PER_SEC//如果时钟节拍数定义了,说明要使用ucosII了.
OS_ENTER_CRITICAL();
#endif
FlashBusy^=1;
SPI_FLASH_BufferRead(mat,GBK16_ADDR+foffset,32);
//从flash中读取
OS_EXIT_CRITICAL();
#endif
Show_Char(int16_trow,int16_tcol,uint8_tstr,uint8_tback)
int16_trow显示行坐标
**int16_tcol显示列坐标
**uint8_tstr指定字符
**uint8_tback指示写入字模的显示缓存
在指定位置显示一个16*8字符。
注:
使用font16x8字库。
voidShow_Char(int16_trow,int16_tcol,uint8_tstr,uint8_tback)
uint8_ttmprow;
uint8_t*pBuf,*tmp;
uint8_ttmpData,tmptt;
uint8_ti,j;
tmprow=row%8;
//tmpcol=col%8;
back)//区分两个不同的缓存
tmp=Buf0;
tmp=Buf1;
tmptt=str-32;
for(j=0;
j<
2;
j++)
for(i=0;
i<
8;
{/*判断溢出条件,在这里行可以到-15去*/
if(((row+j)<
LED_SET.Height)&
&
((col+i)>
=0)&
((col+i)<
LED_SET.Width))
{
pBuf=tmp+j*LED_SET.Width+(col+i);
//pBuf的计算方法,纵向取模
if((row>
(row<
8))
{
if(j==0)//判断在上面还是在下面的区域
{
tmpData=*pBuf;
tmpData=~font16x8[tmptt*16+8*j+i]>
>
tmprow;
*pBuf=tmpData;
pBuf+=LED_SET.Width;
tmpData&
=0x00;
tmpData|=(~font16x8[tmptt*16+8*j+i])<
<
(8-tmprow);
}
else
=0xff<
tmpData|=0xff>
=(~font16x8[tmptt*16+8*j+i])>
}
}
elseif((row>
=8)&
16))
if(j==0)
tmpData|=0xff;
tmpData|=(~font16x8[tmptt*16+8*j+i])>
-8)&
=0))
if(j==1)
-tmprow;
(8+tmprow);
pBuf-=LED_SET.Width;
tmpData|=((~font16x8[tmptt*16+8*j+i])>
(8+tmprow))|(0xff<
-tmprow);
=((~font16x8[tmptt*16+i])<
-tmprow)|(0xff>
(8+tmprow));
-16)&
=-8))
-tmprow;
}
voidShow_HZ(int16_trow,int16_tcol,uint8_t*hzk,uint8_tback)
**uint8_t*hzk指向指定汉字内码的指针
在指定位置显示一个16*16汉字。
使用GBK16字库。
uint8_tdzk[32];
uint8_ttmpData;
/*纵向取模字库*/
Get_HzMat(hzk,dzk,16);
//取字模
back)
pBuf=Buf0;
pBuf=Buf1;
tmp=pBuf;
16;
=0x00;
//全部清零
tmpData|=(~dzk[2*i+(j%2)])>
//将高位清零,低位放的是原来高位的
//清零
tmpData|=(~dzk[2*i+(j%2)])<
//将前一个低位的位放到高位,低位为0
=0xff<
(8-tmprow);
//高位不变,低位全为1
=~(dzk[2*i+(j%2)+1]>
tmprow);
//else
//{
//tmpData=*pBuf;
//tmpData&
//tmpData|=0xff>
//
=~(dzk[2*i+(j%2)]>
//*pBuf=tmpData;
//}
}
tmpData|=~dzk[2*i+(j%2)]<
tmpData|=(~dzk[2*i+(j%2)]>
=(~dzk[2*i+(j%2)-1]<
}
}
Show_Str(int16_tx,int16_ty,uint8_t*str,uint8_tback)
int16_ty显示行坐标
**int16_tx显示列坐标
**uint8_t*str指向字符串的指针
在指定位置开始显示一个字符串。
(x,y):
起始坐标。
**************************************************************************************************/
voidShow_Str(int16_tx,int16_ty,uint8_t*str)
{
int16_tx0=x;
int16_ty0=y;
uint8_tbHz=0;
//字符或者中文
uint8_tforget_back;
/*检测显示缓存位置,不允许写入正在显示的缓存*/
if(BackFlag)//BackFlag前后台标志,初始值为1
forget_back=0;
//前台
forget_back=1;
//后台
LedClear(forget_back);
//清空要写入的缓存
while(*str!
=0)//数据未结束
{
bHz)//bHz=1表示是中文
if(*str>
0x80)bHz=1;
//中文
else//字符
if(*str==13)//换行符号,忽略
{
str++;
else
{
Show_Char(y0,x0,*str,forget_back);
//有效部分写入
str++;
}
x0+=8;
//字符,为全字的一半
else//中文
bHz=0;
//有
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- stm32 点阵相关程序 点阵 相关 程序