51单片机12864串口硬件电路图和程序

51单片机12864串口硬件电路图和程序1 12864BV2 0 液晶显示块 有不同时期生产的 他们在硬件上有可能不一样 串 并口的转换在硬件上的设置有可能不太一样 本实验所用实物如图所示 液晶正面液晶背面 2 程序 文件名 硬件串行 12864Bv2 0 显示 c 描述 该程序实现了 12864 以串行的方式进行通信

1、12864B V2.0液晶显示块,有不同时期生产的,他们在硬件上有可能不一样,串、并口的转换在硬件上的设置有可能不太一样。本实验所用实物如图所示:

正面
液晶正面
背面
液晶背面






2、程序

/ * 文件名 : 硬件串行12864B v2.0显示.c * 描述 : 该程序实现了12864以串行的方式进行通信。 */ #include  
     #define uchar unsigned char #define uint unsigned int sbit CS=P2^7; //片选信号 第4脚 sbit SID=P2^6; //数据信号 第5脚 sbit SCLK=P2^5; //时钟信号 第6脚 /* 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87, //第一行汉字位置 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97, //第二行汉字位置 0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, //第三行汉字位置 0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f, //第四行汉字位置 / / * 名称 : 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) { 
    SID = 1; } else { 
    SID = 0; } SCLK = 0; SCLK = 1; } } / * 名称 : write_com() * 功能 : 写串口指令 * 输入 : cmdcode * 输出 : 无 */ void write_com(unsigned char cmdcode) { 
    CS = 1; sendbyte(0xf8); sendbyte(cmdcode & 0xf0); sendbyte((cmdcode << 4) & 0xf0); delay(2); } / * 名称 : write_data() * 功能 : 写串口指令 * 输入 : cmdcode * 输出 : 无 */ void write_data(unsigned char Dispdata) { 
    CS = 1; sendbyte(0xfa); sendbyte(Dispdata & 0xf0); sendbyte((Dispdata << 4) & 0xf0); delay(2); } / * 名称 : lcdinit() * 功能 : 初始化函数 * 输入 : cmdcode * 输出 : 无 */ void lcdinit() { 
    delay(2000); write_com(0x30); delay(50); write_com(0x0c); delay(50); } / * 名称 : hzkdis() * 功能 : 显示字符串 * 输入 : *s * 输出 : 无 */ void hzkdis(unsigned char code *s) { 
    while(*s > 0) { 
    write_data(*s); s++; delay(50); } } / * 名称 : Test() * 功能 : 显示子函数 * 输入 : 无 * 输出 : 无 //注意,如果有“数”这个字,会出现乱码。 //注意,如果有“数”这个字,会出现乱码。 //注意,如果有“数”这个字,会出现乱码。 //注意,如果有“数”这个字,会出现乱码。 */ void Test() { 
    write_com(0x03); delay(50); write_com(0x80); hzkdis("电动汽车与电网互"); write_com(0x90); hzkdis("动停车场:Floor3"); write_com(0x88); hzkdis("充电车辆 3 辆"); write_com(0x98); hzkdis("136.5A 372.2V"); } / * 名称 : Main() * 功能 : 主函数 * 输入 : 无 * 输出 : 无 */ void Main() { 
    delay(10); lcdinit(); delay(10); while(1) { 
    Test(); delay(50000); write_com(0x01);//清屏 delay(20000); } } 3、液晶描述 ![在这里插入图片描述](https://img-blog.csdnimg.cn/fe4efa7eaab6cd7b1466.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfMTk1MzIwODM=,size_20,color_FFFFFF,t_70,g_se,x_16) 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/178276.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午5:39
下一篇 2026年3月26日 下午5:39


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号