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

📄 cm320240.h

📁 用单片机驱动CM320240液晶程序
💻 H
字号:
#include <picture.h>

sbit lcd_rs=P3^7;
sbit lcd_wr=P3^6;
sbit lcd_rd=P1^0;
sbit lcd_cs1=P3^5;
sbit lcd_busy=P3^4;
sbit I_U=P1^1;      // =high 测电压; =low 测电流。初始状态为 high
/*=========================================================================
函数功能:向DDRAM发送显示数据
=========================================================================*/
void lcd_datawrite(unsigned char wrdata)
{
    while(lcd_busy==1);
    P2=wrdata;
    lcd_cs1=0;
    lcd_rd=1;
    lcd_rs=1;
    lcd_wr=0;
    ;
    ;
    ;
    ;
    lcd_wr=1;
    lcd_rs=1;
    lcd_cs1=1;
}
/*========================================================================
函数功能:向缓存器发送指令
========================================================================*/
void lcd_regwr(unsigned char regnada)
{
    DATA_BUS=regnada;
    lcd_cs1=0;
    lcd_rs=0;
    lcd_wr=0;
    ;
    ;
    ;
    ;
    lcd_wr=1;
    lcd_rs=1;
    lcd_cs1=1;
}
/*==============================================================================
函数功能:向缓存器指定地址写入指令
==============================================================================*/
void LCD_CmdWrite(unsigned char rgname,unsigned char rgdata ) 
{
       lcd_regwr(rgname); 
       lcd_regwr(rgdata); 
}
/*================================================================================
函数功能:读出指定缓存器数据
入口参数:huancun_address  缓存器地址
出口参数:huancun_R_data   缓存器地址里的数据
=================================================================================*/
unsigned char LCD_Cmd_Read(unsigned char huancun_address)
{
 unsigned char huancun_R_data;
 lcd_regwr(huancun_address);
 DATA_BUS = 0xFF;
  PRT2CF = 0x00;
 lcd_cs1 = 0;
 lcd_wr  = 1;
 lcd_rs  = 0;
 lcd_rd  = 0;
 huancun_R_data = DATA_BUS;
 lcd_rd  = 1;
 lcd_rs  = 1;
 lcd_cs1 = 1;
 PRT2CF = 0xFF;
 return(huancun_R_data);
}
/*================================================================================
函数功能:读出DDRAM位置数据
入口参数:无
出口参数:无
=================================================================================*/
unsigned char LCD_R_DDRAM(void)
{
 unsigned char Data;
 while(lcd_busy);
  DATA_BUS = 0xFF;
  PRT2CF = 0x00;
 lcd_cs1 = 0;
 lcd_rs  = 1;
 lcd_rd  = 0;
 Data    = DATA_BUS;
 lcd_rd  = 1;
 lcd_cs1 = 1;
  PRT2CF = 0xFF;
 return (Data);
}
/*=================================================================================
函数功能:坐标
入口函数:x,y屏幕绝对坐标
出口函数:无
=================================================================================*/
void LCD_C_XY(unsigned int x, unsigned int y)
{
 LCD_CmdWrite(0x60, (x & 0x3f));
 LCD_CmdWrite(0x70, (y & 0xff));	
}
/*================================================================================
函数功能:写字符串到DDRAM
入口参数:address  首地址  X,Y坐标 ,mode 1正常 0反显
出口参数:无
================================================================================*/
void LCD_WString_DDRAM(unsigned char x,unsigned char y,bit mode,unsigned char *address)
{
 LCD_CmdWrite(WCCR,0x69);
 LCD_CmdWrite(0x00,0xCD);                  	   //进入文字模式
 LCD_C_XY(x,y);
 if(mode)
    LCD_CmdWrite(0x10, 0xE9);					   
 else
    LCD_CmdWrite(0x10, 0xC8);						//反显
 while(*address)
   {
	lcd_datawrite(*(address++)); 
   }
}
/*================================================================================
函数功能:在屏幕任意坐标画一个点
入口参数:PointX   Pointy  屏幕坐标   Mode  1 点亮  0  熄灭
出口参数:无
=================================================================================*/
LCD_Pixel(unsigned int PointX, unsigned int PointY,bit Mode)
{
 unsigned char dat;
 dat = LCD_Cmd_Read(0x00);
 LCD_CmdWrite(0x00,dat&0xF7);                  //进入绘图模式
 LCD_C_XY((PointX/8),PointY);
 dat = 0x80>>(PointX%8);
 if(!Mode)
    dat=((~dat)&LCD_R_DDRAM());
 else
    dat=(dat|LCD_R_DDRAM());
 lcd_datawrite(dat);												//送显示数据
}
/*================================================================================
函数功能:画水平一条虚线
================================================================================*/
void Draw_dashed(unsigned char x1,unsigned char y1,unsigned char x2)
{
 unsigned int temp,i;
 temp=x2-x1;
 LCD_CmdWrite(WCCR,0x69);
 LCD_CmdWrite(0x00,0xC5);
 LCD_C_XY(x1,y1);
 for(i=0;i<temp;i++)
   lcd_datawrite(0x0F);
 LCD_CmdWrite(0x00,0xCD);
}
/*================================================================================
函数功能:在屏幕任意坐标画一线段
入口参数:
出口参数:
=================================================================================*/
void Line( unsigned int x1,unsigned int y1,  unsigned int x2,  unsigned int y2,bit Mode)
{
 unsigned int x,y;
 double k,b;
 if( abs(y1-y2) <= abs(x1-x2) )  // |k|<=1
   {
    k=(float)(y2-y1) / (float)(x2-x1) ;
    b=y1-k*x1;
    if( x1 <= x2 )
      {
       for(x=x1;x<=x2;x++)
         {
          y=k*x+b;
          LCD_Pixel(x, y, Mode);
         }
      }
    else
      {
       for(x=x2;x<=x1;x++)
         {y=k*x+b;
          LCD_Pixel(x, y, Mode);
         }
      }
    }
  else   // abs(y1-y2) > abs(x1-x2)  |K|>1
    {
     k=(float)(x2-x1) / (float)(y2-y1) ;
     b=x1-k*y1;
     if( y1 <= y2 )
       {
        for(y=y1;y<=y2;y++)
          {x=k*y+b;
           LCD_Pixel( x , y,Mode );
          }
       }
     else
       {
        for(y=y2;y<=y1;y++)
          {x=k*y+b;
           LCD_Pixel( x , y,Mode );
          }
       }
    }
}
/*===============================================================================
函数功能:在屏幕上显示一副图片
入口函数:(x,y)坐标 width 图片宽度,以字节为单位 0~40  high 图片高度  0~240   address 图片首址
出口函数:
===============================================================================*/
void LCD_Display_PIC(unsigned char x,unsigned char y,unsigned char width,unsigned char high,unsigned char *address)
{
 unsigned char W_variable,H_variable;
 LCD_CmdWrite(WLCR, 0xC5);                     //进入图形模式
 LCD_CmdWrite(WCCR, 0x69);					   //光标禁止自动移位	
 for(H_variable=0;H_variable<high;H_variable++)
    for(W_variable=0;W_variable<width;W_variable++)
	    {
	     LCD_C_XY(x+W_variable,y+H_variable);
         lcd_datawrite(*(address++));
		}
 LCD_CmdWrite(0x00, 0xCD);
}
/*==============================================================================
函数功能:特殊字符显示
入口参数:SIZE 大小   WIDE  1加粗 0 正常  address  首址
出口参数:无	  size  00	1倍	 05	 2倍  0A 3倍  0f 4倍
==============================================================================*/
void special_char_Dis(unsigned char x,unsigned char y,unsigned char size,unsigned char *address)
{
 LCD_CmdWrite(0x00, 0xCD);                   	    //进入文字模式
 LCD_CmdWrite(0x10, 0xE9);                          //字符加粗
 LCD_CmdWrite(0xF1, size<<4);						//字符放大
 LCD_C_XY(x,y);
 while(*address)
   {
	lcd_datawrite(*(address++)); 
   }
 LCD_CmdWrite(WCCR, 0x69);
}
/*===============================================================================
函数功能:自动添充全屏
入口函数:无
出口函数:无
================================================================================*/
void LCD_FillOn(void)
{
 unsigned char temp;
 temp = LCD_Cmd_Read(FNCR);
 temp |= cSetb3;
 LCD_CmdWrite(FNCR, temp);
}
/*================================================================================
函数功能:清屏
入口参数:huancun_address  缓存器地址,huancun_data  将要写入缓存器指定地址的数据
出口参数:无
=================================================================================*/
void LCD_Clear(void)
{
 LCD_CmdWrite(PNTR, 0x00);
 LCD_FillOn();
 delay(1000);
}
/*================================================================================
函数功能:清除屏幕任意区域
================================================================================*/
void Clear_Screen(unsigned char x,unsigned char y,unsigned char width,unsigned char high)
{
 unsigned char W_variable,H_variable;
 LCD_CmdWrite(WLCR, 0xC5);                     //进入图形模式
 LCD_CmdWrite(WCCR, 0x69);					   //光标禁止自动移位	
 for(H_variable=0;H_variable<high;H_variable++)
    for(W_variable=0;W_variable<width;W_variable++)
	    {
	     LCD_C_XY(x+W_variable,y+H_variable);
         lcd_datawrite(0x00);
		}
 LCD_CmdWrite(WLCR, 0xCD);                     //进入图形模式
 LCD_CmdWrite(WCCR, 0x69);					   //光标禁止自动移位
}
/*================================================================================
函数功能:LCD初始化
入口参数:无
出口参数:无
=================================================================================*/
void LCD_Initial(void)
{
 lcd_busy = 0;
 LCD_CmdWrite(WLCR, 0xC9);		//Normal Power
 LCD_CmdWrite(MISC, 0xF2);		//8Mhz  1基准  0x13
 LCD_CmdWrite(0x02, 0x10);
 LCD_CmdWrite(0x03, 0x80);
 LCD_CmdWrite(WCCR, 0x6B);		//光标不自动移位,中英文字对齐  0x61
 LCD_CmdWrite(0x11, 0x22);
 LCD_CmdWrite(0x12, 0x91);
 LCD_CmdWrite(AWRR, cAWRR);      //设定工作窗口右边位置 39
 LCD_CmdWrite(AWBR, cAWBR);		//设定工作窗口底边位置 239
 LCD_CmdWrite(AWLR, 0x00);		//设定工作窗口左位置	0
 LCD_CmdWrite(AWTR, 0x00);		//设定工作窗口顶位置	0
 LCD_CmdWrite(DWRR, cDWRR);		//设定显示窗口右边位置  39
 LCD_CmdWrite(DWBR, cDWBR);		//设定显示窗口底边位置  239
 LCD_CmdWrite(DWLR, 0x00);		//设定显示窗口左边位置 0
 LCD_CmdWrite(DWTR, 0x00);		//设定显示窗口顶边位置0
 LCD_CmdWrite(0x60, 0x00);
 LCD_CmdWrite(0x61, 0x00);
 LCD_CmdWrite(0x70, 0x00);
 LCD_CmdWrite(0x71, 0x00);
 LCD_CmdWrite(0x72, 0x00);
 LCD_CmdWrite(0x80, 0x33);
 LCD_CmdWrite(0x81, 0x00);
 LCD_CmdWrite(0x91, 0x00);
 LCD_CmdWrite(0x90, 0x04);
 LCD_CmdWrite(0xA0, 0x00);
 LCD_CmdWrite(0xA1, 0x00);
 LCD_CmdWrite(0xA2, 0x00);
 LCD_CmdWrite(0xA3, 0x00);
 LCD_CmdWrite(0xB0, 0x27);
 LCD_CmdWrite(0xB1, 0xEF);
 LCD_CmdWrite(0xC0, 0x00);
 LCD_CmdWrite(0xE0, 0x00);
 LCD_CmdWrite(0xF0, 0xE8);
 LCD_CmdWrite(0xF1, 0x0F);	
 LCD_Clear();
}

⌨️ 快捷键说明

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