LCD12864驱动显示程序

LCD12864驱动显示程序这里是用的并行写法 后续会更新串行 并行缺点就是太占用 io 口了 我其实更喜欢用串行 不过不是比赛要求都不怎么用了 lcd12864 c include lcd12864 h ucharcodenum 0e sbitRS P3 5 命令 数据选择 sbitRW P3 6 读写

这里是用的并行写法,后续会更新串行 。并行缺点就是太占用io口了,我其实更喜欢用串行。不过不是比赛要求都不怎么用了。

lcd12864.c

#include"lcd12864.h" uchar code num[]={"0 e:.-"}; sbit RS = P3^5; //命令/数据选择 sbit RW = P3^6; //读写口 sbit E = P3^4; //使能端 sbit PSB = P3^7; //串并选择 void delay(uint t) { uint i; while(t--) for(i=0;i<110;i++); } bit busy() //查忙 { bit result; P0=0X00; RS=0; //命令/数据选择,为0时选择命令 RW=1; //读/写选择,为1时选择读 E=1; //使能 delay(1); result = (bit)(P0&0x80); //查忙标志位,等待标志位为0,即表示写入完毕 E=0; //关闭读写 return (result); } void wcode(uchar cmd) //向lcd写一命令 { while(busy()); //查忙 RS=0; //命令/数据选择,为0时选择命令 RW=0; //读/写选择,为0时选择写 E=0; _nop_(); _nop_(); P0=cmd; //送入命令 delay(1); //等待 E=1; delay(1); E=0; } void wdata(uchar dat) //向LCD写一数据 { while(busy()); RS=1; //H为数据 RW=0; E=0; P0=dat; delay(1); E=1; delay(1); E=0; } void initlcd() //LCD初始化 { PSB=1; //设置为8BIT并口工作模式 H并行 L串行 delay(10); wcode(0x34); delay(5); wcode(0x30); //选择基本指令集 delay(5); wcode(0x0c); //开显示,无游标 delay(5); wcode(0x01); //清除显示,并且设定地址指针为00H delay(5); wcode(0x06); //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位 } void dis(uchar x,uchar y,uchar code *s) //任意位置显示字符串 { //x为横坐标,y位纵坐标,*s表示指针,为数据的首地址 switch(y) //选择纵坐标 { case 0:wcode(0x80+x);break; //第一行 case 1:wcode(0x90+x);break; //第二行 case 2:wcode(0x88+x);break; //第三行 case 3:wcode(0x98+x);break; //第四行 default:break; } while(*s>0) //写入数据,直到数据为空 { wdata(*s); //写数据 delay(10); //下一字符 s++; } } void showGB(uchar *HZ) //显示单个汉子 { wdata(HZ[0]); //写入汉字高八位数据 wdata(HZ[1]); //写入低八位 } void wrnum(uchar s) { wdata(num[s]); delay(1); }

数据口D0-D7统一接的P0-P7端。

LCD12864驱动显示程序 比赛设备提供的连线破图……烂画质(自己不重画了,将就看吧hh)

lcd12864.h

#ifndef __LCD12864_H_ #define __LCD12864_H_ #include 
  
    #include 
   
     #define uchar unsigned char #define uint unsigned int extern void delay(uint t); extern bit busy(); extern void wcode(uchar cmd); extern void wdata(uchar d); extern void initlcd(); extern void dis(uchar x,uchar y,uchar code *s); extern void showGB(uchar *HZ); #endif 
    
  

 如果换成其他单片机芯片话,速度可能不同,导致时序就不一样,需要自行更改延时。

https://blog.csdn.net/zy/article/details/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
上一篇 2026年3月26日 下午6:09
下一篇 2026年3月26日 下午6:09


相关推荐

  • linux nohup 命令详解

    linux nohup 命令详解nohup 命令及其输出文件 nohup 命令 如果你正在运行一个进程 而且希望退出账户时该进程不会结束 那么可以使用 nohup 命令 该命令可以在你退出账户 关闭终端之后继续运行相应的进程 nohup 就是不挂起的意思 nohangup 一般在 linux 下 nohup 格式 nohupcommand 或者 nohupcommand amp 这之间的差别是带 amp 的命令行 即

    2026年3月26日
    2
  • windows安装go环境_go语言环境配置

    windows安装go环境_go语言环境配置1、下载go语言安装包下载地址:https://golang.org/dl/,我是win764-bit环境,下载包为go1.8.1.windows-amd64.zip2、安装go和配置go环境变量windows下的go分为msi和zip两种,msi是安装包,zip是免安装包。注意路径不要包含中文。GOARCH(指定系统环境,i386表示x86,amd64表示x64):amd64GOROOT:E:\Go_Software\go(go的解压路径)GOBIN:%GOROOT%\bi

    2022年10月12日
    6
  • SQL去重语句_sql中文

    SQL去重语句_sql中文sql语句去重sql语句通过DISTINCT关键字去重,用于返回唯一不同的值。DISTINCT关键字需要搭配SELECT语句使用,语法为SELECTDISTINCT列名称FROM表名称。如果指定了SELECTDISTINCT,那么ORDERBY子句中的项就必须出现在选择列表中,否则会出现错误。扩展资料:distinct这个关键字用来过滤掉多余的重复记录只保留一条,但往往只用它…

    2022年10月1日
    3
  • 检索DSL是什么

    检索DSL是什么DSL 是 ElasticSearc 的高级搜索

    2026年3月16日
    2
  • 常见银行编码收集_各银行代码简称

    常见银行编码收集_各银行代码简称{"message":"success","code":"M00000","data":

    2022年8月2日
    12
  • Dify AI 是哪家公司开发的?

    Dify AI 是哪家公司开发的?

    2026年3月14日
    3

发表回复

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

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