51单片机12864显示汉字按键1,2,3,4控制流水灯代码

时间: 2024-03-11 07:46:56 浏览: 19
好的,下面是一个简单的51单片机代码,实现了12864液晶屏显示汉字和按键控制流水灯的功能。代码如下: ``` #include <reg52.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int // 液晶屏控制引脚定义 sbit RS=P1^0; sbit RW=P1^1; sbit EN=P1^2; sbit PSB=P1^3; // 按键定义 sbit key1=P3^0; sbit key2=P3^1; sbit key3=P3^2; sbit key4=P3^3; // LED灯定义 sbit LED=P2^0; // 汉字点阵数据 const uchar Hanzi[]= { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }; // 液晶屏初始化 void LcdInit() { PSB=0; // 并口方式 RS=0; RW=0; EN=0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); P0=0x30; // 8位数据,2行显示,5x7点阵 EN=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); EN=0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); P0=0x0c; // 显示开,光标关,光标闪烁关 EN=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); EN=0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); P0=0x01; // 清屏 EN=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); EN=0; } // 写入数据到液晶屏 void LcdWriteData(uchar dat) { RS=1; RW=0; EN=0; _nop_(); _nop_(); _nop_(); _nop_(); P0=dat; EN=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); EN=0; } // 写入指令到液晶屏 void LcdWriteCmd(uchar cmd) { RS=0; RW=0; EN=0; _nop_(); _nop_(); _nop_(); _nop_(); P0=cmd; EN=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); EN=0; } // 显示汉字 void LcdShowHanzi(const uchar *p) { uchar i; for(i=0;i<16;i++) { LcdWriteData(p[i]); } } // 主函数 void main() { uchar i=0; uchar key=0; LcdInit(); // 初始化液晶屏 while(1) { // 控制流水灯 LED=(i>>4)&0x01; delay(50000); LED=(i>>3)&0x01; delay(50000); LED=(i>>2)&0x01; delay(50000); LED=(i>>1)&0x01; delay(50000); LED=i&0x01; delay(50000); i++; // 显示汉字 if(key1==0) { LcdWriteCmd(0x80); // 设置显示位置为第1行第1列 LcdShowHanzi(Hanzi); // 显示汉字 key=1; } else if(key2==0) { LcdWriteCmd(0x80); // 设置显示位置为第1行第1列 LcdShowHanzi(Hanzi+16); // 显示汉字 key=2; } else if(key3==0) { LcdWriteCmd(0x80); // 设置显示位置为第1行第1列 LcdShowHanzi(Hanzi+32); // 显示汉字 key=3; } else if(key4==0) { LcdWriteCmd(0x80); // 设置显示位置为第1行第1列 LcdShowHanzi(Hanzi+48); // 显示汉字 key=4; } else { if(key!=0) { // 清屏 LcdWriteCmd(0x01); key=0; } } } } // 延时函数 void delay(uint t) { uint i,j; for(i=t;i>0;i--) for(j=110;j>0;j--); } ``` 需要注意的是,以上代码仅供参考,具体实现过程需要根据具体的硬件和软件环境进行调整和修改。

相关推荐

最新推荐

recommend-type

51单片机脉冲宽度调制(PWM)控制LED灯亮度

绍一个51系列单片机采用脉冲宽度调制(PWM)方式控制LED灯亮度的一个程序,大家都知道,51单片机本身是没有pwm接口的,这个程序是通过软件模拟pwm.在一定的频率的方波中,调整高电平和低电平的占空比,即可实现LED灯...
recommend-type

基于AT89C51单片机的交通灯控制系统设计与仿真

系统除基本交通灯功能外,还具有通行时间手动设置、可倒计时显示、急车强行通过、交通特殊情况处理等相关功能,实验采用AT89C51单片机为控制芯片,采用"Proteus+KeilμVision2"对交通灯控制系统进行了仿真.
recommend-type

51单片机单中断多按键的应用.doc

在单片机的按键编程中,有时会遇到一个问题,用多个按键来控制多个死循环,而程序一旦进入循环就跳不出来,此时会想到用中断,而普通单片机一般只有2个外部中断,stc系列的查了一下最多也只有5个外部中断,那要是...
recommend-type

基于AT89C51单片机的LED汉字显示屏设计方案

研究了基于AT89C51单片机16×16 LED汉字滚动显示屏的设计与运用Proteus软件的仿真实现。主要介绍了LED汉字显示屏的硬件电路、汇编程序设计与调试、Proteus软件仿真等方面的内容,本显示屏的设计具有体积小、硬件少、...
recommend-type

51单片机驱动16×16LED点阵显示动画汉字汇编程序

这里提供一个完整的AT89S51单片机驱动驱动led点阵显示具有动画效果的汉字的汇编程序列子。
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

解释minorization-maximization (MM) algorithm,并给出matlab代码编写的例子

Minorization-maximization (MM) algorithm是一种常用的优化算法,用于求解非凸问题或含有约束的优化问题。该算法的基本思想是通过构造一个凸下界函数来逼近原问题,然后通过求解凸下界函数的最优解来逼近原问题的最优解。具体步骤如下: 1. 初始化参数 $\theta_0$,设 $k=0$; 2. 构造一个凸下界函数 $Q(\theta|\theta_k)$,使其满足 $Q(\theta_k|\theta_k)=f(\theta_k)$; 3. 求解 $Q(\theta|\theta_k)$ 的最优值 $\theta_{k+1}=\arg\min_\theta Q(
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。