本帖最后由 ae43 于 2022-1-27 12:07 编辑
#include<reg51.h>
#include"AMPIRE128X64.h"
void LCDCheckBusy(){ //查忙
LCDPORT=0xFF;
LCD12864RW=1;
LCD12864RS=0;
LCD12864EN=1;
LCD12864EN=0;
return BUSYSTATUS;
}
void LCDWriteData(unsigned char Data) //写数据
{
//while( LCDCheckBusy() );
LCDPORT=0xFF;
LCD12864RW=0;
LCD12864RS=1;
LCDPORT=Data;
LCD12864EN=1;
LCD12864EN=0;
}
void LCDWriteCMD(unsigned char CMD)//写指令
{
//while(LCDCheckBusy());
LCDPORT=0xFF;
LCD12864RW=0;
LCD12864RS=0;
LCDPORT=CMD;
LCD12864EN=1;
LCD12864EN=0;
}
//LCD开显示
void LCDTurnOn()
{
LCDWriteCMD(0x3f);
}
//LCD页地址设置
bit LCDSetPage(unsigned char nPage)
{
bit stat=0;
if(nPage<8)
LCDWriteCMD(0xb8+nPage);
else stat=1;
return stat;
}
//LCD关显示
void LCDTurnOff()
{
LCDWriteCMD(0x3e);
}
//LCD列地址设置
bit LCDSetColumn(unsigned char nColumn)
{
bit stat=0;
if(nColumn<64)
LCDWriteCMD(0x40+nColumn);
else stat=1;
return stat;
}
//LCD初始化
void LCD12864Init()
{
LCD12864CS1 = 0;
LCD12864CS2 = 0;
LCDTurnOn();
//LCD开显示
ClearScreen(0);
LCDSetPage(0);
//LCD页初始地址,共8页
LCDSetColumn(0);
//LCD列初始地址,共64列
}
/*选择屏幕screen: 0-全屏,1-左屏,2-右屏*/
void SelectScreen(uchar screen)
{
switch(screen)
{ case 0: LCD12864CS1=0;//全屏
_nop_(); _nop_(); _nop_();
LCD12864CS2=0;
_nop_(); _nop_(); _nop_();
break;
case 1: LCD12864CS1=0;//左屏
_nop_(); _nop_(); _nop_();
LCD12864CS2=1;
_nop_(); _nop_(); _nop_();
break;
case 2: LCD12864CS1=1;//右屏
_nop_(); _nop_(); _nop_();
LCD12864CS2=0;
_nop_(); _nop_(); _nop_();
break;
}
}
/*清屏screen: 0-全屏,1-左屏,2-右*/
void ClearScreen(uchar screen)
{
uchar i,j;
SelectScreen(screen);
for(i=0;i<8;i++) //控制页数0-7,共8页
{
LCDSetPage(i);
LCDSetColumn(0);
for(j=0;j<64;j++) //控制列数0-63,共64列
{LCDWriteData(0x00); //写点内容,列地址自动加1
}
}
}
/*延时程序*/
void delay(uchar z)
{
uchar i,j;
for(i=0; i<z; i++)
for(j = 0; j < 110; j++);
}
#include<reg51.h>
#include"AMPIRE128X64.h"
//---声明一个全局变量---//
void Delay10ms(unsigned int c);
#define unchar unsigned char
uchar code HZ[]=
{
/*-- 文字: 温 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x60,0x02,0x8C,0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,
0x04,0x04,0x7E,0x01,0x40,0x7E,0x42,0x42,0x7E,0x42,0x7E,0x42,0x42,0x7E,0x40,0x00,
/*-- 文字: 度 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0x25,0x26,0x24,0xFC,0x24,0x24,0x24,0x04,0x00,
0x40,0x30,0x8F,0x80,0x84,0x4C,0x55,0x25,0x25,0x25,0x55,0x4C,0x80,0x80,0x80,0x00,
/*-- 文字: 1 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: : --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 温 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x60,0x02,0x8C,0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,
0x04,0x04,0x7E,0x01,0x40,0x7E,0x42,0x42,0x7E,0x42,0x7E,0x42,0x42,0x7E,0x40,0x00,
/*-- 文字: 度 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0x25,0x26,0x24,0xFC,0x24,0x24,0x24,0x04,0x00,
0x40,0x30,0x8F,0x80,0x84,0x4C,0x55,0x25,0x25,0x25,0x55,0x4C,0x80,0x80,0x80,0x00,
/*-- 文字: 2 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x70,0x08,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: : --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 温 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x60,0x02,0x8C,0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,
0x04,0x04,0x7E,0x01,0x40,0x7E,0x42,0x42,0x7E,0x42,0x7E,0x42,0x42,0x7E,0x40,0x00,
/*-- 文字: 度 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0x25,0x26,0x24,0xFC,0x24,0x24,0x24,0x04,0x00,
0x40,0x30,0x8F,0x80,0x84,0x4C,0x55,0x25,0x25,0x25,0x55,0x4C,0x80,0x80,0x80,0x00,
/*-- 文字: 3 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x30,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x18,0x20,0x21,0x21,0x22,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: : --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
/*显示全角汉字*/
void Display(uchar ss,uchar page,uchar column,uchar number)
{
int i; //选屏参数,pagr选页参数,column选列参数,number选第几汉字输出
SelectScreen(ss);
column=column&0x3f;
LCDSetPage(page); //写上半页
LCDSetColumn(column); //控制列
for(i=0;i<16;i++) //控制16列的数据输出
{
LCDWriteData(HZ[i+32*number]); //i+32*number汉字的前16个数据输出
}
LCDSetPage(page+1); //写下半页
LCDSetColumn(column); //控制列
for(i=0;i<16;i++) //控制16列的数据输出
{
LCDWriteData(HZ[i+32*number+16]); //i+32*number+16汉字的后16个数据输出
}
}
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{
uchar i;
LCD12864RST=1;
LCD12864Init();
ClearScreen(0);//清屏
LCDSetColumn(0);
LCDSetPage(0);
while(1)
{
/* 可以单个显示
Display(2,0,0*16,0);//
Display(2,0,1*16,1);//
Display(2,0,2*16,2);//
Display(2,0,3*16,3);//
Display(1,0,4*16,4);//
Display(1,0,5*16,5);//
Display(1,0,6*16,6);//*
/* 可以多个显示,这里是4个一起显示*/
/*for(i=0;i<4;i++)
{
Display(1,0,i*16,i);/*Display(选屏参数(CS2,CS1),pagr选页参数,
column选列参数,number选第几汉字输出)
_nop_();
Display(2,0,i*16,i+4);
_nop_();
Display(1,0+2,i*16,i+8);
_nop_();
Display(2,0+2,i*16,i+12);
_nop_();
Display(1,0+2+2,i*16,i+16);
_nop_();
Display(2,0+2+2,i*16,i+20);
}
*/
for(i=0;i<4;i++)
Display(1,0,i*16,i);//温度1
for(i=0;i<4;i++)
Display(1,0+2,i*16,i+4);//温度2
for(i=0;i<4;i++)
Display(1,0+2+2,i*16,i+8);//温度3
/*显示八个字
for(i=0;i<8;i++)
{
Display(1,0+2+2+2,i*8,i);
_nop_(); ;
Display(2,0+2+2+2,i*8,i+8);
}
*/
}
}
/*******************************************************************************
* 函 数 名 : Delay10ms
* 函数功能 : 延时函数,延时10ms
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void Delay10ms(unsigned int c) //误差 0us
{
unsigned char a,b;
for(;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}
//两个文件以#include为分界
|