51单片机12864显示汉字画图画点常用例程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
uchar i,j;
LCD12864_WriteCmd(0x34);
//开启拓展指令集
for(i=0;i<32;i++) {
//因为 LCD 有纵坐标 32 格所以写三十二次
LCD12864_WriteCmd(0x80+i);
//先写入纵坐标 Y 的值
LCD12864_WriteCmd(0x80);
uchar i; i = 0; while( LCD12864_Busy() == 0) {
LCD12864_Delay1ms(1);
i++;
if( i>100)
{ return;
//超过等待退出
}
}
LCD12864_RS = 0; LCD12864_RW = 0; LCD12864_EN = 0;
* *函数名 * 函数功能 *输 入
: LCD12864_Busy : 检测 LCD 是否忙 :无
*输 出
: 1 或 0(1 表示不忙,0 表示忙)
*******************************************************************************
: 主函数 :无
*输 出
:无
*******************************************************************************
/
void main() {
while(1) {
LCD12864_ClearScreen(); LCD12864_DrowPoint(127,63); while(1); } }
* *函数名
: LCD12864_WriteData
* 函数功能 *输 入 *输 出
: 写数据 : dat :无
*******************************************************************************
/
void LCD12864_WriteData(uchar dat)
* *输 入
* 屏函数 :无
*输 出
:无
*******************************************************************************
/
#ifdef LCD12864_PICTURE
void LCD12864_ClearScreen(void) {
{
uchar i;
i = 0;
while( LCD12864_Busy() == 0)
{
LCD12864_Delay1ms(1);
i++;
if( i>100)
{
return;
//超过等待退出
}
}
LCD12864_RS = 1; LCD12864_RW = 0;
//选择数据 //选择写入
LCD12864_EN = 0; //初始化使能端
//再写入横坐标 X 的值
for(j=0;j<32;j++)
//横坐标有 16 位,每位写入两个字节的的数据,也
{
//就写入 32 次以为当写入两个字节之后横坐标会自
LCD12864_WriteData(0x00);
//动加 1,所以就不用再次写入地址了。
}
}
LCD12864_WriteCmd(0x36); LCD12864_WriteCmd(0x30); }
/******************************************************************************
*
*函数名 * 函数功能
: LCD12864_Delay1ms : 延时 1MS
*输 入
:c
*输 出
:无
*******************************************************************************
uchar LCD12864_ReadData(void) {
uchar i, readValue;
i = 0;
while( LCD12864_Busy() == 0)
{
LCD12864_Delay1ms(1);
i++;
if( i>100)
{ return 0;
//超过等待退出
}
}
LCD12864_RS = 1; LCD12864_RW = 1; LCD12864_EN = 0; LCD12864_Delay1ms(1);
*
*函数名 * 函数功能 *输 入 *输 出
: LCD12864_WriteCmd : 写命令
: cmd :无
*******************************************************************************
/
void LCD12864_WriteCmd(uchar cmd) {
i++; if(i > 100) {
LCD12864_EN = 0; return 0; //超过等待时间返回 0 表示失败 } }
LCD12864_EN = 0;
return 1; }
/******************************************************************************
/
void LCD12864_Delay1ms(uint c) {
uchar a,b; for(; c>0; c--) {
for(b=199; b>0; b--) {
for(a=1; a>0; a--); } } }
/******************************************************************************
LCD12864_PSB = 1; LCD12864_RST = 1;
//选择并行输入 //复位
LCD12864_WriteCmd(0x30); //选择基本指令操作 LCD12864_WriteCmd(0x0c); //显示开,关光标 LCD12864_WriteCmd(0x01); //清除 LCD12864 的显示内容
*
*函数名 * 函数功能 *输 入 *输 出
: LCD12864_ReadData : 读取数据 :无 : 读取到的 8 位数据
*******************************************************************************
/
#ifdef LCD12864_PICTURE
//0x36 扩展指令里面打开绘图显示 //恢复基本指令集
#eБайду номын сангаасdif
/******************************************************************************
}
}//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////以下是被调文件 lcd12864.c 的内容 #include"lcd12864.h"
LCD12864_DATAPORT = dat; //放置数据
LCD12864_EN = 1; LCD12864_Delay1ms(1); LCD12864_EN = 0; }
//写时序
/******************************************************************************
//以下程序都是在 VC++6.0 上调试运行过的程序,没有错误,没有警告。 //单片机是 STC89C52RC,但是在所有的 51 52 单片机上都是通用的。51 只是一个学习的基础 平台,你懂得。 //程序在关键的位置添加了注释。
////////////////////////////////画点例程////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////以下是 主文件 main.c 的内容 #include<reg51.h> #include"lcd12864.h"
//--声明全局函数--// void Delay10ms(unsigned int c); //延时 10ms
/******************************************************************************
* *函数名
: main
* 函数功能 *输 入
//选择命令 //选择写入 //初始化使能端
LCD12864_DATAPORT = cmd; //放置数据
LCD12864_EN = 1; LCD12864_Delay1ms(1); LCD12864_EN = 0; }
//写时序
/******************************************************************************
*
*函数名 * 函数功能
: LCD12864_Init : 初始化 LCD12864
*输 入
:无
*输 出
:无
*******************************************************************************
/
void LCD12864_Init() {
//选择命令 //等待
LCD12864_EN = 1; LCD12864_Delay1ms(1); readValue = LCD12864_DATAPORT; LCD12864_EN = 0;
return readValue; }
#endif
/******************************************************************************
/******************************************************************************
*
*函数名 * 函数功能
: Delay10ms : 延时函数,延时 10ms
*输 入
:无
*输 出
:无
*******************************************************************************
/
uchar LCD12864_Busy(void) {
uchar i = 0;
LCD12864_RS = 0; //选择命令 LCD12864_RW = 1; //选择读取
LCD12864_EN = 1; LCD12864_Delay1ms(1);
while((LCD12864_DATAPORT & 0x80) == 0x80) //检测读取到的值 {
/
void Delay10ms(unsigned int c) //误差 0us
{ unsigned char a, b;
//--c 已经在传递过来的时候已经赋值了,所以在 for 语句第一句就不用赋值了--// for (;c>0;c--) {
for (b=38;b>0;b--) {
for (a=130;a>0;a--); }
}
/******************************************************************************
* *函数名
: LCD12864_ClearScreen
* 函数功能 个清
: 在画图模式下,LCD12864 的 01H 命令不能清屏,所以要自己写一
相关文档
最新文档