|
发表于 2020-2-15 10:19:44
|
显示全部楼层
程序
#include <STC15W4K.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit LCD_SI=P3^0;//clock input 同步时钟输入端
sbit LCD_SCL=P3^1;//data input/output 串行数据输入、输出端
sbit LCD_A0=P3^2;//选择命令还是数据
sbit LCD_RST=P3^3;//复位
sbit LCD_CS=P3^4;//片选
uchar code BMP[]=
{
/*-- 文字:测 宋体12; 此字体下对应的点阵为:宽x高=16x16--*/
0x08,0x31,0x86,0x60,0x00,0xFE,0x02,0xF2,0x02,0xFE,0x00,0xF8,0x00,0x00,0xFF,0x00,
0x04,0xFC,0x03,0x00,0x80,0x47,0x30,0x0F,0x10,0x67,0x00,0x07,0x40,0x80,0x7F,0x00,
/*-- 文字:试 宋体12; 此字体下对应的点阵为:宽x高=16x16--*/
0x40,0x42,0xDC,0x08,0x00,0x90,0x90,0x90,0x90,0x90,0xFF,0x10,0x12,0x1C,0x10,0x00,
0x00,0x00,0x7F,0x20,0x10,0x20,0x20,0x1F,0x10,0x10,0x01,0x06,0x18,0x20,0x78,0x00,
};
/**************************************************************
LCD写函数
void LCD_write(数据或者命令,A0选择)
****************************************************************/
void LCD_write(uchar data_command,uchar dc)
{//参数dc=0时表示发命令,dc=1时表示发送数据
uchar i;
LCD_A0=dc;
LCD_CS=0;
for(i=0;i<8;i++)
{
LCD_SCL=0;
LCD_SI=(data_command&0x80)==0?0:1;
data_command<<=1;
LCD_SCL=1;
}
LCD_CS=1;
}
/**************************************************************
LCD初始化函数
****************************************************************/
void LCD_Init(void)
{
uchar i;
LCD_RST=0; //LCD(低电平)复位
for(i=100;i>0;i--);
LCD_RST=1; // RES置高
for(i=100;i>0;i--);
LCD_write(0xa2,0);// LCD偏压设置:1/9 BIAS
LCD_write(0xa1,0);//列地址选择为从右到左对应0~127;0xa1:列地址从左到右;0xa0:列地址从右到左
LCD_write(0xc0,0);// 行地址从上到下为0~63;0xc0:行地址从上到下;0xc8:行地址从下到上
LCD_write(0x26,0);// V5电压内部电阻调整设置
LCD_write(0x81,0);//亮度调整命令0~63(暗到亮)
LCD_write(0x10,0); //亮度调节为双字节命令,前一个参数控制字的深浅
LCD_write(0x2f,0); //上电控制,打开调压器、稳压器和电压跟随
LCD_write(0xaf,0); //set display off。0xaf:set display on
LCD_write(0x60,0);//其实行设置
}
//------------------------------------------------------------------------------
void clrscr(uchar page_f, //显示一个字或多个字函数
uchar page_sum,uchar column_f,uchar column_sum ) //x*8
{
//参数:指向字首地址,起始页,占多少页,起始列,占多少列
uchar i,j,page=0xb0;//指向首页命令
for(i=page_f;i<page_sum+page_f;i++)
{
LCD_write(page+i,0);
LCD_write(0x10|((0xf0&column_f)>>4),0);//设定列地址高4位为0
LCD_write(0x04|(0x0f&column_f),0); //设定列地址低4位为0
for(j=0;j<column_sum;j++)
{
LCD_write(0x00,1);
}
}
}
//------------------------------------------------------------------------------
void Draw_word(uint d_where,uchar page_f,uchar page_sum,uchar column_f,uchar column_sum ) //显示一个字或多个字函数 x*8
{
//参数:指向字首地址,起始页,占多少页,起始列,占多少列
uchar i,j,page=0xb0;//指向首页命令
d_where=d_where*32;
for(i=page_f;i<page_sum+page_f;i++)
{
LCD_write(page+i,0);
LCD_write(0x10|((0xf0&column_f)>>4),0);//设定列地址高4位为0
LCD_write(0x04|(0x0f&column_f),0); //设定列地址低4位为0
for(j=0;j<column_sum;j++)
{
LCD_write(BMP[d_where],1);
d_where++;
}
}
}
//------------------------------------------------------------------------------
int main(void)
{
uchar i=0;
LCD_Init();
clrscr(0,8,0,128);
Draw_word(0,4,2,24,16);
Draw_word(1,4,2,40,16);
while(1);
}
|
打赏
-
查看全部打赏
|