12864液晶ST7920控制器各种曲线显示仪.docx
- 文档编号:3457092
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:15
- 大小:18.35KB
12864液晶ST7920控制器各种曲线显示仪.docx
《12864液晶ST7920控制器各种曲线显示仪.docx》由会员分享,可在线阅读,更多相关《12864液晶ST7920控制器各种曲线显示仪.docx(15页珍藏版)》请在冰豆网上搜索。
12864液晶ST7920控制器各种曲线显示仪
/***************************************************************************************************************
程序说明:
用单片机STC89C52和LCD12864做的曲线显示器,本程序集字体显示、图形显示、任意坐标打点于一体,
可以做成温度曲线,电压曲线等显示仪,采集程序自己设计,加进去就可以用了
程序设计者:
莫剑辉
程序测试时间:
2011-9-10
****************************************************************************************************************/
#include
#include"LCD12864.h"
uintn;
ucharcodepitch[]=
{
/*--调入了一幅图像:
C:
\DocumentsandSettings\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,
};//温度坐标图
voiddelay(uintt)
{
while(t--);
}
voidmain()
{
ucharp=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
*****************************************************************************/
#defineucharunsignedchar
#defineuintunsignedint
#defineLCD_DATAP0//数据输出端0~7
sbitLCD_RS=P2^7;//LCD12864RS端
sbitLCD_RW=P2^6;//LCD12864RW端
sbitLCD_EN=P2^5;//LCD12864EN端
/*****************************************************************************
延时50us函数
*****************************************************************************/
voidDelay_50us(uintc)//误差-0.086805555556us
{
uchara,b;
for(b=c;b>0;b--)
for(a=20;a>0;a--);
}
/*****************************************************************************
LCD12864液晶测忙函数(读状态)
*****************************************************************************/
voidLCD_Busy()
{
ucharbusy;
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液晶数据读取函数
*****************************************************************************/
ucharRead_Data()
{
uchartemp;
LCD_Busy();//测忙
P0=0xff;//初始化数据端口全部置高
LCD_RW=1;//选读
LCD_EN=0;//关闭使能端
LCD_RS=1;//选数据
Delay_50us
(1);//读数据持续时间最小值1500ns
LCD_EN=1;//拉高,数据开始读入
temp=LCD_DATA;//读取数据口的数据
Delay_50us
(1);//延时50us,保证读取完成
LCD_EN=0;//再次置低,准备下一次工作
returntemp;//将读到的数据返回
}
/*****************************************************************************
LCD12864液晶数据写入函数
*****************************************************************************/
voidWrite_Data(uchardat)
{
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液晶指令写入函数
*****************************************************************************/
voidWrite_Com(ucharcom)
{
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液晶任意位置打点函数
*****************************************************************************/
voidLCD_SET_Dot(ucharx,uchary)
{
ucharx_byte,x_bit;//确定dot在横轴上的哪个字节内的哪个位
uchary_byte,y_bit;//确定dot在竖轴上的哪个字节内的哪个位
ucharTempH,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地址指令后,若要读取数据需要预先dummyread一次,才会读到正确数据
//第2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 12864 液晶 ST7920 控制器 各种 曲线 显示