- 1、小猪外链里发表的文章仅代表作者本人的观点,与本网站立场无关。
2、小猪外链网资源分享仅为个人学习、交流之用,同时向原著作者表达敬意。
3、小猪外链网仅提供信息存储空间服务,小猪外链网信息均来源于用户自行发布,不承担任何法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,可以按照《小猪外链网文章侵权处理流程》进行处理,同时向原著作者表达敬意。
4、内容由网友自主上传,如有侵权、违规请联系邮箱616859395@qq.com进行处理。


12864液晶显示屏串行通信表明
这一篇仅仅比较简单的讲解了 12864液晶显示屏 串行通信表明一些文本不可以表明照片,先看一下 12864 的管脚。
从以上的管脚表明我们可以看得出,假如要想串行通信表明只要将 4、5、6 管脚收到单片机设计就可以了,与此同时还必须将 1、15、20 管脚接地装置,17、19 管脚插线,留意 17 号管脚常说的低电频合理,并并不是将 17 号管脚接地装置校准作用就可以应用了,反而是必须手机软件置低,为了更好地节约 IO 口要将 17 号管脚置高,置高表明 17 号管脚校准作用不应用。 3 号管脚接一 10k可调式变阻以调整12864液晶显示屏 的 亮 度 。
具 体 接 法 可 参 考 下 图 :
下列是程序流程:
/********************************************************************
串行通信12864液晶显示屏
*管脚表明:
CS P1.0
SID P1.1
SCLK P1.2
PSB P1.3
RST P1.4
Ps:由于PSB和RST大家早已在控制电路中联接好啦,因此这两个管脚沒有应用 *********************************************************************** /
#include <msp430g2553.h>
#define uchar unsigned char
#define uint unsigned int
/********************************************************************
* 名字 : delay()
* 作用 : 延迟,延时時间为 100us * t。这也是根据手机软件延迟,有一定偏差。
* 键入 : t
* 导出 : 无
***********************************************************************
/
void delay(unsigned int t)
{
unsigned int i,j;
for(i=0; i<t; i )
for(j=0; j<10; j );
}
/********************************************************************
* 名字 : sendbyte()
* 作用 : 依照液晶显示屏的串口通信协议,传送数据
* 键入 : zdata
* 导出 : 无
***********************************************************************
/
void sendbyte(unsigned char zdata)
{
unsigned int i; for(i=0; i<8; i )
{
if((zdata << i) & 0x80)
{
P1OUT |= BIT1; //SID = 1;
}
else
{
P1OUT &= ~BIT1;//SID = 0;
}
P1OUT &= ~BIT2;//SCLK = 0; P1OUT |= BIT2;//SCLK = 1;
}
}
/********************************************************************
* 名字 : write_com()
* 作用 : 写串口通信命令
* 键入 : cmdcode
* 导出 : 无
**********************************************************************/
void write_com(unsigned char cmdcode)
{
P1OUT |= BIT0;//CS = 1;
sendbyte(0xf8); //告知12864下面传送指令 sendbyte(cmdcode & 0xf0); sendbyte((cmdcode << 4) & 0xf0);
delay(2);
}
/********************************************************************
* 名字 : write_data()
* 作用 : 写串口通信命令
* 键入 : cmdcode
* 导出 : 无
***********************************************************************
/
void write_data(unsigned char Dispdata)
{
P1OUT |= BIT0;//CS = 1;
sendbyte(0xfa); //告知12864下面传送数据 sendbyte(Dispdata & 0xf0); sendbyte((Dispdata << 4) & 0xf0); delay(2);
}
/********************************************************************
* 名字 : lcdinit()
* 作用 : 复位函数公式
* 键入 : cmdcode
* 导出 : 无
***********************************************************************
/
void lcdinit()
{
/* P1OUT &= ~BIT4;//RST = 0; delay(100);
P1OUT |= BIT4;//RST = 1; 这一部分是LCD校准作用,大家早已将校准管脚置高,因此校准作用不可以应用了,假如要应用校准作用就将其收到单片机设计IO口再再加上这一段函数公式就可以了*/
delay(20000);
write_com(0x30); //基本上命令实际操作
delay(50);
write_com(0x0c); //表明开 关掉鼠标光标
delay(50);
}
/********************************************************************
* 名字 : hzkdis()
* 作用 : 表明字符串数组
* 键入 : *s
* 导出 : 无
***********************************************************************
/
void hzkdis( char *s)
{
while(*s > 0)
{
write_data(*s);
s ;
delay(50);
}
}
/********************************************************************
* 名字 : Test()
* 作用 : 表明子函数
* 键入 : 无
* 导出 : 无
***********************************************************************
/
void Test()
{
write_com(0x03); //详细地址归到 delay(50);
write_com(0x81); //表明第一行hzkdis("二院农技协");
write_com(0x91); //表明第二行hzkdis("刘渠");
}
/********************************************************************
* 名字 : Main()
* 作用 : 主函数
* 键入 : 无
* 导出 : 无
***********************************************************************
/
void main()
{
P1DIR |= BIT0 BIT1 BIT2 BIT3 BIT4; WDTCTL = WDTPW WDTHOLD; //关掉看门狗1
/* P1OUT &= ~BIT3; PSB = 0; 串并行处理挑选,假如要应用并行处理方法,只需置高
就可以了,大家已经将PSB接地装置挑选了串行通信这一句可以不必*/
delay(1);
lcdinit();
delay(10);
while(1)
{
Test();
delay(5000);
}
}
12864 程序流程的深入分析:
void sendbyte(unsigned char zdata)
{
unsigned int i;
for(i=0; i<8; i )
{
if((zdata << i) & 0x80)
{
P1OUT |= BIT1; //SID = 1;
}
else
{
P1OUT &= ~BIT1;//SID = 0;
}
P1OUT &= ~BIT2;//SCLK = 0;
P1OUT |= BIT2;//SCLK = 1;
}
}
这一函数公式的功用便是依照12864传送数据的状态图将数据信息一位一位的传输给12864,这
部 分 程 序 需 要 参 照 12864 的 时 序 图 来
if((zdata << i) & 0x80) 这也是在分辨传输回来的数据信息 zdata 的每一位数据是 0
或是 1, 假定 zadata 是 10101111 来研究一下, 那麼便是 zdata 先左进 0 或是
10101111 不会改变,随后与 0x80 开展“与”计算,0x80 便是 10000000, 10101111
& 10000000
————
10000000
“与”完后为 1000000,为非 0,因此 P1OUT 导出 1,随后 i 相当于 1;zdata
左进 1 为 01011110;再与 0x80 开展“与”计算,結果为 00000000,因此 P1OUT 输
出为 0;与 0x80 开展“与”计算,由于 0x80 仅有第一位是 1,别的全是 0,因此那样就
可以不更改 zdata 的第一位数据信息而使别的位为 0,假如 zdata 第一位为 1“与”后結果
就是是非非零,就导出 1,相反反过来。
void write_com(unsigned char cmdcode)
{
P1OUT |= BIT0;//CS = 1;
sendbyte(0xf8); //告知12864下面传送指令 sendbyte(cmdcode & 0xf0); sendbyte((cmdcode << 4) & 0xf0); delay(2);
}
传送指令的函数公式,P1OUT |= BIT0; 先使片选数据信号为高,下面才可以逐渐传送数据,
sendbyte(0xf8);0xf8可以从12864的操作手册中查出他是告知12864下面传输的
是命令。随后把数据信息分2次传输以往。
Ps:本程序流程所应用单片机设计为 MSP430.
【申明】一部分信息内容来源于互联网技术,力争安全性立即、准确,目地取决于传送其他信息,并不意味着对其思想观点赞成或对其真实有效承担。如本网转截信息内容涉及到出版权等问题,请立即与本网联络删掉。
网站公告
近期本站被人为恶意注册及发布垃圾帖,每一个发帖都会经过审核,一经发现违法或垃圾帖的用户,帖子将被删除或封号,请大家共同维护互联网环境,共创美好互联网未来。
详细的发帖规则请阅读:
《小猪外链网发帖规则》
《小猪外链网最新金币规则》
注:本站严禁发布灰色违禁违法内容,如发现立刻永久封号,如开通会员的概不退款。
免责申明:本网站内容由平台入驻会员撰写,除创始人账号外,其他观点仅代表作者本人,不代表小猪外链网立场。如果内容涉及侵犯其他公司、团体的利益、请联系小猪SEO外链网客服举证删除
您的IP:3.129.211.72,2025-05-05 19:37:24,Processed in 0.29056 second(s).