#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define DATA P0 //LCD12864数据线
sbit RS=P2^0; // 数据\指令 选择
sbit RW=P2^1; // 读\写 选择
sbit EN=P2^2; // 读\写使能
sbit cs1=P2^3; // 片选1
sbit cs2=P2^4; // 片选2
/********************************/
/* 定义中文字库 */
/********************************/
uchar code Hzk[]={
/*-- 文字: 相 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x10,0x10,0xD0,0xFF,0x90,0x10,0x00,0xFE,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,
0x08,0x04,0x03,0x00,0xFF,0x00,0x03,0x00,0xFF,0x42,0x42,0x42,0x42,0xFF,0x00,0x00,
/*-- 文字: 信 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x80,0x60,0xF8,0x07,0x00,0x04,0x24,0x24,0x25,0x26,0x24,0x24,0x24,0x04,0x00,
0x01,0x00,0x00,0xFF,0x00,0x00,0x00,0xF9,0x49,0x49,0x49,0x49,0x49,0xF9,0x00,0x00,
/*-- 文字: 自 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0xF8,0x88,0x8C,0x8A,0x89,0x88,0x88,0x88,0xF8,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xFF,0x00,0x00,0x00,0x00,
/*-- 文字: 己 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,0x00,0x00,
0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x78,0x00,0x00,
/*-- 文字: 超 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x40,0x48,0x48,0x48,0xFF,0x48,0x48,0x42,0xA2,0x9E,0x82,0xA2,0xC2,0xBE,0x00,0x00,
0x80,0x60,0x1F,0x20,0x7F,0x44,0x44,0x40,0x4F,0x48,0x48,0x48,0x48,0x4F,0x40,0x00,
/*-- 文字: 越 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x40,0x48,0x48,0xFF,0x48,0x48,0x00,0xF8,0x08,0x08,0xFF,0x08,0x89,0x6A,0x00,0x00,
0x80,0x7E,0x10,0x3F,0x44,0x44,0x40,0x4F,0x44,0x50,0x49,0x46,0x49,0x5C,0x40,0x00,
/*-- 文字: 自 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0xF8,0x88,0x8C,0x8A,0x89,0x88,0x88,0x88,0xF8,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xFF,0x00,0x00,0x00,0x00,
/*-- 文字: 己 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,0x00,0x00,
0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x78,0x00,0x00,
/*-- 文字: ☆ --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x40,0xC0,0x40,0x40,0x40,0x60,0x1C,0x03,0x1C,0x60,0x40,0x40,0x40,0xC0,0x40,0x00,
0x00,0x00,0x41,0x39,0x26,0x10,0x10,0x08,0x08,0x10,0x26,0x39,0x41,0x00,0x00,0x00,
/*-- 文字: * --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x40,0x40,0x80,0x80,0x00,0xFC,0x00,0x80,0x80,0x40,0x40,0x00,0x00,0x00,
0x00,0x00,0x00,0x10,0x08,0x04,0x03,0x01,0x03,0x04,0x08,0x10,0x00,0x00,0x00,0x00,
};
/*状态检查,LCD是否忙*/
void CheckState()
{uchar dat;//状态信息(判断是否忙)
RS=0; // 数据\指令选择,D/I(RS)=“L” ,表示 DB7∽DB0 为显示指令数据
RW=1; //R/W=“H” ,E=“H”数据被读到DB7∽DB0
do{DATA=0x00;
EN=1; //EN下降沿
dat=DATA;
EN=0;
dat=0x80 & dat; //仅当第7位为0时才可操作(判别busy信号)
}while(!(dat==0x00));
}
/*写命令到LCD中*/
SendCommandToLCD(uchar com)
{CheckState();//状态检查,LCD是否忙
RS=0; //向LCD发送命令。RS=0写指令,RS=1写数据
RW=0;//R/W=“L” ,E=“H→L”数据被写到 IR 或 DR
DATA=com; //com :命令
EN=1;//EN下降沿
EN=0;
}
/*设置页 0xb8是页的首地址*/
void SetLine(uchar page)
{page=0xb8|page; //1011 1xxx 0<=page<=7 设定页地址--X 0-7,8行为一页64/8=8,共8页
SendCommandToLCD(page);
}
/*设定显示开始行,0xc0是行的首地址*/
void SetStartLine(uchar startline)
{startline=0xc0|startline; //1100 0000
SendCommandToLCD(startline); //设置从哪行开始:0--63,一般从0 行开始显示
}
/*设定列地址--Y 0-63 ,0x40是列的首地址*/
void SetColumn(uchar column)
{column=column &0x3f; //column最大值为64,越出 0=<column<=63
column= 0x40|column; //01xx xxxx
SendCommandToLCD(column);
}
/*开关显示,0x3f是开显示,0x3e是关显示*/
void SetOnOff(uchar onoff)
{onoff=0x3e|onoff; //0011 111x,onoff只能为0或者1
SendCommandToLCD(onoff);
}
/*写显示数据 */
void WriteByte(uchar dat)
{CheckState();//状态检查,LCD是否忙
RS=1; //RS=0写指令,RS=1写数据
RW=0;////R/W=“L” ,E=“H→L”数据被写到 IR 或 DR
DATA=dat;//dat:显示数据
EN=1; //EN下降源
EN=0;
}
/*选择屏幕screen: 0-全屏,1-左屏,2-右屏*/
void SelectScreen(uchar screen)
{switch(screen)
{case 0: cs1=1;//全屏
cs2=1;
break;
case 1: cs1=1;//左屏
cs2=0;
break;
case 2: cs1=0;//右屏
cs2=1;
break;
}
}
/*清屏screen: 0-全屏,1-左屏,2-右屏*/
void ClearScreen(uchar screen)
{uchar i,j;
SelectScreen(screen);
for(i=0;i<8;i++) //控制页数0-7,共8页
{SetLine(i);
SetColumn(0);
for(j=0;j<64;j++) //控制列数0-63,共64列
{WriteByte(0x00);} //写点内容,列地址自动加1
}
}
/*延时程序*/
void delay(uint z)
{uint i,j;
for(i=0; i<z; i++)
for(j = 0; j < 110; j++);
}
/*初始化LCD*/
void InitLCD()
{CheckState();
SelectScreen(0);
SetOnOff(0); //关显示
SelectScreen(0);
SetOnOff(1); //开显示
SelectScreen(0);
ClearScreen(0);//清屏
SetStartLine(0); //开始行:0
}
/*显示全角汉字*/
void Display(uchar ss,uchar page,uchar column,uchar number)
{int i; //选屏参数,page选页参数,column选列参数,number选第几汉字输出
SelectScreen(ss);
column=column&0x3f;
SetLine(page); //写上半页
SetColumn(column); //控制列
for(i=0;i<16;i++) //控制16列的数据输出
{WriteByte(Hzk[i+32*number]);} //i+32*number汉字的前16个数据输出
SetLine(page+1); //写下半页
SetColumn(column); //控制列
for(i=0;i<16;i++) //控制16列的数据输出
{WriteByte(Hzk[i+32*number+16]);}//i+32*number+16汉字的后16个数据输出
}
/*显示半角汉字和数字和字母
void Displayen(uchar ss,uchar page,uchar column,uchar number)
{uint i;//选屏参数,pagr选页参数,column选列参数,number选第几汉字输出
SelectScreen(ss);
column=column&0x3f;
SetLine(page); //写上半页
SetColumn(column);
for(i=0;i<8;i++)
{WriteByte(Ezk[i+16*number]);}
SetLine(page+1); //写下半页
SetColumn(column);
for(i=0;i<8;i++)
{WriteByte(Ezk[i+16*number+8]);}
}*/
/*主函数*/
void main()
{uint i,j,n=0;
InitLCD();//初始12864
while(1)
{for(i=0;i<2;i++)//显示边上的☆和*
{for(j=1;j<3;j++)
{Display(j,0,i*32+n*16,8);
Display(j,6,i*32+(!n)*16,8);
Display(j,0,i*32+(!n)*16,9);
Display(j,6,i*32+n*16,9);
}
}
Display(1,4-2*n,0,8);
Display(2,2+2*n,48,8);
Display(1,2+2*n,0,9);
Display(2,2+2*(!n),48,9);
//显示汉字
for(i=0;i<2;i++)
{Display(1,2,32+i*16,i);/*Display(选屏参数(cs1,cs2),pagr选页参数,column选列参数,number选第几汉字输出)*/
Display(1,4,32+i*16,i+4);
Display(2,2,0+i*16,i+2);
Display(2,4,0+i*16,i+6);
}
n=!n;
delay(255);
delay(255);
}
}
CrMylive.
- 粉丝: 1w+
- 资源: 4万+
最新资源
- 51单片机多路温度采集系统(二) C程序、proteus仿真、报告、仿真操作视频 实现对温度进行多路检测并准确显示 支持LCD1602循环显示当前8组温度值
- 四轮独立驱动电动汽车转矩分配控制 CarSim与Simulink联合 三自由度车辆模型(纵向、横向、横摆) 控制方法为离散LQR(包括连续系统的离散方法和求解方法) 带有完整详细的控制器、二自由度稳定
- MATLAB环境下一种基于模型的脉冲小波及其稀疏表示在轴承故障诊断中的应用 算法运行环境为MATLAB R2018A,将脉冲小波及其稀疏表示应用于轴承故障诊断 算法可迁移至金融时间序列,地震 微震
- MATLAB代码:电网-热网-气网的调度模型 目标函数:最小化火电发电成本、天然气源出力成本 电力系统中的机组包括传统燃煤机组、燃气机组以及CHP机组 负荷除了常规负荷外,还包括电锅炉 考虑39
- 基于滑膜控制的后轮主动(ARS)和DYC的协调稳定性控制,上层ARS产生期望后轮转角度,DYC产生横摆力矩Mz,下层采用基于附着系数和车速对附加横摆力矩进行分配,控制效果良好,能实现车辆在高低附着系数
- 多区温控程序,单区温控程序 温控仪表程序控制,MCGS通讯温控仪表控制温度升温工艺控制程序, 各种品牌PID仪表通讯触摸屏,30段温控程序,升温,恒温,降温,宇电控温工艺,岛电工艺程序,MCGS通讯
- 双闭环转速、电流直流调速系统的课程设计(MATLAB仿真) matlab simulink搭建的双闭环直流调速系统,电气模型,采用了ASR和ACR两个PI调节器,可以再保证系统稳定的条件下实现转速
- 智能软开关 主动配电网 优化运行 sop 规划 调度 配电网 重构 在电力系统运行中,智能软开关sop具有灵活地调节潮流和电压的能力 智能软开关sop是相较于传统联络开关提出的新的开关形式 智能软
- 多电压等级直流微店网母线电压控制研究 1、高频隔离DC DC变器模型(DAB-双有源全桥),基于MATLAB Simulink建模仿真 电压电流双闭环控制,功率双向流动,ZVS软开关 2、buck
- Modbus 主站 从站 在STM32单片机上的实现,企业在用的程序
- MATLAB代码:多源动态最优潮流的分布鲁棒优化方法 关键词:鲁棒优化;最优潮流;数据驱动;多源电力系统;不确定性 参考文档:《多源动态最优潮流的分布鲁棒优化方法》 仿真平台:MATLAB YALM
- 威纶通触摸屏与4台台达变频器485通讯,不经过pLc,有启动,停止,正转,反转频率输出,频率设定,电流输出,电压输出,DC-bus电压 马达转速
- 威纶通触摸屏与台达变频器485通讯,不经过PLC,有启动,停止,正转,反转频率输出,频率设定,电流输出,电压输出, 马达转速,运行状态
- MATLAB仿真-基于下垂控制的离网仿真 可观察负载突增下频率变化以及频率变化率 主电路为三相逆变器、LC滤波器、功率负载 控制方法为下垂控制 附带原理lunwen
- 默纳克系统升级工具烧录程序软件升级工具v3.14 v3.16 老国标烧录软件V1.26 Bootloader烧录工具V2.41 V3.10 一共5个烧录程序,软件升级
- 三菱FX3U PLC,三轴搬运程序,程序结构清晰 通俗易懂,注释齐全,控制三个台达B2伺服,信捷触摸屏程序,有电气CAD图纸
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈