lcd12864引脚图文字只能存在code寄存器中吗?

12864使用心得、笔记_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
12864使用心得、笔记
阅读已结束,如果下载本文需要使用
想免费下载本文?
你可能喜欢LCD12864等液晶接口的设计_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
LCD12864等液晶接口的设计
最​近​在​学​习​单​片​机​串​口​通​信​,​翻​阅​以​前​资​料​翻​出​来​的​,​和​童​鞋​们​一​起​学​习​。
阅读已结束,如果下载本文需要使用
想免费下载本文?
你可能喜欢热门版块:
12864显示完文字后,出现了一系列乱码,求救
本帖最后由 km 于
18:10 编辑
#include&reg51.h&
#define uchar unsigned char
#define uint unsigned int
#define LCD12864_DATAPORT P0& & & && &//数据IO口
sbit LCD12864_RS&&=&&P2^6;& && && && & //(数据命令)寄存器选择输入
sbit LCD12864_RW&&=&&P2^5;& && && && & //液晶读/写控制
sbit LCD12864_EN&&=&&P2^7;& && && && & //液晶使能控制
sbit LCD12864_PSB =&&P3^2;& && && && & //串/并方式控制
sbit LCD12864_RST =&&P3^4;& & & & & & & & & & & && & //复位端
void LCD12864_Delay1ms(uint c);
uchar LCD12864_Busy(void);
void LCD12864_WriteCmd(uchar cmd);
void LCD12864_WriteData(uchar dat);
void LCD12864_Init();
void LCD12864_ClearScreen(void);
void LCD12864_SetWindow(uchar x, uchar y);
unsigned char code CharCode[]={&学习&};
void main()
{
& & & & unsigned char i,j;
& & & & LCD12864_Init();
& & & & LCD12864_SetWindow(0, 0);
& & & & LCD12864_Delay1ms(10);
& & & & while(1)
& & & & {& & & &
& & & & & & & && & for(i=0;i&4;i++)
& & & & & & & && & {
& & & & & & & && && &for(j=0;j&16;j++)
& & & & & & & && &&&{
& && && && && && & & & LCD12864_WriteData(CharCode[i*16+j]);
& & & & & & & && &&&}
& && && &&&}
& & & &&&while(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_Busy
* 函数功能& & & & & & & && & : 检测LCD是否忙
* 输& & 入& && && &: 无
* 输& & 出& && && &: 1或0(1表示不忙,0表示忙)
*******************************************************************************/
uchar LCD12864_Busy(void)
{
& & & & uchar i = 0;
& & & & LCD12864_RS = 0;& && & & & //选择命令
& & & & LCD12864_RW = 1;& & & & //选择读取
& & & & LCD12864_EN = 1;
& & & & LCD12864_Delay1ms(1);
& & & & while((LCD12864_DATAPORT & 0x80) == 0x80)& & & & //检测读取到的值
& & & & {
& & & & & & & & i++;
& & & & & & & & if(i & 100)
& & & & & & & & {
& & & & & & & & & & & & LCD12864_EN = 0;
& & & & & & & & & & & & return 0;& & & && & //超过等待时间返回0表示失败
& & & & & & & & }
& & & & }
& & & & LCD12864_EN = 0;
& & & & return 1;
}
/*******************************************************************************
* 函 数 名& && && &: LCD12864_WriteCmd
* 函数功能& & & & & & & && & : 写命令
* 输& & 入& && && &: cmd
* 输& & 出& && && &: 无
*******************************************************************************/
void LCD12864_WriteCmd(uchar cmd)
{
& & & &
& & & & i = 0;
& & & & while( LCD12864_Busy() == 0)
& & & & {
& & & & & & & & LCD12864_Delay1ms(1);
& & & & & & & & i++;
& & & & & & & & if( i&100)
& & & & & & & & {
& & & & & & & & & & & && & & && & //超过等待退出
& & & & & & & & }& & & &
& & & & }
& & & &
& & & & LCD12864_RS = 0;& &&&//选择命令
& & & & LCD12864_RW = 0;& &&&//选择写入
& & & & LCD12864_EN = 0;& &&&//初始化使能端
& & & & LCD12864_DATAPORT =& &//放置数据
& & & & LCD12864_EN = 1;& & & & & & & && & //写时序
& & & & LCD12864_Delay1ms(5);
& & & & LCD12864_EN = 0;& & & & & & & & & & & & & & & & & & & & & &
/*******************************************************************************
* 函 数 名& && && &: LCD12864_WriteData
* 函数功能& & & & & & & && & : 写数据
* 输& & 入& && && &: dat
* 输& & 出& && && &: 无
*******************************************************************************/
void LCD12864_WriteData(uchar dat)
{
& & & &
& & & & i = 0;
& & & & while( LCD12864_Busy() == 0)
& & & & {
& & & & & & & & LCD12864_Delay1ms(1);
& & & & & & & & i++;
& & & & & & & & if( i&100)
& & & & & & & & {
& & & & & & & & & & & && & & && & //超过等待退出
& & & & & & & & }& & & &
& & & & LCD12864_RS = 1;& &&&//选择数据
& & & & LCD12864_RW = 0;& &&&//选择写入
& & & & LCD12864_EN = 0;& &&&//初始化使能端
& & & & LCD12864_DATAPORT =& &//放置数据
& & & & LCD12864_EN = 1;& & & & & & & && & //写时序
& & & & LCD12864_Delay1ms(500);
& & & & LCD12864_EN = 0;& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
/*******************************************************************************
* 函 数 名& && && &: LCD12864_ReadData
* 函数功能& & & & & & & && & : 读取数据
* 输& & 入& && && &: 无
* 输& & 出& && && &: 读取到的8位数据
*******************************************************************************/
uchar LCD12864_ReadData(void)
{
& & & & uchar i, readV
& & & & 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_EN = 1;
& & & & LCD12864_Delay1ms(1);
& & & & readValue = LCD12864_DATAPORT;
& & & & LCD12864_EN = 0;
& & & & return readV
}
/*******************************************************************************
* 函 数 名& && && &: LCD12864_Init
* 函数功能& & & & & & & && & : 初始化LCD12864
* 输& & 入& && && &: 无
* 输& & 出& && && &: 无
*******************************************************************************/
void LCD12864_Init()
{
& & & & LCD12864_PSB = 1;& & & && &//选择并行输入
& & & & LCD12864_RST = 1;& & & && &//复位
& & & & LCD12864_WriteCmd(0x30);&&//选择基本指令操作
& & & & LCD12864_WriteCmd(0x0c);&&//显示开,关光标
& & & & LCD12864_WriteCmd(0x01);&&//清除LCD12864的显示内容
}
/*******************************************************************************
* 函 数 名& && && &: LCD12864_ClearScreen
* 函数功能& & & & & & & && & : 在画图模式下,LCD12864的01H命令不能清屏,所以要自己写一个清
*& && && && && && &* 屏函数
* 输& & 入& && && &: 无
* 输& & 出& && && &: 无
*******************************************************************************/
void LCD12864_ClearScreen(void)
{
& & & & uchar i,j;
& & & & LCD12864_WriteCmd(0x34);& & & && &//开启拓展指令集
& & & & for(i=0;i&32;i++)& & & & & & & & & & & && &//因为LCD有纵坐标32格所以写三十二次
& & & & {
& & & & & & & & LCD12864_WriteCmd(0x80+i);& & & & & & & && &//先写入纵坐标Y的值
& & & & & & & & LCD12864_WriteCmd(0x80);& & & & & & & && &//再写入横坐标X的值
& & & & & & & & for(j=0;j&32;j++)& & & & & & & && &//横坐标有16位,每位写入两个字节的的数据,也
& & & & & & & & {& & & & & & & & & & & & & & & & & & & & & & & && &//就写入32次以为当写入两个字节之后横坐标会自
& & & & & & & & & & & & LCD12864_WriteData(0xFF);& & & && &//动加1,所以就不用再次写入地址了。
& & & & & & & & }
& & & & }
& & & & LCD12864_WriteCmd(0x36);& & & &&&//0x36扩展指令里面打开绘图显示
& & & & LCD12864_WriteCmd(0x30);& & & &&&//恢复基本指令集
}
/*******************************************************************************
* 函 数 名& && && &: LCD12864_SetWindow
* 函数功能& & & & & & & && & : 设置在基本指令模式下设置显示坐标。注意:x是设置行,y是设置列
* 输& & 入& && && &: x, y
* 输& & 出& && && &: 无
*******************************************************************************/
void LCD12864_SetWindow(uchar x, uchar y)
{
& & & &
& & & & if(x == 0)& & & && & // 第一行的地址是80H
& & & & {
& & & & & & & & x = 0x80;
& & & & }
& & & & & & & &
& & & & else if(x == 1)&&//第二行的地址是90H
& & & & {
& & & & & & & & x = 0x90;& & & &
& & & & }
& & & &
& & & & else if(x == 2)&&//第三行的地址是88H
& & & & {
& & & & & & & & x = 0x88;
& & & & }
& & & &
& & & & else if(x == 3)
& & & & {
& & & & & & & & x = 0x98;
& & & & }
& & & &
& & & & pos = x +
& & & & LCD12864_WriteCmd(pos);
}
复制代码
QQ图片46.jpg (11.18 KB, 下载次数: 0)
18:08 上传
QQ图片13.jpg (10.1 KB, 下载次数: 0)
18:08 上传
QQ图片09.jpg (10.17 KB, 下载次数: 0)
18:08 上传
(25.63 KB, 下载次数: 0)
17:28 上传
(30.54 KB, 下载次数: 0)
17:28 上传
(27.82 KB, 下载次数: 0)
17:28 上传
组图打开中,请稍候......
CharCode[]={&学习&}; 你定义的这个数组只有四个字符,而你后面写的程序 LCD12864_WriteData(CharCode[i*16+j]);中超过了四个字节啊!!这肯定会乱码的
CharCode[]={&学习&}; 你定义的这个数组只有四个字符,而你后面写的程序 LCD12864_WriteData(CharCode);中 ...
完全正确,多谢大神的帮助。
站长推荐 /2
Powered by热门版块:
12864显示完文字后,出现了一系列乱码,求救
本帖最后由 km 于
18:10 编辑
#include&reg51.h&
#define uchar unsigned char
#define uint unsigned int
#define LCD12864_DATAPORT P0& & & && &//数据IO口
sbit LCD12864_RS&&=&&P2^6;& && && && & //(数据命令)寄存器选择输入
sbit LCD12864_RW&&=&&P2^5;& && && && & //液晶读/写控制
sbit LCD12864_EN&&=&&P2^7;& && && && & //液晶使能控制
sbit LCD12864_PSB =&&P3^2;& && && && & //串/并方式控制
sbit LCD12864_RST =&&P3^4;& & & & & & & & & & & && & //复位端
void LCD12864_Delay1ms(uint c);
uchar LCD12864_Busy(void);
void LCD12864_WriteCmd(uchar cmd);
void LCD12864_WriteData(uchar dat);
void LCD12864_Init();
void LCD12864_ClearScreen(void);
void LCD12864_SetWindow(uchar x, uchar y);
unsigned char code CharCode[]={&学习&};
void main()
{
& & & & unsigned char i,j;
& & & & LCD12864_Init();
& & & & LCD12864_SetWindow(0, 0);
& & & & LCD12864_Delay1ms(10);
& & & & while(1)
& & & & {& & & &
& & & & & & & && & for(i=0;i&4;i++)
& & & & & & & && & {
& & & & & & & && && &for(j=0;j&16;j++)
& & & & & & & && &&&{
& && && && && && & & & LCD12864_WriteData(CharCode[i*16+j]);
& & & & & & & && &&&}
& && && &&&}
& & & &&&while(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_Busy
* 函数功能& & & & & & & && & : 检测LCD是否忙
* 输& & 入& && && &: 无
* 输& & 出& && && &: 1或0(1表示不忙,0表示忙)
*******************************************************************************/
uchar LCD12864_Busy(void)
{
& & & & uchar i = 0;
& & & & LCD12864_RS = 0;& && & & & //选择命令
& & & & LCD12864_RW = 1;& & & & //选择读取
& & & & LCD12864_EN = 1;
& & & & LCD12864_Delay1ms(1);
& & & & while((LCD12864_DATAPORT & 0x80) == 0x80)& & & & //检测读取到的值
& & & & {
& & & & & & & & i++;
& & & & & & & & if(i & 100)
& & & & & & & & {
& & & & & & & & & & & & LCD12864_EN = 0;
& & & & & & & & & & & & return 0;& & & && & //超过等待时间返回0表示失败
& & & & & & & & }
& & & & }
& & & & LCD12864_EN = 0;
& & & & return 1;
}
/*******************************************************************************
* 函 数 名& && && &: LCD12864_WriteCmd
* 函数功能& & & & & & & && & : 写命令
* 输& & 入& && && &: cmd
* 输& & 出& && && &: 无
*******************************************************************************/
void LCD12864_WriteCmd(uchar cmd)
{
& & & &
& & & & i = 0;
& & & & while( LCD12864_Busy() == 0)
& & & & {
& & & & & & & & LCD12864_Delay1ms(1);
& & & & & & & & i++;
& & & & & & & & if( i&100)
& & & & & & & & {
& & & & & & & & & & & && & & && & //超过等待退出
& & & & & & & & }& & & &
& & & & }
& & & &
& & & & LCD12864_RS = 0;& &&&//选择命令
& & & & LCD12864_RW = 0;& &&&//选择写入
& & & & LCD12864_EN = 0;& &&&//初始化使能端
& & & & LCD12864_DATAPORT =& &//放置数据
& & & & LCD12864_EN = 1;& & & & & & & && & //写时序
& & & & LCD12864_Delay1ms(5);
& & & & LCD12864_EN = 0;& & & & & & & & & & & & & & & & & & & & & &
/*******************************************************************************
* 函 数 名& && && &: LCD12864_WriteData
* 函数功能& & & & & & & && & : 写数据
* 输& & 入& && && &: dat
* 输& & 出& && && &: 无
*******************************************************************************/
void LCD12864_WriteData(uchar dat)
{
& & & &
& & & & i = 0;
& & & & while( LCD12864_Busy() == 0)
& & & & {
& & & & & & & & LCD12864_Delay1ms(1);
& & & & & & & & i++;
& & & & & & & & if( i&100)
& & & & & & & & {
& & & & & & & & & & & && & & && & //超过等待退出
& & & & & & & & }& & & &
& & & & LCD12864_RS = 1;& &&&//选择数据
& & & & LCD12864_RW = 0;& &&&//选择写入
& & & & LCD12864_EN = 0;& &&&//初始化使能端
& & & & LCD12864_DATAPORT =& &//放置数据
& & & & LCD12864_EN = 1;& & & & & & & && & //写时序
& & & & LCD12864_Delay1ms(500);
& & & & LCD12864_EN = 0;& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
/*******************************************************************************
* 函 数 名& && && &: LCD12864_ReadData
* 函数功能& & & & & & & && & : 读取数据
* 输& & 入& && && &: 无
* 输& & 出& && && &: 读取到的8位数据
*******************************************************************************/
uchar LCD12864_ReadData(void)
{
& & & & uchar i, readV
& & & & 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_EN = 1;
& & & & LCD12864_Delay1ms(1);
& & & & readValue = LCD12864_DATAPORT;
& & & & LCD12864_EN = 0;
& & & & return readV
}
/*******************************************************************************
* 函 数 名& && && &: LCD12864_Init
* 函数功能& & & & & & & && & : 初始化LCD12864
* 输& & 入& && && &: 无
* 输& & 出& && && &: 无
*******************************************************************************/
void LCD12864_Init()
{
& & & & LCD12864_PSB = 1;& & & && &//选择并行输入
& & & & LCD12864_RST = 1;& & & && &//复位
& & & & LCD12864_WriteCmd(0x30);&&//选择基本指令操作
& & & & LCD12864_WriteCmd(0x0c);&&//显示开,关光标
& & & & LCD12864_WriteCmd(0x01);&&//清除LCD12864的显示内容
}
/*******************************************************************************
* 函 数 名& && && &: LCD12864_ClearScreen
* 函数功能& & & & & & & && & : 在画图模式下,LCD12864的01H命令不能清屏,所以要自己写一个清
*& && && && && && &* 屏函数
* 输& & 入& && && &: 无
* 输& & 出& && && &: 无
*******************************************************************************/
void LCD12864_ClearScreen(void)
{
& & & & uchar i,j;
& & & & LCD12864_WriteCmd(0x34);& & & && &//开启拓展指令集
& & & & for(i=0;i&32;i++)& & & & & & & & & & & && &//因为LCD有纵坐标32格所以写三十二次
& & & & {
& & & & & & & & LCD12864_WriteCmd(0x80+i);& & & & & & & && &//先写入纵坐标Y的值
& & & & & & & & LCD12864_WriteCmd(0x80);& & & & & & & && &//再写入横坐标X的值
& & & & & & & & for(j=0;j&32;j++)& & & & & & & && &//横坐标有16位,每位写入两个字节的的数据,也
& & & & & & & & {& & & & & & & & & & & & & & & & & & & & & & & && &//就写入32次以为当写入两个字节之后横坐标会自
& & & & & & & & & & & & LCD12864_WriteData(0xFF);& & & && &//动加1,所以就不用再次写入地址了。
& & & & & & & & }
& & & & }
& & & & LCD12864_WriteCmd(0x36);& & & &&&//0x36扩展指令里面打开绘图显示
& & & & LCD12864_WriteCmd(0x30);& & & &&&//恢复基本指令集
}
/*******************************************************************************
* 函 数 名& && && &: LCD12864_SetWindow
* 函数功能& & & & & & & && & : 设置在基本指令模式下设置显示坐标。注意:x是设置行,y是设置列
* 输& & 入& && && &: x, y
* 输& & 出& && && &: 无
*******************************************************************************/
void LCD12864_SetWindow(uchar x, uchar y)
{
& & & &
& & & & if(x == 0)& & & && & // 第一行的地址是80H
& & & & {
& & & & & & & & x = 0x80;
& & & & }
& & & & & & & &
& & & & else if(x == 1)&&//第二行的地址是90H
& & & & {
& & & & & & & & x = 0x90;& & & &
& & & & }
& & & &
& & & & else if(x == 2)&&//第三行的地址是88H
& & & & {
& & & & & & & & x = 0x88;
& & & & }
& & & &
& & & & else if(x == 3)
& & & & {
& & & & & & & & x = 0x98;
& & & & }
& & & &
& & & & pos = x +
& & & & LCD12864_WriteCmd(pos);
}
复制代码
QQ图片46.jpg (11.18 KB, 下载次数: 0)
18:08 上传
QQ图片13.jpg (10.1 KB, 下载次数: 0)
18:08 上传
QQ图片09.jpg (10.17 KB, 下载次数: 0)
18:08 上传
(25.63 KB, 下载次数: 0)
17:28 上传
(30.54 KB, 下载次数: 0)
17:28 上传
(27.82 KB, 下载次数: 0)
17:28 上传
组图打开中,请稍候......
CharCode[]={&学习&}; 你定义的这个数组只有四个字符,而你后面写的程序 LCD12864_WriteData(CharCode[i*16+j]);中超过了四个字节啊!!这肯定会乱码的
CharCode[]={&学习&}; 你定义的这个数组只有四个字符,而你后面写的程序 LCD12864_WriteData(CharCode);中 ...
完全正确,多谢大神的帮助。
站长推荐 /2
Powered byLCD12864Code_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
LCD12864Code
L​C​D26 ​S​o​u​r​c​e​ ​C​o​d​e​ ​ ​ ​使​用
阅读已结束,如果下载本文需要使用
想免费下载本文?
你可能喜欢}

我要回帖

更多关于 lcd12864 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信