📄 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 + -