液晶驱动程序不易出现错误。。请教大家来看看。。

2019-07-16 06:16发布

未命名。。。.jpg 诺基亚手机的5110驱动程序
原来的程序不知道是基于什么单片机写的
我给改了一下头文件跟位定义。
然后最后编译就剩这几个错误了。错误码都是202具体看图


LCD_write_byte(font6x8[c][line], 1)
for(k=0;k<sizeof(GB_12)/sizeof(GB_12[0]);k++
这两个是错误的程序代码
,根据错误码应该是没有定义这两个标识符。。
该如何定义?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
依云个性音响定
2019-07-16 09:12
#include <reg52.h>
//#include <macros.h>
//#include <BIT.h>
//#include"code_table.c"

#define uchar unsigned char
#define uint unsigned int

//位操作定义
sbit SCLK=P1^0;
sbit SDIN=P1^1;
sbit LCD_DC=P1^2;
sbit LCD_CE=P1^3;
sbit LCD_RST=P1^4;

//函数声明
void delay_us(uint t);
void delay_ms(uint t);
void LCD_init(void);
void LCD_clear(void);
void LCD_write_english_string(uchar X,uchar Y,char *s);
void LCD_write_char(uchar c);
void LCD_write_byte(uchar dat, uchar dc);
void LCD_set_XY(uchar X, uchar Y);      

/***********************************************************************
* 函数名称:delay_us()
* 函数功能:16M晶振,延时t微秒
* 入口参数:t    延时t微秒
* 出口参数:无
***********************************************************************/
void delay_us(uint t)
{
         uint i,j;
         for(i=t;i>0;i--)       
             for(j=1;j>0;j--);
}

/**********************************************************************
* 函数名称:delay_ms()
* 函数功能:16M晶振,延时t毫秒
* 入口参数:t   延时t毫秒
* 出口参数:无
***********************************************************************/
void delay_ms(uint t)
{
         uint i,j;
         for(i=t;i>0;i--)
                 for(j=2670;j>0;j--);
}

/**********************************************************************
* 函数名称:LCD_init()               
* 函数功能:初始化nokia5110
* 入口参数:无
* 出口参数:无
**********************************************************************/
void LCD_init(void)
  {           
    LCD_RST = 0; // 产生一个让LCD复位的低电平脉冲
    delay_us(1);
    LCD_RST = 1;
    LCD_CE = 0;// 关闭LCD  
    delay_us(1);               
    LCD_CE = 1;// 使能LCD
    delay_us(1);
    LCD_write_byte(0x21, 0);        // 使用扩展命令设置LCD模式
    LCD_write_byte(0xc8, 0);        // 设置偏置电压
    LCD_write_byte(0x06, 0);        // 温度校正
    LCD_write_byte(0x13, 0);        // 1:48
    LCD_write_byte(0x20, 0);        // 使用基本命令
    LCD_clear();                           // 清屏
    LCD_write_byte(0x0c, 0);        // 设定显示模式,正常显示        
    LCD_CE = 0;                      // 关闭LCD  
  }
  
/**********************************************************************
* 函数名称:LCD_clear()               
* 函数功能:液晶清屏
* 入口参数:无
* 出口参数:无
**********************************************************************/
void LCD_clear(void)
  {
    uint i;
    LCD_write_byte(0x0c, 0);                       
    LCD_write_byte(0x80, 0);       
    for (i=0; i<504; i++)
      LCD_write_byte(0, 1);                       
  }

/**********************************************************************
* 函数名称:LCD_set_XY()
* 函数功能:光标定位x行y列
* 入口参数:X,Y   x行y列
* 出口参数:无
**********************************************************************/
void LCD_set_XY(uchar X, uchar Y)
  {
    LCD_write_byte(0x40 | Y, 0);                // column
    LCD_write_byte(0x80 | X, 0);        // row
  }
  
/***********************************************************************
* 函数名称:LCD_write_char()
* 函数功能:写入1个字符
* 入口参数:c   要写入的数据
* 出口参数:无
**********************************************************************/
void LCD_write_char(uchar c)
  {
    uchar line;
    c -= 32;
    for (line=0; line<6; line++)
      LCD_write_byte(font6x8[c][line], 1);//从ACSII码表中读取字节,然后写入液晶
  }

/***********************************************************************
* 函数名称LCD_write_english_string()
* 函数功能:写英文字符串
* 入口参数:X,Y,*S------x行y列*s为英文字符串
* 出口参数:无
***********************************************************************/
void LCD_write_english_string(uchar X,uchar Y,char *s)
  {
    LCD_set_XY(X,Y);//光标定位
    while (*s)
      {
         LCD_write_char(*s);
         s++;
      }
  }
  
/**********************************************************************
* 函数名称:LCD_write_byte()
* 函数功能:写一个字节
* 入口参数:dat,要写入的字节;command:0为命令,1为数据
* 出口参数:无
***********************************************************************/
void LCD_write_byte(uchar dat, uchar command)
  {
    uchar i;   
    LCD_CE = 0;   
    if (command == 0)     
     LCD_DC = 0;
    else   
     LCD_DC = 1;
                for(i=0;i<8;i++)
                {
                        if(dat&0x80)
                                SDIN = 1;
                        else
                                SDIN = 0;
                        SCLK = 0;
                        dat = dat << 1;
                        SCLK = 1;
                }   
     LCD_CE = 1;
  }

/**********************************************************************
* 函数名称:LCD_write_chinesee()
* 函数功能:写一个汉字
* 入口参数:x,横坐标;y,纵坐标;hz,要显示的汉字
* 出口参数:无
**********************************************************************/
void LCD_write_chinese(unsigned char x, unsigned char y, unsigned char *hz)
{  
   unsigned char k,i;
   for(k=0;k<sizeof(GB_12)/sizeof(GB_12[0]);k++)//查找汉字编码表中的汉字
   {
      if(hz[0] == GB_12[k].Index[0] && hz[1] == GB_12[k].Index[1])
      break;
   }
LCD_set_XY(x,y); //光标定位
for(i=0;i<12;i++)//先写上半字节
LCD_write_byte(GB_12[k].Msk[i],1);
LCD_set_XY(x,y+1);//光标定位下一行
for(i=12;i<24;i++)//后写下半字节
LCD_write_byte(GB_12[k].Msk[i],1);
}

/***********************************************************************
* 函数名称: LCD_write_chinese_sring()
* 函数功能:写汉字串
* 入口参数:x,横坐标;y,纵坐标;string,要显示的汉字串
* 出口参数:无
***********************************************************************/
void LCD_write_chinese_sring(unsigned char x, unsigned char y,unsigned char *string)
{
unsigned char i=0,j=0,k=0;
while(string[i])
{
    LCD_write_chinese(x,y,&string[i]);
    x=x+12;
    i=i+2;
}
}

void main()
{  
    DDRA = 0XFF;//液晶引脚,设置为输出  
        LCD_init(); //初始化液晶   
        LCD_clear();       
    LCD_write_chinese_sring(0,0,"距离");
    LCD_write_english_string(72,0,"CM");  
        while(1);                 
}




一周热门 更多>