Arduino 2线串行 通信 驱动 LCD 12864

news2024/11/16 2:21:36
 上效果图片

 

源代码 Arduino 328p
/*****************************************************************
 * 2线 LCD 12864  (屏幕主控芯片 ST7920)

******************************************************************/


/***********************端口/引脚定义区域************************/
#define LCDCS           2//LCD12864片选端口(原RS)/片选可直接VCC
#define LCDDIO          3//LCD12864串行数据输入/输出(原RW)
#define LCDCLK          4//LCD12864串行时钟(原EN)
#define LCDPSB          5//LCD12864串/并行数据选择端口/串行可直接接地
/*************************函数声明区域***************************/
/****************************************************************/
//初始化液晶模块函数LCD12864_init(),无形参和返回值
/****************************************************************/
void LCD12864_init()
{  
  //LCDPSB=0;//选择串行模式将PSB置“0”或直接接地
  digitalWrite(LCDPSB, LOW);
  //LCDCS=1;//片选12864
  digitalWrite(LCDCS, HIGH);
  delay(10);//延时等待稳定
  LCD12864_Write(0x30,0);//选择基本指令集   
  LCD12864_Write(0x0C,0);//开显示,无游标,不反白
  LCD12864_Write(0x01,0);//清除显示屏幕,把DDRAM位址计数器调整为00H
}
/****************************************************************/
//逐位写入串行数据函数LCD12864_SBYTE(),有形参byte,无返回值
/****************************************************************/
void LCD12864_SBYTE(unsigned char byte)
{  
  u8 i;  
  for(i=0;i<8;i++)//一个字节由8位组成故而循环8次写入  
  {  
    //LCDCLK = 0;//拉低时钟线
    digitalWrite(LCDCLK, LOW); 
    if((byte<<i)&0x80)//取位操作
      //LCDDIO=1;//写入数据‘1’ 
      digitalWrite(LCDDIO, HIGH);    
    else  
     // LCDDIO=0;//写入数据'0'
      digitalWrite(LCDDIO, LOW);  
    //LCDCLK = 1;//拉高时钟线 
    digitalWrite(LCDCLK, HIGH); 
  }   
}
/****************************************************************/
//命令或数据写入函数LCD12864_Write(),有形参cmdordata和writetype
//cmdordata是欲写入数据,writetype是写入类型,无返回值
/****************************************************************/
void LCD12864_Write(unsigned char cmdordata,int writetype)
{
  if(writetype==0)//判断写入类型
    LCD12864_SBYTE(0xF8); //“1111 1000”表示写入命令信息
  else
    LCD12864_SBYTE(0xFA);//“1111 1010”表示写入数据信息 
  LCD12864_SBYTE(0xF0&cmdordata);//取高四位传送
  LCD12864_SBYTE(0xF0&(cmdordata<<4));//取低四位传送 
}
/****************************************************************/
//字符串显示函数Display12864(),有形参row,col,*string,row表示行
//col表示列,字符指针string指向字符串数据,无返回值
/****************************************************************/
void Display12864(unsigned char row,unsigned char col,unsigned char *string)
{
  switch(row)//行变量判断
  {
    case 1:row=0x80;break;//第一行DDRAM首地址为0x80
    case 2:row=0x90;break;//第二行DDRAM首地址为0x90
    case 3:row=0x88;break;//第三行DDRAM首地址为0x88
    case 4:row=0x98;break;//第四行DDRAM首地址为0x98
    default:break;
  }
  LCD12864_Write(row+col,0);//写入行列地址
  while(*string!='\0')//输出字符串直到结束标志‘|0’
  {
    LCD12864_Write(*string,1);//写入字符数据
    string++;//指针后移
  }
}
/****************************************************************/


void LCD12864_init();//12864初始化函数声明
void LCD12864_SBYTE(unsigned char byte);//逐位写入串行数据函数声明
void LCD12864_Write(unsigned char cmdordata,unsigned char writetype);//写入液晶模组命令或数据函数声明
void Display12864(unsigned char row, unsigned char col,unsigned char *string);//显示字符串函数声明


/**************************主函数区域****************************/
void setup() {
  // put your setup code here, to run once:
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);

  LCD12864_init();      //初始化12864液晶
  Display12864(1,0,"===Arduion===");//显示第一行数据
  Display12864(2,0,"=======OK=======");//显示第二行数据
  Display12864(3,0,"12864ABCD");//显示第三行数据
  Display12864(4,0,"20240912");//显示第四行数据

}

void loop() {
  // put your main code here, to run repeatedly:
    


}





接口定义

时序介绍
指令表

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2130315.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Golang | Leetcode Golang题解之第401题二进制手表

题目&#xff1a; 题解&#xff1a; func readBinaryWatch(turnedOn int) (ans []string) {for i : 0; i < 1024; i {h, m : i>>6, i&63 // 用位运算取出高 4 位和低 6 位if h < 12 && m < 60 && bits.OnesCount(uint(i)) turnedOn {ans …

WPF创建不规则窗体时WebBrowser控件不显示的问题

最近有小伙伴需要在不规则窗体上放置WebBrowser控件&#xff0c;因为设置了WindowStyle"None" 和 AllowsTransparency"True"。 导致WebBrowser控件不显示。 界面代码如下所示&#xff1a; 1 <Window x:Class"WebBrowserDemo.MainWindow" …

【CTF Web】BUUCTF BUU UPLOAD COURSE 1 Writeup(文件上传+PHP+文件包含漏洞)

BUU UPLOAD COURSE 1 1 上课用~ 点击启动靶机。 解法 疑似存在文件包含漏洞。 http://15a5666e-1796-4f76-b892-0b69cf97df8e.node5.buuoj.cn:81/index.php?fileupload.php查看网页源代码。判断是后端检查。 <!DOCTYPE html> <html lang"zh-cn"> &…

区块链Dapp开发:质押挖矿的各模式开发详解

质押挖矿是区块链去中心化金融&#xff08;DeFi&#xff09;生态系统中的核心部分&#xff0c;吸引了大量用户参与。随着Dapp&#xff08;去中心化应用&#xff09;的普及&#xff0c;质押挖矿的模式多样化发展&#xff0c;不同模式各有其优点和风险。本文将介绍质押挖矿的基本…

SpringBoot快速接入OpenAI大模型(JDK8)

使用AI4J快速接入OpenAI大模型 本博文给大家介绍一下如何使用AI4J快速接入OpenAI大模型&#xff0c;并且如何实现流式与非流式的输出&#xff0c;以及对函数调用的使用。 介绍 由于SpringAI需要使用JDK17和Spring Boot3&#xff0c;但是目前很多应用依旧使用的JDK8版本&…

计算机毕业设计选题推荐-校园车辆管理系统-Java/Python项目实战(亮点:数据可视化分析、账号锁定)

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

最新版微服务项目搭建

一&#xff0c;项目总体介绍 在本项目中&#xff0c;我将使用alibabba的 nacos 作为项目的注册中心&#xff0c;使用 spring cloud gateway 做为项目的网关&#xff0c;用 openfeign 作为服务间的调用组件。 项目总体架构图如下&#xff1a; 注意&#xff1a;我的Java环境是17…

C语言-数据结构 弗洛伊德算法(Floyd)邻接矩阵存储

弗洛伊德算法相比迪杰斯特拉相似的地方都是遍历邻接矩阵不断调整最短路径的信息&#xff0c;并且两种算法面对多源最短路径的时间复杂度都是O(n^3)&#xff0c;Floyd采用的是动态规划而Dijkstra是采用贪心的思想。在Floyd中我们将创建两个数组进行辅助&#xff0c;一个path二维…

swift qwen2-vl推理及加载lora使用案例

参考: https://swift.readthedocs.io/zh-cn/latest/Instruction/LLM%E5%BE%AE%E8%B0%83%E6%96%87%E6%A1%A3.html#%E5%BE%AE%E8%B0%83%E5%90%8E%E6%A8%A1%E5%9E%8B https://blog.csdn.net/weixin_42357472/article/details/142150209 SWIFT支持300+ LLM和50+ MLLM(多模态大模型…

MySQL主从同步延时高问题排查

文章目录 背景数据库性能指标1、sysbench工具安装1.1、yum方式在线安装1.2、离线安装1.3、sysbench简介 2、主从延时过高问题排查流程2.1、登录从库查看从库状态、事务及相关进程2.2、查看服务器磁盘、cpu等信息2.3、使用fio命令压测数据盘性能2.3.1、安装fio工具2.3.2、执行磁…

element-plus组件问题汇总

element-plus组件问题汇总 一、el-select 1. 下拉选项实现添加全部 问题描述&#xff1a;value为空时&#xff0c;select框中不显示全部选项&#xff0c;但是下拉列表中全部显示是勾选状态 图片&#xff1a; 解决办法&#xff1a;添加 :empty-values“[null, undefined]” …

基于Java+Mysql实现(WEB)宿舍管理系统

数据库实践课程之宿舍管理系统 一、系统需求分析 1.1 系统描述 随着社会的发展以及教育水平的提高&#xff0c;当今社会在校生的数量越来越庞大&#xff0c;使用传统的方式对学生的信息进行管理效率非常低下。在互联网技术高度发达的今天&#xff0c;使用数据库技术对学生的…

Golang | Leetcode Golang题解之第400题第N位数字

题目&#xff1a; 题解&#xff1a; func findNthDigit(n int) int {d : 1for count : 9; n > d*count; count * 10 {n - d * countd}index : n - 1start : int(math.Pow10(d - 1))num : start index/ddigitIndex : index % dreturn num / int(math.Pow10(d-digitIndex-1)…

Redis高可用,Redis性能管理

文章目录 一&#xff0c;Redis高可用&#xff0c;Redis性能管理二&#xff0c;Redis持久化1.RDB持久化1.1触发条件&#xff08;1&#xff09;手动触发&#xff08;2&#xff09;自动触发 1.2 Redis 的 RDB 持久化配置1.3 RDB执行流程(1) 判断是否有其他持久化操作在执行(2) 父进…

Unity开发一个FPS游戏之五

这个系列的前几篇文章介绍了如何从头开始用Unity开发一个FPS游戏&#xff0c;感兴趣的朋友可以回顾一下。这个系列的文章如下&#xff1a; Unity开发一个FPS游戏_unity 模仿开发fps 游戏-CSDN博客 Unity开发一个FPS游戏之二_unity 模仿开发fps 游戏-CSDN博客 Unity开发一个F…

828华为云征文|华为云Flexus X服务器centos挂载新增的磁盘教程

华为云Flexus X服务器推荐公司、企事业单位及生产环境使用&#xff0c;特别注重安全和稳定性 &#x1f680;【828华为云盛典&#xff0c;Flexus X引领算力新纪元&#xff01;】&#x1f680; 在数字化转型的征途中&#xff0c;数据安全是企业最坚实的后盾。华为云Flexus X实例…

中关村科金推出得助音视频鸿蒙SDK,助力金融业务系统鸿蒙化提速

鸿蒙生态大势所趋&#xff0c;各种应用适配加速 近日&#xff0c;华为纯血鸿蒙系统&#xff08;HarmonyOS NEXT&#xff09;再度引发市场高度关注。据媒体消息&#xff0c;鸿蒙NEXT Beta版将在9月24日对Mate 60系列、X5系列、Pura70系列等16款旗舰机型进行推送&#xff0c;这已…

春招审核流程优化:Spring Boot系统设计

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理大学生入学审核系统的相关信息成为必然。开…

Arcgis实现面空间位置从东至西从南至北排序

效果 背景 工作项目中经常会遇到需要对网格进行编号,而编号是有一定原则的,比如空间位置从上到下从左到右,或者其它原则,那么都可以通过下面的方式来实现 1、准备数据 点shp文件,查看初始FID字段标注,目前是一个无序的状态 2、排序 字段选择空间字段,空间排序方法…

业务流程建模(BPM)的重要性及其应用

什么是业务流程建模&#xff08;BPM&#xff09;&#xff1f; 业务流程建模&#xff08;BPM&#xff09;是对企业内各项业务流程进行图形化描述的一种方法。它旨在通过可视化的方式帮助企业理解和分析现有的业务流程&#xff0c;从而发现潜在的问题并进行改进。BPM通常采用流程…