12864液晶(ST7920控制器)--各种曲线显示仪

12864液晶(ST7920控制器)--各种曲线显示仪
12864液晶(ST7920控制器)--各种曲线显示仪

/****************************************************************************** *********************************

程序说明:用单片机STC89C52和LCD12864做的曲线显示器,本程序集字体显示、图形显示、任意坐标打点于一体,

可以做成温度曲线,电压曲线等显示仪,采集程序自己设计,加进去就可以用了程序设计者:莫剑辉

程序测试时间:2011-9-10

******************************************************************************* *********************************/

#include

#include"LCD12864.h"

uint n;

uchar code pitch[]=

{

/*-- 调入了一幅图像:C:\Documents and Settings\Administrator\桌面\LCD点阵12864画温度曲线\LCD点阵12864画温度曲线\温度坐标.bmp --*/

/*-- 宽度x高度=128x64 --*/

0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x1D,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x11,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x1D,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x05,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x1D,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x15,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x15,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x1D,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x05,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x05,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x1D,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x05,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x1D,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x05,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x1D,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x1D,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x05,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x1D,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x11,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x1D,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x05,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x05,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x05,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x05,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x05,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x10,0x04,0x01,0x00,0x40,0x10,0x04,0x01,0x00,0x40,0x10,0x04,0x01,0x00,0x40, 0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x01,0xC0,0x04,0x03,0x80,0xE0,0x28,0x0E,0x03,0x80,0xE0,0x38,0x0E,0x05,0xC0,0x90, 0x01,0x40,0x04,0x00,0x80,0x20,0x28,0x08,0x02,0x00,0x20,0x28,0x0A,0x05,0x40,0x90, 0x01,0x40,0x04,0x03,0x80,0xE0,0x38,0x0E,0x03,0x80,0x20,0x38,0x0E,0x05,0x40,0x90, 0x01,0x40,0x04,0x02,0x00,0x20,0x08,0x02,0x02,0x80,0x20,0x28,0x02,0x05,0x40,0x90, 0x01,0xC0,0x04,0x03,0x80,0xE0,0x08,0x0E,0x03,0x80,0x20,0x38,0x02,0x05,0xC0,0x90, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, }; //温度坐标图

void delay(uint t)

{

while(t--);

}

void main()

{

uchar p=56;

LCD_Init();

LCD_SET_Disply(1,2,"曲线显示器");

LCD_SET_Disply(3,0," 制作者:莫剑辉");

delay(50000);

delay(50000);

delay(50000);

Clear_DDRAM();

Clear_GDRAM(); //清除GDRAM,消除刚上电时GDRAM数据随机造成的花屏while(1)

{

Clear_GDRAM(); //清除显示

Delay_50us(2); //延时100us

Picture_Disp(pitch);

for(n=12;n<128;n++)

{

LCD_SET_Dot(n,p);

p--;

if(p<=0)

{

p=56;

}

delay(50000);

}

}

}

LCD12864.H文件程序:

/***************************************************************************** 程序调试员:莫剑辉

调试时间:2011-3-7

*****************************************************************************/ #define uchar unsigned char

#define uint unsigned int

#define LCD_DATA P0 //数据输出端0~7

sbit LCD_RS=P2^7; //LCD12864 RS端

sbit LCD_RW=P2^6; //LCD12864 RW端

sbit LCD_EN=P2^5; //LCD12864 EN端

/*****************************************************************************

延时50us函数

*****************************************************************************/ void Delay_50us(uint c) //误差-0.086805555556us

{

uchar a,b;

for(b=c;b>0;b--)

for(a=20;a>0;a--);

}

/*****************************************************************************

LCD12864液晶测忙函数(读状态)

*****************************************************************************/ void LCD_Busy()

{

uchar busy;

do

{

LCD_EN = 0; //关闭使能端

LCD_RS = 0; //选指令

LCD_RW = 1; //选读

Delay_50us(1); //读指令持续时间最小值1500ns

LCD_EN = 1; //拉高,数据开始读入

busy=LCD_DATA; //读取数据口的数据

Delay_50us(2); //延时50us,保证读取完成

LCD_EN = 0; //再次置低,准备下一次工作

}

while(busy&0x80); //判断BUSY位是否工作:1为内部在工作,0为正常状态}

/*****************************************************************************

LCD12864液晶数据读取函数

*****************************************************************************/ uchar Read_Data()

{

uchar temp;

LCD_Busy(); //测忙

P0=0xff; //初始化数据端口全部置高

LCD_RW=1; //选读

LCD_EN=0; //关闭使能端

LCD_RS=1; //选数据

Delay_50us(1); //读数据持续时间最小值1500ns

LCD_EN=1; //拉高,数据开始读入

temp=LCD_DA TA; //读取数据口的数据

Delay_50us(1); //延时50us,保证读取完成

LCD_EN=0; //再次置低,准备下一次工作

return temp; //将读到的数据返回

}

/*****************************************************************************

LCD12864液晶数据写入函数

*****************************************************************************/ void Write_Data(uchar dat)

{

LCD_Busy(); //测忙

LCD_RW=0; //选写

LCD_EN=0; //关闭使能端

LCD_RS=1; //选数据

LCD_DATA=dat; //把数据送到数据口

Delay_50us(1); //写数据持续时间最小值1500ns

LCD_EN=1; //拉高,数据立马写入

Delay_50us(1); //延时50us,保证写入完成

LCD_EN=0; //再次置低,准备下一次工作

}

/*****************************************************************************

LCD12864液晶指令写入函数

*****************************************************************************/ void Write_Com(uchar com)

{

LCD_Busy(); //测忙

LCD_RW=0; //选写

LCD_EN=0; //关闭使能端

LCD_RS=0; //选指令

LCD_DATA=com; //把指令送到数据口

Delay_50us(1); //写指令持续时间最小值1500ns

LCD_EN=1; //拉高,指令立马写入

Delay_50us(1); //延时50us,保证写入完成

LCD_EN=0; //再次置低,准备下一次工作

}

/*****************************************************************************

LCD12864液晶任意位置打点函数

*****************************************************************************/ void LCD_SET_Dot(uchar x,uchar y)

{

uchar x_byte,x_bit; //确定dot在横轴上的哪个字节内的哪个位

uchar y_byte,y_bit; //确定dot在竖轴上的哪个字节内的哪个位

uchar TempH,TempL; //用来存放读出来的原始数据的高8位和低8位,

//目的是为了避免新的数据点写进去后覆盖掉前面的点

x=x&0x7f; //限制横坐标所在范围,为0-127

y=y&0x3f; //限制纵坐标所在范围,为0-31(上半屏) 0-31(下半屏)

x_byte=x/16; //确定该dot在哪一个字节

x_bit=x%16; //确定该dot在哪一个点

y_byte=y/32; //确定该dot在那个半屏,0:上半屏1:下半屏

y_bit=y%32; //确定该dot在第几行(因为到了下半屏也是从0行开始到31行)

Write_Com(0x34); //打开扩展指令集,关闭基本功能模式,绘图显示关闭

Write_Com(0x80+y_bit); //先将光标纵坐标写到指定行

Write_Com(0x80+x_byte+8*y_byte); //再将光标横坐标写到指定位置,若y_byte为1,则说明大于了31行(从0行算起)

//则需将AC指针写到0x88处即ST7920控制下的第3行

Read_Data(); //当下设定AC地址指令后,若要读取数据需要预先dummy read一次,才会读到正确数据

//第2次读取时不需要dummy read,除非又重新设定AC位置才需再次dummy read

TempH=Read_Data(); //读取高8位数据

TempL=Read_Data(); //读取低8位数据

Write_Com(0x80+y_bit); //读操作会改变AC位置,所以需要重新写入1次

Write_Com(0x80+x_byte+8*y_byte);

if(x_bit<8)

{

Write_Data(TempH|(0x01<<(7-x_bit))); //如果要写的dot在高8位,则这样写利用or运算避免新数据覆盖原先数据

Write_Data(TempL); //原先的低8位数据照常写入}

else

{

Write_Data(TempH); //如果要写的dot在低8位,原先的高8位数据照常写入

Write_Data(TempL|(0x01<<(15-x_bit))); //低8位则这样写利用or运算避免新数据覆盖原先数据

}

Write_Com(0x36); //开绘图显示

Write_Com(0x30); //回到GDRAM显示模式

}

/*****************************************************************************

LCD12864液晶数据显示函数

*****************************************************************************/ void LCD_SET_Disply(uchar y,uchar x,uchar *z)

{

uchar Address;

if(y==1){Address=0x80+x;} //Y判断第几行,X判断第几列,0x80为液晶行初始地址

if(y==2){Address=0x90+x;}

if(y==3){Address=0x88+x;}

if(y==4){Address=0x98+x;}

Write_Com(Address); //写入地址命令到LCD12864

while(*z != '\0')

{

Write_Data(*(z++)); //写入显示数据到LCD12864

}

}

void Picture_Disp(uchar code *adder)

{

uint i,j;

Write_Com(0x34);

Delay_50us(2);

//*******显示上半屏内容设置

for(i=0;i<32;i++) // 上半屏32个列地址

{

Write_Com(0x80 + i); //SET 垂直地址VERTICAL ADD

Write_Com(0x80); //SET 水平地址HORIZONTAL ADD

for(j=0;j<16;j++)

{

Write_Data(*adder);

adder++;

}

}

//*******显示下半屏内容设置

for(i=0;i<32;i++) //

{

Write_Com(0x80 + i); //SET 垂直地址VERTICAL ADD

Write_Com(0x88); //SET 水平地址HORIZONTAL ADD

for(j=0;j<16;j++)

{

Write_Data(*adder);

adder++;

}

}

Write_Com(0x36);

Delay_50us(2);

}

/*****************************************************************************

LCD12864液晶清除GDRAM函数

*****************************************************************************/ void Clear_GDRAM()

{

uchar i,j;

Write_Com(0x34); //打开扩展指令集,关闭基本功能模式,绘图显示关闭,准备清除GDRAM,即对每个像素点写0

Delay_50us(2);

/***************用于清除0X80--0X87的前32列******************************/ for(i=0;i<32;i++)

{

Write_Com(0x80+i); //先写垂直坐标地址

Write_Com(0x80); //再写水平坐标地址

for(j=0;j<16;j++)

{

Write_Data(0x00); //每写完1个数后,AC自动加1。

}

}

/*****************用于清除0x88--0x8f的前32列***************/

for(i=0;i<32;i++)

{

Write_Com(0x80+i); //先写垂直坐标地址

Write_Com(0x88); //再写水平地址

for(j=0;j<16;j++)

{

Write_Data(0x00); //每写完1个数后,AC自动加1

}

}

Write_Com(0x36);

Delay_50us(2);

}

/*****************************************************************************

LCD12864液晶清除DDRAM函数

*****************************************************************************/ void Clear_DDRAM()

{

uchar i;

Write_Com(0x30);

Write_Com(0x80);

for(i=0;i<32;i++)

{

Write_Data(' ');

}

Write_Com(0x90);

for(i=0;i<32;i++)

{

Write_Data(' ');

}

}

/*****************************************************************************

LCD12864液晶初始化函数

*****************************************************************************/ void LCD_Init(void)

{

Write_Com(0x30); //表示写入基本指令集,执行时间72us

Delay_50us(2); //延时100us

Write_Com(0x02); //地址归位,DDRAM位址计数器AC到00H,执行时间72us

Delay_50us(2); //延时100us

Write_Com(0x0c); //开整体显示,游标关闭游标位置不反白,执行时间72us

Delay_50us(2); //延时100us

// write_com(0x0e); //开整体显示,游标打开,游标位置不反白,执行时间72us

// Delay_50us(2); //延时100us

Write_Com(0x06); //进入点设定,游标右移DDRAM位址计数器(AC)+1,表示,写入1个数据后光标自动怎么动,执行时间72us

Delay_50us(2); //延时100us

Write_Com(0x80); //设定DDRAM地址,即显示起始地址

Delay_50us(2); //延时100us

Write_Com(0x01); //清除显示

Delay_50us(2); //延时100us

}

LCD12864显示程序

;实验目的:熟悉12864LCD的使用 ;12864LCD带中文字库 ;编程让12864LCD显示公司名称“深圳乾龙盛电子”,公司电话“0975”,公司传真“6”;硬件设置: ;关断所有拨码开关。 #include<> ;__CONFIG _DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_H S_OSC ;芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡 #define RS PORTA,5 ;命令/数据选择 #DEFINE RW PORTA,4 ;读/写选择 #DEFINE E PORTA,3 ;使能信号 #DEFINE PSB PORTA,2 ;并口/串口选择(H/L) #DEFINE RST PORTA,0 ;复位信号 ;----------------------------------------------- LCD_X EQU 30H ;页地址 LCD_Y EQU 31H ;Y地址 COUNT EQU 32H ;循环计数用 COUNT1 EQU 33H ;循环计数用 COUNT2 EQU 34H ;循环计数用 POINT EQU 35H ;查表偏移地址 POINT1 EQU 36H ;查表偏移地址 POINT2 EQU 37H ;查表偏移地址 TEMP EQU 38H ;临时寄存器 TEMP1 EQU 39H ;临时寄存器 ;----------------------------------------------- ORG 0000H ;复位地址 NOP ;ICD需要的空指令 GOTO MAIN ;跳转到主程序 ;**********************主程序************************ MAIN BANKSEL TRISA CLRF TRISA ;A口输出 CLRF TRISD ;D口输出 BANKSEL ADCON1 MOVLW 06H MOVWF ADCON1 ;A口全为数字口 CLRF STATUS

12864液晶显示图片原理(完整版)

51单片机综合学习 12864液晶原理分析1 辛勤学习了好几天,终于对12864液晶有了些初步了解~没有视频教程学起来真有些累,基本上内部程序写入顺序都是根据程序自我变动,然后逆向反推出原理…… 芯片:YM12864R P-1 控制芯片:ST7920A带中文字库 初步小结: 1、控制芯片不同,寄存器定义会不同 2、显示方式有并行和串行,程序不同 3、含字库芯片显示字符时不必对字符取模了 4、对芯片的结构地址一定要理解清楚

5、显示汉字时液晶芯片写入数据的顺序(即显示的顺序)要清楚 6、显示图片时液晶芯片写入数据的顺序(即显示的顺序)要清楚 7、显示汉字时的二级单元(一级为八位数据写入单元)要清楚 8、显示图片时的二级单元(一级为八位数据写入单元)要清楚 12864点阵液晶显示模块(LCM)就是由128*64个液晶显示点组成的一个128列*64行的阵列。每个显示点对应一位二进制数,1表示亮,0表示灭。存储这些点阵信息的RAM称为显示数据存储器。要显示某个图形或汉字就是将相应的点阵信息写入

到相应的存储单元中。图形或汉字的点阵信息由自己设计,问题的关键就是显示点在液晶屏上的位置(行和列)与其在存储器中的地址之间的关系。由于多数液晶显示模块的驱动电路是由一片行驱动器和两片列驱动器构成,所以12864液晶屏实际上是由左右两块独立的64*64液晶屏拼接而成,每半屏有一个512*8 bits显示数据RAM。左右半屏驱动电路及存储器分别由片选信号CS1和CS2选择。显示点在64*64液晶屏上的位置由行号(line,0~63)与列号(column,0~63)确定。512*8 bits RAM中某个存储单元的地址由页地址(Xpage,0~7)和列地址(Yaddress,0~63)确定。每个存储单元存储8个液晶点的显示信息。

LCD12864显示程序

本例程为通过用A T89C52芯片操作LCD12864显示的程序,使用的晶振为12M。 /********************************************************** 程序说明:LCD12864显示主程序 程序调试员:莫剑辉 调试时间:2010-6-7 **********************************************************/ #include #include"12864.c" void main() { Ini_Lcd(); //液晶初始化子程序 Disp(1,0,6,"莫剑辉"); //显示数据到LCD12864子程序 while(1); } 这里我们通过调用下面的头文件就可以了,这样的做法方便我们以后要用到LCD12864的程序的调用。 /********************************************************** 程序说明:LCD12864显示头文件 程序调试员:莫剑辉 调试时间:2010-6-7 **********************************************************/ //#include #define uchar unsigned char #define uint unsigned int #define DATA P2 //数据输出端0~7 sbit RS=P0^0; //LCD12864 RS端 sbit RW=P0^1; //LCD12864 RW端 sbit E =P0^2; //LCD12864 E 端 sbit PSB =P0^3; /********************************************* 延时子程序 *********************************************/ void Delay_1ms(uint x) { uint j,i; for(j=0;j

12864点阵型液晶显示屏的基本原理与使用方法(很详细)

12864点阵型液晶显示屏的基本原理与使用方法(很详细) 点阵LCD的显示原理 在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果。对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。而对于中文,常用却有6000以上,于是我们的DOS前辈想了一个办法,就是将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。而剩下的低128位则留给英文字符使用,即英文的内码。 那么,得到了汉字的内码后,还仅是一组数字,那又如何在屏幕上去显示呢?这就涉及到文字的字模,字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状,如英文的'A'在字模的记载方式如图1所示: 图1“A”字模图 而中文的“你”在字模中的记载却如图2所示:

图2“你”字模图 12864点阵型LCD简介 12864是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64全点阵液晶显示器组成。可完成图形显示,也可以显示8×4个(16×16点阵)汉字。 管脚号管脚名称LEVER管脚功能描述 1VSS0电源地 2VDD+5.0V电源电压 3V0-液晶显示器驱动电压 4D/I(RS)H/L D/I=“H”,表示DB7∽DB0为显示数据 D/I=“L”,表示DB7∽DB0为显示指令数据5R/W H/L R/W=“H”,E=“H”数据被读到DB7∽DB0 R/W=“L”,E=“H→L”数据被写到IR或DR 6E H/L R/W=“L”,E信号下降沿锁存DB7∽DB0 R/W=“H”,E=“H”DDRAM数据读到DB7∽DB0 7DB0H/L数据线 8DB1H/L数据线 9DB2H/L数据线 10DB3H/L数据线 11DB4H/L数据线 12DB5H/L数据线 13DB6H/L数据线 14DB7H/L数据线 15CS1H/L H:选择芯片(右半屏)信号 16CS2H/L H:选择芯片(左半屏)信号 17RET H/L复位信号,低电平复位

玩转12864液晶(1)--显示字符

在我们常用的人机交互显示界面中,除了数码管,LED,以及我们之前已经提到的LCD1602之外,还有一种液晶屏用的比较多。相信接触过单片机的朋友都知道了,那就是12864液晶。顾名思义,12864表示其横向可以显示128个点,纵向可以显示64个点。我们常用的12864液晶模块中有带字库的,也有不带字库的,其控制芯片也有很多种,如KS0108 T6963,ST7920等等。在这里我们以ST7920为主控芯片的12864液晶屏来学习如何去驱动它。(液晶屏采用金鹏的OCMJ4X8C) 关于这个液晶屏的更多信息,请参考它的DATASHEET,附件中有下载。 我们先来了解一下它的并行连接情况。 下面是电路连接图

从上面的图可以看出,液晶模块和单片机的连接除了P0口的8位并行数据线之外,还有RS,RW,E等几根线。其中R/S是指令和数据寄存器的选择控制线(串行模式下为片选),R/W 是读写控制线(串行模式下是数据线),E是使能线(串行模式下为时钟线)。 通过这几根控制线和数据线,再结合它的时序图,我们就可以编写出相应的驱动程序啦。 看看并行模式下的写时序图:

根据这个时序图,我们就可以写出写数据或者写命令到LCD12864液晶的子程序。 读时序图如下: 根据这个时序图我们就可以从LCD12864液晶模块内部RAM中读出相应的数据,我们的忙检测函数就是根据这个时序图写出来的。以及后面章节中讲的画点函数等都要用到读时序。有了这两个时序图,然后我们再看看OCMJ4X8C的相关指令集,就可以编写出驱动程序了。这里要注意的是指令集分为基本指令集和扩充指令集,其中扩充指令集主要是与绘图相关,在此后的章节中会有相应的介绍。 下面让我们根据这些编写出它的驱动程序吧。 我的硬件测试条件为:STC89C516(11.0592MHz) + OCMJ4X8C 实际显示效果图片如下: 程序部分如下,请结合液晶模块的DATASHEET看程序,这样能够更加快速的弄懂程序的流程。大致有如下几个函数:写数据,写指令,忙检测,初始化,指定地址显示字符串等等。[p][/p] #include "reg52.h" #include "intrins.h" sbit io_LCD12864_RS = P1^0 ;

12864LCD液晶显示原理及使用方法

12864LCD液晶显示原理及使用方法 液晶简介 液晶是一种在一定温度范围内呈现既不同于固态液态又不同于气态的特殊物质态,它既具有各向异性的晶体所特有的双折射性又具有液体的流动性液晶显示器件(英文的简写为LCD)就是利用液晶态物质的液晶分子排列状态在电场中改变而调制外界光的被动型显示器件。 点阵式图形液晶显示屏是 LCD 的一种能够动态显示图形汉字以及各种符号信息为各种电子产品提供了友好的人机界面点阵式图形液晶显示屏的主要特点如下(这些特点也就是LCD 的特点):工作电压低、微功耗、体积小、可视面积大、无电磁辐射、数字接口、寿命长等特点。 12864LCD是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64 全点阵液晶显示器组成。可完成图形显示,也可以显示8×4 个(16×16 点阵)汉字或者显示16×4个(8×16 点阵)ASCII码。分为两种,带字库的和不带字库的。不带字库的LCD需要自己提供字库字模,此时可以根据个人喜好设置各种字体显示风格,设计上较为灵活。带字库的LCD提供字库字模,但是只能显示GB2312的宋体。各有优缺点,根据不同应用场景灵活选择。其液晶模块原理图如下所示。 12864LCD点阵图形液晶模块原理框图 下面给出了其应用连接电路,分别介绍其各引脚的功能和作用。 如下表所示:12864LCD 的引脚说明 管脚号管脚名称LEVER 管脚功能描述 1GND 0 电源地 2VCC+5.0V 电源电压 3VLCD - 液晶显示器驱动电压 4RS (D/I) H/LD/I=“H”,表示DB7∽DB0 为显示数据 D/I=“L”,表示DB7∽DB0 为显示指令数据5R/W H/L R/W=“H”,E=“H”数据被读到DB7∽DB0 R/W=“L”,E=“H→L”数据被写到IR 或DR 6EN H/L R/W=“L”,E 信号下降沿锁存DB7∽DB0

LCD12864图形液晶并口显示

LCD12864图形液晶并口显示 【教学引入】 液晶屏,在生活中很常见,我们常见的液晶显示器,如电脑的显示器,电视机,手机等等。 液晶屏在生活中已得到了普遍应用,它显示个各种各样的画面。 【教学目标】 1、掌握LCD12864液晶屏的用法; 2、编写LCD12864液晶屏的指令代码; 【知识目标】 1、掌握LCD12864液晶屏的用法; 2、掌握LCD12864液晶屏指令代码; 【教学准备】 电脑、Proteus、Keil 【教学方法】 教法:讲授法、讨论法 学法:练习法、探究法 【教学课时】 四课时 【教学过程】 一、12864液晶介绍 (1)12864是128*64点阵液晶模块的点阵数简称,业界约定俗成的简称。12864点阵的屏显成本相对较低,适用于各类仪器,小型设备的显示领域。12864M汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。

12864引脚说明 查阅“12864M.PDF”12864M液晶显示模块技术手册——四、用户指令集 1、指令表1:(RE=0:基本指令表),如下图,讲解了12864的基本指令集和扩充指令集。

当模块在接受指令前,微处理器必须先确认模块内部处于非忙碌状态,即读取BF标志时BF需为0。“RE”为基本指令集与扩充指令集的选择控制位元,往后的指令集将维持在最后的状态。 当选择G=0 :绘图显示OFF,汉字显示的时,12864屏只能显示8X4=32个汉字,下面是汉字显示的坐标

二、12864液晶屏驱动电路 AT89C52的P0口连接12864的并行数据口,RP1为P0口的上拉排阻。 三、52代码编写 (1)打开keil uVision4,建立一个新的工程,工程名为"12864 graphic LCD parallel display",保存类型*.uvproj,单片机型号AT89C52。在工程中添加12864 graphic LCD parallel display.c文件,如下图

12864点阵液晶显示模块的原理

12864点阵液晶显示模块的原理 12864 点阵液晶显示模块的原理12864 点阵液晶显示模块(LCM)就是由128*64 个液晶显示点组成的一个128 列*64 行的阵列。每个显示点对应一位二 进制数,1 表示亮,0 表示灭。存储这些点阵信息的RAM 称为显示数据存储器。要显示某个图形或汉字就是将相应的点阵信息写入到相应的存储单元中。图形 或汉字的点阵信息当然由自己设计,问题的关键就是显示点在液晶屏上的位置(行和列)与其在存储器中的地址之间的关系。由于多数液晶显示模块的驱动 电路是由一片行驱动器和两片列驱动器构成,所以12864 液晶屏实际上是由左 右两块独立的64*64 液晶屏拼接而成,每半屏有一个512*8 bits 显示数据RAM。左右半屏驱动电路及存储器分别由片选信号CS1 和CS2 选择。(少数厂 商为了简化用户设计,在模块中增加译码电路,使得128*64 液晶屏就是一个 整屏,只需一个片选信号。)显示点在64*64 液晶屏上的位置由行号 (line,0~63)与列号(column,0~63)确定。512*8 bits RAM 中某个存储单元的地址由页地址(Xpage,0~7)和列地址(Yaddress,0~63)确定。每个存储单元存储8 个液晶点的显示信息。为了使液晶点位置信息与存储地址的对应关系更直 观关,将64*64 液晶屏从上至下8 等分为8 个显示块,每块包括8 行*64 列个 点阵。每列中的8 行点阵信息构成一个8bits 二进制数,存储在一个存储单元 中。(需要注意:二进制的高低有效位顺序与行号对应关系因不同商家而不同) 存放一个显示块的RAM 区称为存储页。即64*64 液晶屏的点阵信息存储在8 个存储页中,每页64 个字节,每个字节存储一列(8 行)点阵信息。因此存储单 元地址包括页地址(Xpage,0~7)和列地址(Yaddress,0~63)。例如点亮128*64 的屏中(20,30)位置上的液晶点,因列地址30 小于64,该点在左半屏第29 列,所以CS1 有效;行地址20 除以8 取整得2,取余得4,该点在RAM 中页

(完整版)12864lcd显示部分试验总结报告

12864lcd显示部分试验总结报告 管岱2014.12.19 【实验目的】 在12864液晶显示屏上能够显示出在4×4小键盘上输入的激励源频率值,如输入“789HZ”、“8MHZ”、“2.3KHZ”,显示出“789H”、“8M”、“2.3K”。并且要求此部分程序有较好的可移植性,在最后对电阻率值的显示上能够较好的应用。 【实验原理】 12864-3A接口说明表: 在12864液晶显示原理的基础上,通过在ise上编写vhdl语言,使之能够在fpga学习板上顺利显示数据。

【实验内容】 12864的显示原理并不难理解,并且在以前也用汇编语言实现过,所以本次实验的难点不在于显示原理的理解,而在于VHDL语言的编写。 在实验初期,由于对vhdl语言的不熟练,我们“类比”汇编语言的显示程序,编写出如下的程序: 发现编译时就出现了问题,出现如“multi-source in unit <*> on signal <*>”的报错。在仔细调试检查后发现,我们错误的原因在于:在不同的进程中对同一个信号赋值。例如,在写指

令的进程中,将rs信号置‘0’,而在后面写数据的进程中又将rs置‘1’,由于在vhdl中各进程之间是并行的关系,因此这样编写程序会出现在同一时刻对同一个引脚赋高电平和低电平,从而出现矛盾。虽然在程序实际运行中,写指令进程在系统一上电就会完成,远早于写数据进程,但是在逻辑上这样编写是不符合VHDL语言的规则的。 因此,我们利用状态机的思想,将写指令和写数据的两个进程合二为一。程序片段如下: 利用状态机,将写指令和写数据的各个步骤分为一个一个分立的状态,顺序执行。这样编写将对同一个引脚信号的变化放在一个进程中,很好的解决了之前存在的问题。

Lcd12864点阵液晶屏显示原理

https://www.360docs.net/doc/8510616461.html, Lcd12864点阵液晶屏显示原理 Lcd12864,它就是128列+64行的阵列。每个型号的液晶模块都有它的一些参数,下面看下lcd12864显示的一些原理吧。 lcd12864,每个显示点对应一位二进制数,1表示亮,0表示灭。存储这些点阵信息的RAM称为显示数据存储器。要显示某个图形或汉字就是将相应的点阵信息写入到相应的存储单元中。图形或汉字的点阵信息当然由自己设计,问题的关键就是显示点在液晶屏上的位置与其在存储器中的地址之间的关系。 由于多数液晶显示模块的驱动电路是由一片行驱动器和两片列驱动器构成,所以12864液晶屏实际上是由左右两块独立的64*64液晶屏拼接而成,每半屏有一个512*8 bits 显示数据RAM。左右半屏驱动电路及存储器分别由片选信号CS1和CS2选择。 显示点在64*64液晶屏上的位置由行号(line,0~63)与列号(column,0~63)确定。512*8 bits RAM中某个存储单元的地址由页地址(Xpage,0~7)和列地址(Yaddress,0~63)确定。每个存储单元存储8个液晶点的显示信息。 为了使液晶点位置信息与存储地址的对应关系更直观关,将64*64液晶屏从上至下8等分为8个显示块,每块包括8行*64列个点阵。每列中的8行点阵信息构成一个8bits二进制数,存储在一个存储单元中。需要注意:二进制的高低有效位顺序与行号对应关系因不同商家而不同。 存放一个显示块的RAM区称为存储页。即64*64液晶屏的点阵信息存储在8个存储页中,每页64个字节,每个字节存储一列(8行)点阵信息。因此存储单元地址包括页地址(Xpage,0~7)和列地址(Yaddress,0~63)。 例如点亮128*64的屏中(20,30)位置上的液晶点,因列地址30小于64,该点在左半屏第29列,所以CS1有效;行地址20除以8取整得2,取余得4,该点在RAM中页地址为2,在字节中的序号为4;所以将二进制数据00010000(也可能是00001000,高低顺序取决于制造商)写入Xpage=2,Yaddress=29的存储单元中即点亮(20,30)上的液晶点。 1

12864液晶显示程序

12864液晶显示程序 由北京迪特福科技编撰提供

#include #include sbit RS = P2^5; sbit RW = P2^6; sbit E = P2^7; sbit RES = P3^5; #define Lcd_Bus P0 //MCU P1<------> LCM #define FIRST_ADDR 0 //定义字符/汉字显示起始位置 unsigned char code zk[]={ 0x08,0x20,0x1c,0x10,0x1c,0x1c,0xff,0x9e,0x7f,0x1e,0x1c,0x1f,0x3e,0x1f ,0x3e,0x1f, 0x77,0x1f,0x41,0x3f,0x00,0x7e,0x00,0xfe,0x83,0xfc,0x7f,0xf8,0x3f,0xf0 ,0x0f,0xc0, }; unsigned char code BMP1[]={ /*-- 调入了一幅图像:D:\3033B\3033.bmp --*/ /*-- 宽度x高度=128x64 --*/ /*--总共52行数据,每行16个数据--*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,

0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x0C,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x08,0x00,0x00,0x00,0x00,0x00,0x07,0xF1,0x00,0x03,0x01,0x00,0xF0,0x00 ,0x00,0x00, 0x18,0x00,0x00,0x00,0x00,0x00,0x04,0x01,0x00,0x03,0x81,0x08,0x98,0x00 ,0x00,0x00, 0x10,0x1F,0x07,0x06,0x00,0x00,0x08,0x01,0x00,0x04,0x81,0x11,0x88,0x00 ,0x00,0x00, 0x10,0x21,0x0D,0x83,0xE3,0xC0,0x0F,0x02,0x00,0x04,0xC1,0x31,0x30,0x00 ,0x00,0x00, 0x10,0x21,0x18,0x83,0x06,0x40,0x09,0x82,0x00,0x0F,0xC1,0x21,0xE0,0x00 ,0x00,0x00, 0x10,0x2E,0x11,0x86,0x06,0x40,0x00,0x86,0x00,0x08,0x43,0xC3,0xE0,0x00 ,0x00,0x00, 0x30,0x30,0x11,0x86,0x04,0x40,0x41,0x84,0x10,0x18,0x63,0x82,0x18,0x00 ,0x00,0x00, 0x20,0x1E,0x1F,0x84,0x04,0x60,0x7E,0x04,0x08,0x10,0x23,0x04,0x0E,0x00 ,0x00,0x00, 0x3F,0x83,0x00,0xE0,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x02,0x00 ,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x00,0x00,0x38,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x00,0x00,0x6C,0x3C,0x00,0x20,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x00,0x00,0x42,0x22,0x03,0xFD,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x00,0x00,0x40,0x62,0x00,0x22,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x00,0x00,0x46,0x42,0x00,0x22,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x00,0x00,0x44,0x42,0x00,0x23,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,

LCD12864液晶显示模块(中文资料)

FYD12864液晶中文显示模块

(一) (一)概述 (3) (二)(二)外形尺寸 1 方框图 (3) 2 外型尺寸图 (4) (三)(三)模块的接口 (4) (四)(四)硬件说明 (5) (五) 指令说明 (7) (五)(五)读写操作时序 (8) (六)(六)交流参数 (11) (七)(七)软件初始化过程 (12) (八)(八)应用举例 (13) (九)(九)附录 1半宽字符表 (20) 2 汉字字符表 (21) 一、概述 FYD12864-0402B是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示8×4行16×16点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。 基本特性: ●●低电源电压(VDD:+3.0--+5.5V)

●●显示分辨率:128×64点 ●●内置汉字字库,提供8192个16×16点阵汉字(简繁体可选) ●●内置 128个16×8点阵字符 ●●2MHZ时钟频率 ●●显示方式:STN、半透、正显 ●●驱动方式:1/32DUTY,1/5BIAS ●●视角方向:6点 ●●背光方式:侧部高亮白色LED,功耗仅为普通LED的1/5—1/10 ●●通讯方式:串行、并口可选 ●●内置DC-DC转换电路,无需外加负压 ●●无需片选信号,简化软件设计 ●●工作温度: 0℃ - +55℃ ,存储温度: -20℃ - +60℃ 二、方框图 3、外形尺寸图

12864显示图形

看到工具箱旁边那个LCD12864很久没用了(当初买回来用的时候只是简单地测试了一下),于是萌生了重新写一次接口程序的想法(而且这次要给它加个图片显示的功能),好,说做就做,就用Atmega16和ICCAVR来做吧,最近这MCU和平台用得比较熟练。 马上从书堆里把当初打印出来的中文datasheet给翻了出来,依葫芦画瓢地写了个初始化程序。好,OK。编译通过。于是又写了一个可以自定义从XY坐标值开始输出显示的函数,再次编译,也通过,OK。于是呼马上写了四行简单的字符烧到单片机上试了一下,嘿嘿,一次通过。如下图: 后来在进一步测试的时候也出了点小问题。就是我是使用USBISP烧写器把程序烧写进AVR的(此时实验板由USBISP烧写器供电),想要实现从第一行的第一个字符开始连续显示"0123456789"。刚烧写完程序后能看到LCD12864上正常显示"0123456789",但是把烧写器从实验板上断开连接,单独用USB给实验板供电的时候,LCD的第一行只是显示"123456789",第一个字符消失了……,左思右想地弄了一个多小时后,终于把问题给解决了,就是把初始化程序的延时适当增加了些,真是奇怪。刚开始一直想不通为什么在烧写器供电的情况下就正常显示,而换到USB供电后就出了问题。后来再想想,估计是跟供电有关。在使用USBISP烧写器供电的时候,LCD的背光灯明显比用USB供电的时候来得亮,而且对比度也高很多,看来是因为换到USB供电后,供电不怎么充足,以至于LCD在上电初始化的时候花上了更多的时间去初始化(因为供电低了,功率小了,跑起来有点力不从心,用的时间就久了嘛……我是觉得可以这样去理解的 接下来呢,就到了有点难度的画图了。当初刚买到12864的时候只是简单测试了字符显示功能,除了因为画图还不需要用到,另外一个原因就是那datasheet上关于画图那部分的内容不怎么看得懂…。现在重新拿起来看,依然一头雾水……。马上上网百度了一下“12864 7920 显示图片”,看到了不少的例子程序,可是……就是没看到有关于这部分功能实现的详细思路和讲解……下载下来的那些程序,基本上没注释,不是说晦涩难懂,但是至少看起来一团糟,让人家不想继续看下去……于是还是硬着头皮去啃那datasheet。上面对于画图这部分的内容是这样讲解的:

在12864显示任意图片及参考程序

用12864显示单色图片 首先介绍本12864液晶显示器: 型号:QC12864B 因为单片机读取的是数据,而不是直接的图片。得将图片进行取模,图片应该是单色图片,像素128*64。 下面我为大家介绍个实例。 ①、在电脑附件画图,首先设置属性

开始画图 保存文件,注意格式: ②、然后进行取模。

③、编程: #include #define uchar unsigned char #define uint unsigned int //宏定义 #define lcd P2 //数据端口 sbit rs=P1^2; //指令/数据选择信号 sbit rw=P1^1; //读写选择信号 sbit e=P1^0; //使能端 sbit psb=P1^3; //串并选择端,高电平为并行,低电平为串行 uchar code ai[]={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00, 0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x00,0x00,0x00, 0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC0,0x00,0x00,0x00, 0x00,0x00,0x00,0x01,0xCE,0x00,0x00,0x00,0x00,0x00,0x01,0xC1,0xE0,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xC7,0x00,0x00,0x00,0x00,0x00,0x03,0x31,0xC0,0x00,0x00,0x00, 0x00,0x00,0x00,0x0E,0xC0,0x00,0x00,0x00,0x00,0x00,0x03,0x9B,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x01,0x82,0x08,0x00,0x00,0x00, 0x00,0x00,0x00,0x78,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFC,0x00,0x00,0x00, 0x00,0x00,0x00,0xF8,0xEF,0x00,0x00,0x00,0x00,0x00,0x1B,0xFC,0x1E,0x00,0x00,0x00, 0x00,0x00,0x00,0x18,0xFE,0x00,0x00,0x00,0x00,0x00,0x1E,0x60,0x38,0x00,0x00,0x00, 0x00,0x00,0x00,0x1F,0xE0,0x00,0x00,0x00,0x00,0x00,0x38,0x70,0x20,0x00,0x00,0x00,

LCD12864液晶显示电子钟设计

《单片机原理及应用》 课程设计说明书 题目LCD12864 液晶显示电子钟设 计 系(部) 专业(班级) 姓名 学号 指导教师 起止日期

课程设计任务书系(部):专业:

目录 一、12864液晶的工作原理 (4) 二、方案设计 (4) 2.1 实物硬件设计 (4) 2.2 系统硬件设计 (5) 2.2.1 主芯片模块 (5) 2.2.2 晶振和复位模块 (5) 2.2.3 按钮模块 (6) 2.3 系统软件设计 (6) 2.3.1 主程序设计 (6) 三、仿真和分析 (7) 四、总结体会 (7) 参考文献 (32)

一、12864液晶的工作原理 液晶显示屏中的业态光电显示材料,利用液晶的电光效应把电信号转换成数字符、图像等可见信号。如图1-1,液晶正常情况下,其分子排列很有秩序,显得清澈透明,一旦加上直流电场后,分子的排列被打乱,一部分液晶变的不透明,颜色加深因而能显示数字和图像。管脚一共1个CS1左半屏片选端,CS2右半屏片选端;V0液晶显示驱动电压,通过一个电位器接到VCC;RS数据指令选择信号,H为数据,L为指令,也叫D/I;R/W读写选择信号,H为读,L为写,。E为LCD使能端,R/W为L时,E信号下降沿锁存DB7-DB0;R/W为H时,E为H,DDRAM数据读到DB7-DB0。DB0-DB7数据传输端口。RST复位信号。-VOUT 和V0为液晶显示驱动电压。 12864是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64 全点阵液晶显示器组成。可完成图形显示,也可以显示8×4个(16×16点阵)汉字。 图1-1 12864LCD液晶显示屏 二、方案设计 2.1 实物硬件设计 单片机控制液晶显示屏系统总共可分为六个环节,分别是单片机控制系统、12864字符显示模块、控制开关模块、晶振控制模块、复位电路模块和DS1302时钟控制模块。通过这六个模块的协调工作就可以完成相应的液晶屏控制和显示功能。这六个模块的相互连接如图2-1: 图2-1 硬件组成框图

12864液晶显示器(ST7920)显示程序(并口)

12864液晶显示器(ST7920)显示程序(并口) 附字模软件作者:纪小年16 七月2009 时间:下午10:25 and have 10 条评论 前两天写了一个ST7920控制12864显示的串口程序,今天瞎逛的时候发现了这个超强悍的并口程序,转载一下。来源:CnChina 做了比较详细的注释,看不懂的可以问我。下面的图片中12864所显示的logo就是我用这个程序得到的。 附程序: /******************************************************************** ********** Copyright 2007 All rights reserved. 文件名: .c 模块名称:st7920 并行方式驱动12864液晶驱动 功能概要:st7920显示驱动 取代版本:0.0.1 修改人:pulan 完成日期:2007.07.08 升级说明:create CPU: stc89c58 主频:11.0592M 液晶型号:128*64 生产厂家:驱动芯片:st7920 ********************************************************************* *********/ #include #define uint unsigned int #define uchar unsigned char #define x1 0x80 //1000 0000 #define x2 0x88 //1000 1000 #define y 0x80 //1000 0000 #define comm 0 //定义传送指令代码为0 #define dat 1 //定义传送数据代码为1 sbit RS = P2^0; //H=数据; L=指令;

12864LCD液晶显示屏中文资料

12864LCD液晶显示屏中文资料 一、概述 二、带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示8×4行16×16点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。 三、基本特性: (1)、低电源电压(VDD:+3.0--+5.5V)(2)、显示分辨率:128×64点(3)、内置汉字字库,提供8192个16×16点阵汉字(简繁体可选) (4)、内置 128个16×8点阵字符(5)、2MHZ时钟频率(6)、显示方式:STN、半透、正显(7)、驱动方式:1/32DUTY,1/5BIAS (8)、视角方向:6点(9)、背光方式:侧部高亮白色LED,功耗仅为普通LED的1/5—1/10 (10)、通讯方式:串行、并口可选(11)、内置DC-DC转换电路,无需外加负压(12)、无需片选信号,简化软件设计(13)、工作温度: 0℃ - +55℃ ,存储温度: -20℃ - +60℃ 模块接口说明: *注释1:如在实际应用中仅使用串口通讯模式,可将PSB接固定低电平,也可以将模块上的J8和“GND”用焊锡短接。 *注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。 *注释3:如背光和模块共用一个电源,可以将模块上的JA、JK用焊锡短接。 2.2并行接口

12864液晶显示程序(图案+文字)

#include sbit LCD12864_RS = P2^0; //RS控制引脚 sbit LCD12864_RW = P2^1; //RW控制引脚 sbit LCD12864_EN = P2^2; //EN控制引脚 sbit LCD12864_PSB = P2^3; //模式选择引脚,ST7920控制器,1为8位并行接口,0为串行接口 #define LCDPORT P0//数据引脚 void LCD12864_Init(void); //LCD12864初始化函数 void LCD12864_WriteInfomation(unsigned char ucData,bit bComOrData); //向LCD12864写入数据,bComOrData为1时写入的是数据,0时写入的是命令 void LCD12864_CheckBusy(void);//忙检测函数 void LCD12864_DisplayImage(unsigned char code *ucImage); void Delay(unsigned int uiCount); unsigned char code ucPic1[]={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x06,0x30,0x01,0xE0,0x00,0x00,0x2A,0x00,0x00,0xD8,0x00,0x00,0x00,0x00,0x00, 0x00,0x0F,0x7B,0x63,0xE0,0x00,0x00,0x22,0x00,0x01,0x24,0x00,0x00,0x00,0x00,0x00, 0x00,0x0F,0xFB,0x63,0x07,0x34,0x00,0x14,0x00,0x01,0x04,0x00,0x00,0x00,0x00,0x00, 0x00,0x0D,0xDB,0x63,0x01,0xBC,0x00,0x08,0x00,0x00,0x88,0x00,0x00,0x00,0x00,0x00, 0x00,0x0C,0x1B,0x63,0x07,0xB0,0x00,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x00,0x00, 0x00,0x0C,0x1B,0x63,0xED,0xB0,0xDB,0x00,0x01,0x00,0x20,0x00,0x00,0x00,0x00,0x00, 0x00,0x0C,0x19,0xE1,0xE7,0xB0,0xDB,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x0C,0x19,0xE1,0xE7,0xB0,0xDB,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x03,0xC0,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x05,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x0A,0x80,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x0A,0x00,0x00,0xFF,0xF8,0xE0,0x05,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x06,0xC0,0x15,0x00,0x1F,0xFF,0xFF,0xC0,0x02,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x09,0x20,0x11,0x00,0xFB,0xFF,0xE1,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x08,0x20,0x0A,0x03,0x9F,0x00,0x9E,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x04,0x40,0x04,0x0E,0x70,0x00,0x81,0xC7,0x80,0x01,0x40,0x00,0x00,0x00,0x00, 0x00,0x02,0x80,0x00,0x1D,0x80,0x00,0xE0,0x61,0xE0,0x02,0xA0,0x00,0x00,0x00,0x00, 0x00,0x01,0x00,0x00,0x77,0x9F,0xFC,0xF0,0x18,0xF8,0x02,0x20,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x01,0xDF,0x00,0x00,0xF3,0x0C,0x3C,0x01,0x40,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x03,0x9E,0x00,0x00,0xF8,0x06,0x1E,0x00,0x80,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x07,0x0E,0x30,0x01,0xFC,0x7F,0x07,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x07,0x0E,0x30,0x01,0xFC,0x7F,0x07,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x7E,0xFF,0xFF,0xFF,0xFF,0xFF,0x83,0xC0,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x0F,0xFD,0xFF,0xFF,0xFF,0xFF,0xFC,0x01,0xF0,0x00,0x00,0x00,0x00,0x00,

相关文档
最新文档