这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » Renesas » 诺基亚LCD5110显示实验成功,下一站考虑uCOS移植,哪位大哥能提供帮助啊

共9条 1/1 1 跳转至

诺基亚LCD5110显示实验成功,下一站考虑uCOS移植,哪位大哥能提供帮助啊

菜鸟
2012-09-09 03:49:16     打赏

主函数:
/*-----------------------------------------------------------------------------
**函数名称:main
**作    者:tzhk100
**时    间:2012.9.8
**函数功能:LCD5110显示实验
**参数说明:无
**返    回:无 
**--------------------------------------------------------------------------- */

void  main(void)
{      
        PORT_Init();
       
        LCD_VCC_H;
        LCD_BGL_L;
        LCD_GND_L;
       
        LCD_Init();
        LCD_Clear();
 /* Start user code. Do not edit comment generated here */
 while (1U)
 {      
         LCD_Write_EnStr(0, 1, "Hello!RENESAS!");
         LCD_Write_EnStr(0, 2, "www.eepw.com");
         LCD_Write_EnStr(0, 3, "text5:LCD5110");
                Delay(400);
 }
 /* End user code. Do not edit comment generated here */
}
LCD5110.H:
/*******************************************************************************
* 文件名  : LCD5110.c
* 作者     : tzhk100
* 创建日期              : 2012.8.30
* 描述   :
* 实验平台              :RL78
* 版本   : V0
* 历史记录              : 暂无
*******************************************************************************/
#ifndef _LCD5110_H
#define _LCD5110_H

#include   "GLOABLE.h"
#include   "CG_macrodriver.h"
#include   "CG_port.h"
//宽高像素
#define LCD_X_RES  84
#define LCD_Y_RES  48

//枚举 D/C模式选择
typedef enum
{
          DC_CMD  = 0,         //写命令
   DC_DATA = 1  //写数据
  
} DCType;

// 管脚配置 H: high, L: low
// For RL78G13
#define LCD_RST_H    (P7_bit.no0 = 1)
#define LCD_RST_L    (P7_bit.no0 = 0)

#define LCD_CE_H    (P7_bit.no1 = 1)
#define LCD_CE_L    (P7_bit.no1 = 0)

#define LCD_DC_DATA    (P7_bit.no2 = 1)
#define LCD_DC_CMD    (P7_bit.no2 = 0)

#define LCD_MOSI_H    (P7_bit.no3 = 1)
#define LCD_MOSI_L    (P7_bit.no3 = 0)

#define LCD_CLK_H    (P7_bit.no4 = 1)
#define LCD_CLK_L    (P7_bit.no4 = 0)

#define LCD_VCC_H    (P7_bit.no5 = 1)

#define LCD_BGL_L    (P7_bit.no6 = 0)

#define LCD_GND_L    (P7_bit.no7 = 0)

/**************************************************************/
extern void Delay(u32 nCount);
void Delay(u32 nCount);
void LCD_Init(void);
void LCD_Clear(void);
void LCD_Clear_part(u8 X,u8 Y,u8 L,u8 H);
void LCD_SetXY(u8 X, u8 Y);
void LCD_SetContrast(u8 contrast);
void LCD_Send(u8 data, DCType dc);
//void LCD_Write_Char(u8 ascii);
void LCD_Write_Char(u8 X, u8 Y,u8 ascii);
void LCD_Write_EnStr(u8 X, u8 Y, u8* s);
void LCD_Write_ChStr(u8 X, u8 Y, u8 num);
void LCD_ShowNum(u8 X,u16 Y,u32 num);
void LCD_Write_ChStr(u8 X,u8 Y,u8 n);
u32 mypow(u8 m,u8 n);
#endif

LCD5110.C
/*******************************************************************************
* 文件名  : LCD5110.c
* 作者     : tzhk100
* 创建日期              : 2012.8.30
* 描述   :
* 实验平台              :RL78
* 版本   : V0
* 历史记录              : 暂无
********************************************************************************/

#include    "LCD5110.h"
#include    "Pixel_EN.h"
#include    "Pixel_CH.h"
//-------------------------------------------------------------------
// Nokia5510指令集
//  D7  D6  D5  D4  D3  D2  D1  D0
//  0   0   1   0   0   PD  V   H
//                      |   |   |_______1->扩展指令集  0->基本指令集
//                      |   |___________1->垂直寻址    0->水平寻址
//                      |_______________1->低功耗模式  0->正常模式
//-------------------------------------------------------------------
// 显示模式
//  D7  D6  D5  D4  D3  D2  D1  D0
//  0   0   0   0   1   D   0   E
//                      |       |_______0    0    1    1
//                      |_______________0    1    0    1
//                                      白屏 正常 全显 反转
//-------------------------------------------------------------------

/*-----------------------------------------------------------------------------
**函数名称:Delay
**作    者:tzhk100
**时    间:2012.9.7
**函数功能:延时
**参数说明:i--延时长短设置
**返    回:无 
**--------------------------------------------------------------------------- */

void Delay(u32 nCount)
{
  for(; nCount != 0; nCount--);
}

/*-----------------------------------------------------------------------------
**函数名称:LCD_Init
**作    者:tzhk100
**时    间:2012.9.7
**函数功能:LCD初始化
**参数说明:i--延时长短设置
**返    回:无 
**--------------------------------------------------------------------------- */
void LCD_Init(void)
{
 //复位LCD_低电平脉冲
 LCD_RST_L;  
 Delay(200);
 LCD_RST_H;
 
 //复位串行接口_高电平脉冲
 LCD_CE_H;
 Delay(200);
 LCD_CE_L;

 //设置LCD
    LCD_Send(0x21, DC_CMD); //使用扩展命令设置LCD模式
    LCD_Send(0xC8, DC_CMD); //设置偏置电压
    LCD_Send(0x06, DC_CMD); //温度校正
    LCD_Send(0x13, DC_CMD); //1:48
    LCD_Send(0x20, DC_CMD); //使用基本命令
    LCD_Send(0x0C, DC_CMD); //设定显示模式,正常显示
}
/*-----------------------------------------------------------------------------
**函数名称:LCD_SetContrast
**作    者:tzhk100
**时    间:2012.9.7
**函数功能:设置LCD对比度
**参数说明:contrast对比度范围: 0~127
**返    回:无 
**--------------------------------------------------------------------------- */
void LCD_SetContrast(u8 contrast)
{
    LCD_Send(0x21, DC_CMD);
    LCD_Send(0x80 | contrast, DC_CMD);
    LCD_Send(0x20, DC_CMD);
}

/*-----------------------------------------------------------------------------
**函数名称:LCD_SetXY
**作    者:tzhk100
**时    间:2012.9.7
**函数功能:设置LCD当前坐标
**参数说明:XY对应LCD坐标
**返    回:无 
**--------------------------------------------------------------------------- */
void LCD_SetXY(u8 X, u8 Y)
{
 
 
  LCD_Send(0x40 | Y, DC_CMD);    // 行
   LCD_Send(0x80 | X, DC_CMD);    // 列
}

/*-----------------------------------------------------------------------------
**函数名称:LCD_Clear
**作    者:tzhk100
**时    间:2012.9.7
**函数功能:LCD清屏
**参数说明:无
**返    回:无 
**--------------------------------------------------------------------------- */
void LCD_Clear(void)
{
 u16 i;
 
 LCD_Send(0x0c, DC_CMD);
  LCD_Send(0x80, DC_CMD);
 
 for (i=0; i<504; i++)
  LCD_Send(0, DC_DATA); 
}

/*-----------------------------------------------------------------------------
**函数名称:LCD_Clear_part
**作    者:tzhk100
**时    间:2012.9.7
**函数功能:指定区域LCD清屏
**参数说明:X/Y起始坐标,L横长,H竖高
**返    回:无 
**--------------------------------------------------------------------------- */
void LCD_Clear_part(u8 X,u8 Y,u8 L,u8 H)
{
 u16 i,j;
 
 LCD_Send(0x0c, DC_CMD);
        LCD_Send(0x80, DC_CMD);
 
 for (i=Y; i<Y+H+1; i++)
          for(j=X;j<X+L+1;j++)
          { LCD_SetXY(j,i);
     LCD_Send(0, DC_DATA); 
          }
}

/*-----------------------------------------------------------------------------
**函数名称:LCD_Send
**作    者:tzhk100
**时    间:2012.9.7
**函数功能:向LCD发送数据
**参数说明:dataa数据,dc发送类型
**返    回:无 
**--------------------------------------------------------------------------- */
void LCD_Send(u8 data, DCType dc)
{
 u8 i=8;

 if (dc==DC_CMD)
  LCD_DC_CMD; //发送命令
 else
  LCD_DC_DATA;    //发送数据
 
 while (i--)
 {
  LCD_CLK_L;
  if(data&0x80)
   LCD_MOSI_H; /* MSB first */
  else
   LCD_MOSI_L;
  LCD_CLK_H;
  data <<= 1;  /* Data shift */
 }
 
}

/*-----------------------------------------------------------------------------
**函数名称:LCD_Send
**作    者:tzhk100
**时    间:2012.9.7
**函数功能:向LCD发送数据
**参数说明:dataa数据,dc发送类型
**返    回:无 
**--------------------------------------------------------------------------- */

void LCD_Write_Char(u8 X, u8 Y,u8 ascii)
{  
    u8 n;
 LCD_SetXY(X,Y);
    ascii -= 32; //ASCII码-32
 
    for (n=0; n<7; n++)
  LCD_Send(Font6x8[ascii][n], DC_DATA);
   
}
/*-----------------------------------------------------------------------------
**函数名称:LCD_Write_EnStr
**作    者:tzhk100
**时    间:2012.9.7
**函数功能:向LCD写入英文字符串
**参数说明:XY:起始坐标
**         *s:所输入字符串
**返    回:无 
**--------------------------------------------------------------------------- */
void LCD_Write_EnStr(u8 X, u8 Y, u8* s)
{
  // LCD_SetXY(X,Y);
    while (*s!='\0')
 {
        
  LCD_Write_Char(X,Y,*s++);
                 X=X+6;
                 if(X>84)
                 { X=0;
                 Y=Y+1;
                 *s--;
                 if(Y>5)
                 {Y=0;}
                 }
 }
}
//m^n函数
u32 mypow(u8 m,u8 n)
{
 u32 result=1; 
 while(n--)result*=m;   
 return result;
}
/*-----------------------------------------------------------------------------
**函数名称:LCD_ShowNum
**作    者:tzhk100
**时    间:2012.9.7
**函数功能:显示一个数字
**参数说明:X/Y: 起始坐标
           num: 数值(0~65536);
**返    回:无 
**--------------------------------------------------------------------------- */
void LCD_ShowNum(u8 X,u16 Y,u32 num)
{     
 u32 res;      
 u8 t=0,t1=0;  
 res=num;
 if(!num)LCD_Write_Char( X,Y,'0');//显示0
 while(res)  //得到数字长度
 {
  res/=10;
  t++;
 }
 t1=t;
 while(t) //显示数字
 {
  res=mypow(10,t-1);  
     LCD_Write_Char(X+(t1-t)*6,Y,(num/res)%10+'0');//数字字符第一个在'0'之前
  t--;
 }        
}

/*-----------------------------------------------------------------------------
**函数名称:LCD_Write_ChStr
**作    者:tzhk100
**时    间:2012.9.7
**函数功能:显示一个数字
**参数说明:X/Y: 起始坐标
           n  : (这部分暂时保留);
**返    回:无 
**--------------------------------------------------------------------------- */
void LCD_Write_ChStr(u8 X, u8 Y,u8 n)
{
 int i;
 LCD_SetXY(X,Y);
 for(i = 0;i < 12; i++)//汉字上半身
 {
  LCD_Send(chinese_character[n][i],DC_DATA);
 }
 LCD_SetXY(X,Y+1);
 for(i = 12; i < 24; i++)//汉字下半身
 {LCD_Send(chinese_character[n][i],DC_DATA);}
}
 




关键词: 诺基亚     LCD5110     显示     实验     成功     下一         

菜鸟
2012-09-09 03:59:48     打赏
2楼

工程文件下载:LCD5110_Demo.rar


高工
2012-09-09 09:57:28     打赏
3楼
现在用NOKIA 5110屏的很少了吧,前几年爱好者手中的拥有量可是相当大啊

菜鸟
2012-09-09 14:57:33     打赏
4楼

 比起1602,感觉还是5110好!


菜鸟
2012-09-09 14:59:26     打赏
5楼

^^^^


菜鸟
2012-09-09 15:02:06     打赏
6楼

比起1602,又轻又小。


专家
2012-09-09 15:31:07     打赏
7楼
上个图看一下效果!

高工
2012-09-09 23:25:14     打赏
8楼
灰常好,这个屏很熟悉

助工
2012-09-11 21:17:17     打赏
9楼

好东西必须顶~~~~


共9条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]