金牌会员
- 积分
- 1461
- 金钱
- 1461
- 注册时间
- 2014-5-21
- 在线时间
- 339 小时
|
楼主 |
发表于 2015-11-19 12:48:19
|
显示全部楼层
你说的delay.c我没有用,原子写的。我用的就一个循环延时
[mw_shl_code=c,true] ----------------------------------------------------------------------------------
********************************************************************************************************/
#include "app.h"
#include "lcd.h"
#include "stdlib.h"
#include "picture.h"
#define LCD_CS_ENABLE GPIO_ResetBits(LCD_GPIO, LCD_CS) /* 片选 */
#define LCD_CS_DISABLE GPIO_SetBits(LCD_GPIO, LCD_CS)
#define OpenLCDDsply() WriteToLCD(OPEN_LCD_CMD, SET) /* 开显示 */
#define CloseLCDDsply() WriteToLCD(CLOSE_LCD_CMD, SET) /* 关显示 */
typedef enum {LCD_DATA = 0,LCD_CMD = !LCD_DATA }LCD_DAT; /* LCD数据格式 */
extern OS_TICK StartRecordTick;
/********************************************************************************************************
** 函数名称: LCDTask
** 功能描述: LCD任务
** 输 入: parg:参数传递入口
** 输 出: 无
** 全局变量: 无
** 调用模块:
********************************************************************************************************/
void LCDTask(void *parg)
{
OS_ERR err;
LCDDAT *msg,dat;
OS_MSG_SIZE size;
CPU_INT32U tmp;
APP_ARG *p_arg = (APP_ARG *)parg;
while(1)
{
msg = (LCDDAT *)OSQPend (p_arg->pLCDQ,0,OS_OPT_PEND_BLOCKING,&size,NULL,&err);
if(OS_ERR_NONE == err && msg != NULL){
Mem_Copy(&dat,msg,size);
ClearScreen(); /* 清屏 */
OpenLCDDsply(); /* 打开显示 */
switch(dat.pic) /* 检索邮件 */
{
case DisplayInfoLCD:
tmp = OSTimeGet(&err);
if(OS_ERR_NONE == err){
tmp /= OSCfg_TickRate_Hz;
}
break;
case EcgMarkLCD:
DisplayChinese(4,48,EcgMark,2);
break;
case ShutDownFinishLCD:
DisplayChinese(4,32,ShutDownFinish,4);
OSQDel(p_arg->pLCDQ,OS_OPT_DEL_ALWAYS,&err);
break;
case RecordingLCD:
DisplayChinese(4,32,Recording,4);
break;
case SystemNormalLCD:
DisplayChinese(3,32,DriverNormal,4);
DisplayChinese(5,32,PressRecord,4);
break;
case FlashDiyLCD:
DisplayChinese(4,32,FlashDiy,4);
break;
}
OSTimeDlyHMSM(0,0,DISPLAY_DELAY_TIME,0,OS_OPT_TIME_DLY,&err);
if(dat.period)CloseLCDDsply();
}
}
}
/*********************************************************************************************************
** 函数名称: LCDInit
** 功能描述: 初始化LCD模块
********************************************************************************************************/
void LCDInit(void)
{
GPIO_ResetBits(LCD_GPIO, LCD_RESET);
GPIO_SetBits(LCD_GPIO, LCD_RESET);
WriteToLCD(0xE2, LCD_CMD);
WriteToLCD(0x2c, LCD_CMD); /*升压步聚1*/
WriteToLCD(0x2e, LCD_CMD); /*升压步聚2*/
WriteToLCD(0x2f, LCD_CMD); /*升压步聚3*/
WriteToLCD(0x24, LCD_CMD); /*粗调对比度,可设置范围20~27*/
WriteToLCD(0x81, LCD_CMD); /*微调对比度*/
WriteToLCD(0x1a, LCD_CMD); /*微调对比度的值,可设置范围0~63 1f*/
WriteToLCD(0xa2, LCD_CMD); /*1/9偏压比(bias)*/
WriteToLCD(0xc8, LCD_CMD); /*行扫描顺序:从上到下*/
WriteToLCD(0xa0, LCD_CMD); /*列扫描顺序:从左到右*/
WriteToLCD(0x40, LCD_CMD); /*起始行:从第一行开始*/
ClearScreen();
WriteToLCD(0xaf, LCD_CMD); /*开显示*/
}
/*********************************************************************************************************
** 函数名称: WriteToLCD
** 功能描述: 写数据进LCD
** 输 入: data:写数据
** flg:标识。(0,数据)(1,命令)
********************************************************************************************************/
void WriteToLCD(CPU_INT08U data, CPU_INT08U flg)
{
CPU_INT32U i;
LCD_GPIO->BSRRH = LCD_CS;
(flg>0)?(LCD_GPIO->BSRRH = LCD_RS) LCD_GPIO->BSRRL = LCD_RS);
for(i=0;i<8;i++){
LCD_GPIO->BSRRH = LCD_SCLK;
((data&0x80)>0)?(LCD_GPIO2->BSRRL = LCD_SDA) LCD_GPIO2->BSRRH = LCD_SDA);
LCD_GPIO->BSRRL = LCD_SCLK;
data <<= 1;
}
}
/*********************************************************************************************************
** 函数名称: ClearScreen
** 功能描述: 清除屏幕
********************************************************************************************************/
void ClearScreen(void)
{
CPU_INT32U i,j;
for(i=0;i<9;i++)
{
LCD_GPIO->BSRRH = LCD_CS;
WriteToLCD(0xb0+i,LCD_CMD);
WriteToLCD(0x10,LCD_CMD);
WriteToLCD(0x00,LCD_CMD);
for(j=0;j<132;j++){
WriteToLCD(0x00,LCD_DATA);
}
}
}
/*********************************************************************************************************
** 函数名称: LCDAddr
** 功能描述: LCD地址偏移,内部使用
** 输 入: page:页,column:列
********************************************************************************************************/
void LCDAddr(CPU_INT08U page,CPU_INT08U column)
{
LCD_GPIO->BSRRH = LCD_CS;
column--;page--;
WriteToLCD(0xb0+page,LCD_CMD);
WriteToLCD(((column>>4)&0x0f)+0x10,LCD_CMD);
WriteToLCD(column&0x0f,LCD_CMD);
}
/*********************************************************************************************************
** 函数名称: DisplayStr
** 功能描述: 显示字符串
** 输 入: page:页,column:列,text:文本指针
********************************************************************************************************/
void DisplayStr(CPU_INT16U page,CPU_INT16U column,char *text)
{
CPU_INT32U i=0,j,k,n;
while(text >0x00)
{
if((text>=0x20)&&(text<=0x7e))
{
j=text-0x20;
for(n=0;n<2;n++)
{
LCDAddr(page+n,column);
for(k=0;k<8;k++)
{
WriteToLCD(ascii_table_8x16[j][k+8*n],RESET);
}
}
i++;
column+=8;
}
else
{
i++;
}
}
}
/*********************************************************************************************************
** 函数名称: DisplayStr
** 功能描述: 显示汉字
** 输 入: page:页,column:列,dp:文本指针,Num:汉字数目
********************************************************************************************************/
void DisplayChinese(CPU_INT08U page,CPU_INT08U column,CPU_INT08U *dp,CPU_INT08U Num)
{
CPU_INT32U i,j,k;
for(k=0;k<Num;k++)
{
for(j=0;j<2;j++)
{
LCDAddr(page+j,column+(k*16));
for (i=0;i<16;i++)
{
WriteToLCD(*dp++,LCD_DATA);
}
}
}
}
/*********************************************************************************************************
** 函数名称: DisplayRecordTime
** 功能描述: 显示记录时间
** 输 入: page:页,column:列,time:时间,date:日期
********************************************************************************************************/
//void DisplayRecordTime(CPU_INT08U page,CPU_INT08U column,TIME time,DATE date)
//{
// char val[40];
// sprintf(val,"%04d-%02d-%02d",date.year,date.month,date.day);
// DisplayStr(page,column,val);
// sprintf(val,"%02d:%02d:%02d",time.hour,time.minute,time.second);
// DisplayStr(page+2,column+8,val);
//}
/*********************************************************************************************************
** 函数名称: DisplayPicture
** 功能描述: 显示图片
** 输 入: dp:图片指针
********************************************************************************************************/
void DisplayPicture(CPU_INT08U *dp)
{
CPU_INT08U i,j;
for(i=0;i<8;i++)
{
LCDAddr(i+1,1);
for(j=0;j<128;j++)
{
WriteToLCD(*dp++,LCD_DATA);
}
}
}
/*********************************************************************************************************
** 函数名称: LCD_TRACE
** 功能描述: 通过LCD显示信息
** 输 入: info信息
********************************************************************************************************/
void LCD_TRACE(CPU_INT32U info)
{
CPU_CHAR ch[10];
//sprintf(ch,"%03d",info);
DisplayStr(3,4,"ERROR");
DisplayStr(5,4,ch);
}
/****************************** (C) COPYRIGHT SmartHealth *****END OF FILE******************************/
[/mw_shl_code]
|
|