⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.c

📁 已经上传的YF-320240-3.5寸彩屏(可由单片机控制)的测试程序。主CPU为MEGA128
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <iom128v.h>
#include "lcd.h"
#include <macros.h>

void Clear_Display(unsigned char color)
{   
    CMD = LCD_MODE_2;
	DAT = color;
	CMD = LCD_CLEAR_EN;
	Delayx10ms(1);
	CMD = LCD_CLEAR_DIS;
}


/* 编写:2005.11.29
    编写者:赫树开
  功能:画一个矩形
  参数。 X为矩形左上角的X坐标,
      Y为左上角Y坐标值,
      lenth为矩形长度,
      width 为矩形宽度
      color为矩形的颜色,*/
void Dis_Rect(unsigned int x,unsigned char y,unsigned int lenth,unsigned char width,unsigned char color)
{
    unsigned char i;
	unsigned int j;
	CMD = LCD_MODE_0+LCD_DOT1;
    for(i=y;i<y+width;i++)
    {
        X_ADDR = x;
		X_ADDR = x/256;
        Y_ADDR = i;
        for(j=0;j<lenth;j++)
        {
            DAT = color;
        }
    }
}
//单色字节扩展函数
void bytekzh( unsigned char datain,unsigned char front, unsigned char back )
{
unsigned char i,j;
for( i=0,j=0x80; i<8; i++,j=(j>>1))
{
    DAT=datain&j ? front: back;
}
}

void Dis_Ascii(unsigned int x,unsigned char y,unsigned char dat,unsigned char front,unsigned back)
{
         unsigned char j,k;
         k = 0;
         dat -= 0x20;
		 CMD = LCD_MODE_1;
		 DAT = front;
		 CMD = LCD_MODE_2;
		 DAT = back;
		 CMD = LCD_MODE_0+LCD_DOT8;
         for(j=y;j<y+16;j++)
         {
             Y_ADDR = j;
             X_ADDR = x;
			 X_ADDR = x/256;
			 DAT = ASC_MSK[dat][k++];
         }
}
/*
16*24 字符单个字符显示
*/
void Dis_Ascii_Big(unsigned int x,unsigned char y,unsigned char dat,unsigned char front,unsigned back)
{
         unsigned char j,k;
		 k=0;
		 dat-=0x20;
		 CMD = LCD_MODE_1;
		 DAT = front;
		 CMD = LCD_MODE_2;
		 DAT = back;
		 CMD = LCD_MODE_0+LCD_DOT8;
		 for(j=y;j<y+24;j++)
		 {
		     Y_ADDR = j;
			 X_ADDR = x;
			 X_ADDR = x/256;
			 DAT = Cdot1624[dat][k++];
			 DAT = Cdot1624[dat][k++];
		 }
}
void Dis_Chinese(unsigned int x,unsigned char y,unsigned int dat,unsigned char front,unsigned back)
{
         unsigned char j,k;
         k = 0;
		 CMD = LCD_MODE_1;
		 DAT = front;
		 CMD = LCD_MODE_2;
		 DAT = back;
		 CMD = LCD_MODE_0+LCD_DOT8;
         for(j=y;j<y+16;j++)
         {
             Y_ADDR = j;
             X_ADDR = x;
			 X_ADDR = x/256;
			 DAT = Cdotlib[dat].Msk[k++];
			 DAT = Cdotlib[dat].Msk[k++];
         }
}
/*
     显示dat[32]数组中的汉字
	 输入:显示汉字位置,汉字点阵指针、着色
	 输入:无
	 编者:赫树开
	 日期:二○○六年三月十一日
*/


/*=============================================================================
  ASCII(8*16) 及 汉字(16*16) 混合字符串显示函数
  输入参数约定:
  x,y显示字符串的左上角xy坐标.x..8点一字节位置; y..一条扫描线定位
  *ptr...字符串指针,本函数所指的是flash字串
 cursor 为光标标志,1 为光标 0 为不是光标
 返回参数:输出字串长度,留意汉字一个算两个
 其它假定:调用时汉字必须在字库数组中已经存在,否则将输出不正确的结果
==============================================================================*/
void Display(unsigned int x,unsigned char y,unsigned char *ptr,unsigned char font,unsigned char front,unsigned char back)
{
        unsigned char uLen,i=0;
        unsigned int  dat;
        uLen=0;
	    while ( (unsigned char)ptr[uLen] >= 0x10 ){uLen++;};	//探测字串长度
		//uLen = strlen(ptr);
        while(i<uLen)
        {

             if((unsigned char)ptr[i]<128)   //ascii字符与汉字内码的区别在于128做分界,大于界线的为汉字码
             {  //此字符为ascii
			      if(font == BIG)
		          {
		              Dis_Ascii_Big(x,y,ptr[i],front,back);
					  x+=16;
					  i++;
					  if(x>319)
					  {
					      y+=24;
						  x=0;
					  }			
		          }
				  else
				  {
                      Dis_Ascii(x,y,ptr[i],front,back);
                      x += 8;
                      i++;
                      if(x>319)
                      {
                          y += 16;
                          x = 0;
                      }
				  }
             }
             else  //此字符为汉字
             {
                  for(dat=0;dat<MAX_HZ;dat++)
                  {
                      if(Cdotlib[dat].Index[0] == (unsigned char)ptr[i])
                      {
                         if(Cdotlib[dat].Index[1] == (unsigned char)ptr[i+1])
                         {
                             i+=2;
                             break;
                         }
                      }
                  }
                  if(dat >= MAX_HZ)//若字库不存在该字则显示空白
                  {
                      i += 2;
                      dat = 0;
                  }
                  Dis_Chinese(x,y,dat,front,back);
                  x += 16;
                  if(x>319)
                  {
                      y += 16;
                      x = 0;
                  }
             }
        }
}
/* 日期:2005.12.1
   编写者:赫树开
   功能:显示一个16X24的ASCII字符串
   参数: x 为起点x坐标
           y  为起点y坐标
		   ptr 为字符串内容
		   front 是字符前景色
		   back  是字符串背景色  
		   */
void Dis_Asc_1624(unsigned int x,unsigned char y,unsigned char *ptr,unsigned char front,unsigned char back)
{
        unsigned char uLen,i=0;
		unsigned char j,k;
        unsigned int  dat;
        uLen=0;
	    while ( (unsigned char)ptr[uLen] >= 0x10 ){uLen++;};	//探测字串长度
	    //uLen = strlen(ptr);
		 CMD = LCD_MODE_1;
		 DAT = front;
		 CMD = LCD_MODE_2;
		 DAT = back;
		 CMD = LCD_MODE_0+LCD_DOT8;
        while(i<uLen)
        {
				  dat = ptr[i] - 0x20;
                  k = 0;  
                 for(j=y;j<y+24;j++)
                 {
                    Y_ADDR = j;
                    X_ADDR = x;
					X_ADDR = x/256;
					DAT = Cdot1624[dat][k++];
					DAT = Cdot1624[dat][k++];
                 }
                  x += 16;
                  if(x>319)
                  {
                      y += 24;
                      x = 0;
                  }
				  i++; 
        }
		CMD = LCD_MODE_0+LCD_DOT1;
}	

void Dis_Menu(struct Command const *cmd,unsigned char size)
{    unsigned char i;
     for(i = 0;i<size;i++)
	 {
	     Dis_Command(cmd[i]);
	 }
}	   

unsigned char const ASC_MSK[][16]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*--      --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x18,0x3C,0x3C,0x3C,0x18, /*--   !  --*/
0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x66,0x66,0x66,0x00,0x00, /*--   "  --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x36,0x36,0x7F,0x36,0x36, /*--   #  --*/
0x36,0x7F,0x36,0x36,0x00,0x00,0x00,0x00,
0x00,0x18,0x18,0x3C,0x66,0x60,0x30,0x18, /*--   $  --*/
0x0C,0x06,0x66,0x3C,0x18,0x18,0x00,0x00,
0x00,0x00,0x70,0xD8,0xDA,0x76,0x0C,0x18, /*--   %  --*/
0x30,0x6E,0x5B,0x1B,0x0E,0x00,0x00,0x00,
0x00,0x00,0x00,0x38,0x6C,0x6C,0x38,0x60, /*--   &  --*/
0x6F,0x66,0x66,0x3B,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x18,0x18,0x18,0x00,0x00, /*--   '  --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0C,0x18,0x18,0x30,0x30, /*--   (  --*/
0x30,0x30,0x30,0x18,0x18,0x0C,0x00,0x00,
0x00,0x00,0x00,0x30,0x18,0x18,0x0C,0x0C, /*--   )  --*/
0x0C,0x0C,0x0C,0x18,0x18,0x30,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x36,0x1C,0x7F, /*--   *  --*/
0x1C,0x36,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x7E, /*--   +  --*/
0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*--   ,  --*/
0x00,0x00,0x1C,0x1C,0x0C,0x18,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E, /*--   -  --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*--   .  --*/
0x00,0x00,0x1C,0x1C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x06,0x06,0x0C,0x0C,0x18, /*--   /  --*/
0x18,0x30,0x30,0x60,0x60,0x00,0x00,0x00,
0x00,0x00,0x00,0x1E,0x33,0x37,0x37,0x33, /*--   0  --*/
0x3B,0x3B,0x33,0x1E,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0C,0x1C,0x7C,0x0C,0x0C, /*--   1  --*/
0x0C,0x0C,0x0C,0x0C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x3C,0x66,0x66,0x06,0x0C, /*--   2  --*/
0x18,0x30,0x60,0x7E,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x3C,0x66,0x66,0x06,0x1C, /*--   3  --*/
0x06,0x66,0x66,0x3C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x30,0x30,0x36,0x36,0x36, /*--   4  --*/
0x66,0x7F,0x06,0x06,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x7E,0x60,0x60,0x60,0x7C, /*--   5  --*/
0x06,0x06,0x0C,0x78,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x1C,0x18,0x30,0x7C,0x66, /*--   6  --*/
0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x7E,0x06,0x0C,0x0C,0x18, /*--   7  --*/
0x18,0x30,0x30,0x30,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x3C,0x66,0x66,0x76,0x3C, /*--   8  --*/
0x6E,0x66,0x66,0x3C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66, /*--   9  --*/
0x3E,0x0C,0x18,0x38,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x00, /*--   :  --*/
0x00,0x00,0x1C,0x1C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x00, /*--   ;  --*/
0x00,0x00,0x1C,0x1C,0x0C,0x18,0x00,0x00,
0x00,0x00,0x00,0x06,0x0C,0x18,0x30,0x60, /*--   <  --*/
0x30,0x18,0x0C,0x06,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00, /*--   =  --*/
0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x60,0x30,0x18,0x0C,0x06, /*--   >  --*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -