




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学习资料收集于网络,仅供参考此程序是用的flash里面装的字库的方法来做的,可以显示各种字和字符,可以各种移动,左移,右移,上下移动都可以。以下是该程序的主要代码(所谓的主要代码就是跟移动有关的代码)/*程序名称:LedDisplay(void)*输入参数:无*输出参数:无*返 回 值:无*描 述:LED显示板一行显示程序。此程序读取显示缓存中的数据,并在LED上显示出来。* 注:此程序显示的字模为纵向取模。*/void LedDisplay(void)uint16_t offset_addr;uint16_t lenght;uint8_t *data;/ #ifdef OS_TICKS_PER_SEC /如果时钟节拍数定义了,说明要使用ucosII了./ OS_CPU_SR cpu_sr = 0u;/ OS_ENTER_CRITICAL(); / #endifoffset_addr = (ScanRow / 8) * LED_SET.Width ;LedScanTime = 0;/*关显示(消隐)*/if(!LED_SET.ENMode)LedEn_H();/关显示elseLedEn_L();lenght = LED_SET.Width;/* 输出列数据*/if(!BackFlag)data = Buf0 + offset_addr;while(lenght-)LedOutBit(*data,ScanRow);data +;elsedata = Buf1 + offset_addr;while(lenght-)LedOutBit(*data,ScanRow);data +;LedClk_L();LedLat_L();/锁存数据LedDelay(10);LedLat_H();LedDelay(10);LedLat_L();offset_addr = LedScanTime;/*关显示(消隐)*/if(!LED_SET.ENMode)LedEn_H();/关显示elseLedEn_L();/* 输出行扫描信号*/ScanRow &= 0x0F;LedRow(ScanRow);ScanRow +;/行+1if(ScanRow = LED_SET.ScanMode) /16ScanRow = 0;if(ScanRow = LED_SET.FirstRow)/如果完成一帧扫描,置标志,扫描完16行ScanFlag = 1;/只有当ScanFlag = 1时,才能切换显示内容elseScanFlag = 0;/ #ifdef OS_TICKS_PER_SEC /如果时钟节拍数定义了,说明要使用ucosII了./ OS_EXIT_CRITICAL(); / #endifLedDelay(LED_SET.BlankTime);/消隐时间if(LED_SET.OnOff = ON)/如果显示屏配置为显示,则开显示if(!LED_SET.ENMode)LedEn_L();/开显示elseLedEn_H(); void Get_HzMat(unsigned char *code,unsigned char *mat,uint8_t size)unsigned char qh,ql;unsigned char i;unsigned long foffset;#if OS_CRITICAL_METHOD = 3 /中断函数被设定为模式3 OS_CPU_SR cpu_sr = 0u;#endifqh = *code;ql = *(+code);if(qh0x81|ql0x40|ql=0xff|qh=0xff)/非常用汉字 ,没有包含在字库内for(i=0;i(size*2);i+)*mat+ = 0x00;/填充满格return; /结束访问if(ql0x7f)ql-=0x40;/注意!else ql-=0x41;qh -= 0x81;foffset = (unsigned long)190 * qh + ql) * (size * 2);/得到字库中的字节偏移量#ifdef OS_TICKS_PER_SEC /如果时钟节拍数定义了,说明要使用ucosII了. OS_ENTER_CRITICAL();#endifFlashBusy = 1;SPI_FLASH_BufferRead(mat,GBK16_ADDR + foffset,32);/从flash中读取FlashBusy = 1;#ifdef OS_TICKS_PER_SEC /如果时钟节拍数定义了,说明要使用ucosII了. OS_EXIT_CRITICAL();#endif/*程序名称:Show_Char(int16_t row,int16_t col,uint8_t str,uint8_t back)*输入参数:int16_t row显示行坐标* int16_t col显示列坐标* uint8_t str指定字符* uint8_t back指示写入字模的显示缓存*输出参数:无*返 回 值:无*描 述:在指定位置显示一个16*8字符。注:使用font16x8字库。*/void Show_Char(int16_t row,int16_t col,uint8_t str,uint8_t back)uint8_t tmprow;uint8_t *pBuf,*tmp;uint8_t tmpData,tmptt;uint8_t i,j;tmprow = row % 8;/tmpcol = col % 8;if(!back)/区分两个不同的缓存tmp =Buf0;elsetmp = Buf1;tmptt = str - 32;for(j = 0;j 2;j+)for(i = 0;i 8;i+)/*判断溢出条件,在这里行可以到-15去*/if(row + j) = 0) &(col + i) = 0) & (row tmprow;*pBuf = tmpData;pBuf += LED_SET.Width;tmpData = *pBuf;tmpData &= 0x00;tmpData |= (font16x8tmptt *16 + 8 * j + i) (8 - tmprow); *pBuf = tmpData;elsetmpData = *pBuf;tmpData &= 0xff tmprow;tmpData &= (font16x8tmptt *16 + 8 * j + i) tmprow;*pBuf = tmpData;else if(row =8) & (row tmprow;*pBuf = tmpData;else if(row -8) & (row = 0)if(j = 1)tmpData = *pBuf;tmpData &= 0x00;tmpData |= (font16x8tmptt *16 + 8 * j + i) (8 + tmprow);*pBuf = tmpData;pBuf -= LED_SET.Width;tmpData = *pBuf;tmpData &= 0x00;tmpData |= (font16x8tmptt *16 + 8 * j + i) (8 + tmprow) | (0xff -tmprow);tmpData &= (font16x8tmptt *16 + i) (8 + tmprow);*pBuf = tmpData;else if(row -16) & (row = -8)if(j = 1)tmpData = *pBuf;tmpData |= 0xff;*pBuf = tmpData;pBuf -= LED_SET.Width;tmpData = *pBuf;tmpData &= 0x00;tmpData |= (font16x8tmptt *16 + 8 * j + i) (8 + tmprow);*pBuf = tmpData;/*程序名称:void Show_HZ(int16_t row,int16_t col,uint8_t *hzk,uint8_t back)*输入参数:int16_t row显示行坐标* int16_t col显示列坐标* uint8_t *hzk指向指定汉字内码的指针* uint8_t back指示写入字模的显示缓存*输出参数:无*返 回 值:无*描 述:在指定位置显示一个16*16汉字。注:使用GBK16字库。*/void Show_HZ(int16_t row,int16_t col,uint8_t *hzk,uint8_t back)uint8_t dzk32;uint8_t *pBuf,*tmp;uint8_t tmprow;uint8_t tmpData;uint8_t i,j;/* 纵向取模字库 */Get_HzMat(hzk,dzk,16);/ 取字模tmprow = row % 8;if(!back)pBuf = Buf0;elsepBuf = Buf1;tmp = pBuf; for(j = 0;j 2;j+)for(i = 0;i 16;i+)/*判断溢出条件,在这里行可以到-15去*/if(row + j) = 0) &(col + i) = 0) & (row tmprow;/将高位清零,低位放的是原来高位的*pBuf = tmpData;pBuf += LED_SET.Width;tmpData = *pBuf;tmpData &=0x00; /清零tmpData |= (dzk2 * i + (j % 2) (8 - tmprow);/将前一个低位的位放到高位,低位为0tmpData &=0xff tmprow;/高位不变,低位全为1tmpData &= (dzk2 * i + (j % 2) + 1 tmprow);/将高位清零,低位放的是原来高位的*pBuf = tmpData;/else/tmpData = *pBuf;/tmpData &=0xff tmprow;/高位不变,低位全为1/tmpData &= (dzk2 * i + (j % 2) tmprow);/将高位清零,低位放的是原来高位的/*pBuf = tmpData;/else if(row =8) & (row tmprow;*pBuf = tmpData;else if(row -8) & (row = 0)if(j = 1)tmpData = *pBuf;tmpData &= 0x00;tmpData |= dzk2 * i + (j % 2) (8 + tmprow);*pBuf = tmpData;pBuf -= LED_SET.Width;tmpData = *pBuf;tmpData &= 0x00;tmpData |= (dzk2 * i + (j % 2) (8 + tmprow) | (0xff -tmprow);tmpData &= (dzk2 * i + (j % 2) - 1 (8 + tmprow);*pBuf = tmpData;else if(row -16) & (row = -8)if(j = 1)tmpData = *pBuf;tmpData |= 0xff;*pBuf = tmpData;pBuf -= LED_SET.Width;tmpData = *pBuf;tmpData &= 0x00;tmpData |= (dzk2 * i + (j % 2) (8 + tmprow);*pBuf = tmpData; /*程序名称:Show_Str(int16_t x,int16_t y,uint8_t *str,uint8_t back)*输入参数:int16_t y显示行坐标* int16_t x显示列坐标* uint8_t *str指向字符串的指针*输出参数:无*返 回 值:无*描 述:在指定位置开始显示一个字符串。(x,y):起始坐标。*/ void Show_Str(int16_t x,int16_t y,uint8_t *str)int16_t x0 = x;int16_t y0 = y;uint8_t bHz = 0;/字符或者中文 uint8_t forget_back;/* 检测显示缓存位置,不允许写入正在显示的缓存*/if(BackFlag) /BackFlag 前后台标志,初始值为1forget_back = 0; /前台elseforget_back = 1;/后台LedClear(forget_back);/清空要写入的缓存 while(*str != 0)/数据未结束 if(!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;/有汉字库 Show_HZ(y0,x0,str,forget_back); str += 2; x0 += 16;/下一个汉字偏移 /* 等待一帧显示完成,将显示缓存切换到当前缓存*/while(!ScanFlag);BackFlag = forget_back;void LedClose(void)/*关显示*/if(!LED_SET.ENMode)LedEn_H();/关显示elseLedEn_L();LED_SET.OnOff = OFF;void LedOpen(void)/*开显示(消隐)*/if(!LED_SET.ENMode)LedEn_L();/关显示elseLedEn_H();LED_SET.OnOff = ON;/*左移显示*/void DisplayMvoeLeft(void * p_arg)uint8_t *str;int16_t i;uint16_t lenght;(void)p_arg;while(1)/str = 写自己要显示的东西!;str = p_arg;lenght = OS_StrLen(str) * 8;for(i = -LED_SET.Width; i -(LED_SET.Wi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 代际隔阂突破与融合路径探索
- 小学数学直观图讲解
- 天猫仓库工作总结
- 如何做护理员培训课件
- 消防安全培训受训率课件
- 企业环保管理述职
- 物理实验室工作总结
- 低压配电柜系统图讲解
- ICU脑出血病人护理查房大纲
- 消防安全培训举措课件
- 汇流箱介绍优秀课件
- 像科学家那样探索
- 灭火器维修与报废规程
- 初中道德与法治新课标理念解读
- GB/T 5783-2016六角头螺栓全螺纹
- GB/T 24137-2009木塑装饰板
- 二维混合机清洁验证方案
- GB 18613-2020电动机能效限定值及能效等级
- 利用“水量平衡原理”分析地理问题 【思维导图+重难点突破】 高考地理 考点全覆盖式精讲 高效复习备考课件
- (新版)水电站知识问答题题库300题(含答案)
- 外科颅内和椎管内血管性疾病 课件
评论
0/150
提交评论