[51单片机] 1602液晶显示控制代码2

news/2023/12/4 20:35:48

这是4X4按键映射为0-F的16个字符输入并显示在屏上的程序:

[这里要额外的把单片机p1的8个脚和矩阵键盘的8个脚相连]

/*-----------------------------------------------
名称:LCD1602
论坛:www.doflye.net
编写:shifang
内容:通过矩阵键盘输入,依次显示0-F16中字符
引脚定义如下:1-VSS 2-VDD 3-V0 4-RS 5-R/W 6-E 7-14 DB0-DB7 15-BLA 16-BLK
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<intrins.h>sbit RS = P2^4;   //定义端口
sbit RW = P2^5;
sbit EN = P2^6;#define RS_CLR RS=0
#define RS_SET RS=1#define RW_CLR RW=0
#define RW_SET RW=1#define EN_CLR EN=0
#define EN_SET EN=1#define DataPort P0
#define KeyPort P1unsigned char code dofly_code[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};//转换成液晶显示的字符
/*------------------------------------------------
uS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
长度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{while(--t);
}
/*------------------------------------------------
mS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned char t)
{while(t--){//大致延时1mSDelayUs2x(245);DelayUs2x(245);}
}
/*------------------------------------------------
判忙函数
------------------------------------------------*/
bit LCD_Check_Busy(void)
{DataPort= 0xFF;RS_CLR;RW_SET;EN_CLR;_nop_();EN_SET;return (bit)(DataPort & 0x80);
}
/*------------------------------------------------
写入命令函数
------------------------------------------------*/
void LCD_Write_Com(unsigned char com)
{// while(LCD_Check_Busy()); //忙则等待DelayMs(5);RS_CLR;RW_CLR;EN_SET;DataPort= com;_nop_();EN_CLR;
}
/*------------------------------------------------
写入数据函数
------------------------------------------------*/
void LCD_Write_Data(unsigned char Data)
{//while(LCD_Check_Busy()); //忙则等待DelayMs(5);RS_SET;RW_CLR;EN_SET;DataPort= Data;_nop_();EN_CLR;
}
/*------------------------------------------------
清屏函数
------------------------------------------------*/
void LCD_Clear(void)
{LCD_Write_Com(0x01);DelayMs(5);
}
/*------------------------------------------------
写入字符串函数
------------------------------------------------*/
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
{if (y == 0){LCD_Write_Com(0x80 + x);}else{LCD_Write_Com(0xC0 + x);}while (*s){LCD_Write_Data( *s);s ++;}
}
/*------------------------------------------------
写入字符函数
------------------------------------------------*/
void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)
{if (y == 0){LCD_Write_Com(0x80 + x);}else{LCD_Write_Com(0xC0 + x);}LCD_Write_Data( Data);
}
/*------------------------------------------------
初始化函数
------------------------------------------------*/
void LCD_Init(void)
{LCD_Write_Com(0x38);    /*显示模式设置*/DelayMs(5);LCD_Write_Com(0x38);DelayMs(5);LCD_Write_Com(0x38);DelayMs(5);LCD_Write_Com(0x38);LCD_Write_Com(0x08);    /*显示关闭*/LCD_Write_Com(0x01);    /*显示清屏*/LCD_Write_Com(0x06);    /*显示光标移动设置*/DelayMs(5);LCD_Write_Com(0x0C);    /*显示开及光标设置*/
}/*------------------------------------------------
按键扫描函数,返回扫描键值
------------------------------------------------*/
unsigned char KeyScan(void)  //键盘扫描函数,使用行列反转扫描法
{unsigned char cord_h,cord_l;//行列值中间变量KeyPort=0x0f;            //行线输出全为0cord_h=KeyPort&0x0f;     //读入列线值if(cord_h!=0x0f)    //先检测有无按键按下{DelayMs(10);        //去抖if((KeyPort&0x0f)!=0x0f){cord_h=KeyPort&0x0f;  //读入列线值KeyPort=cord_h|0xf0;  //输出当前列线值cord_l=KeyPort&0xf0;  //读入行线值while((KeyPort&0xf0)!=0xf0);//等待松开并输出return(cord_h+cord_l);//键盘最后组合码值}}return(0xff);     //返回该值
}
/*------------------------------------------------
按键值处理函数,返回扫键值
------------------------------------------------*/
unsigned char KeyPro(void)
{switch(KeyScan()){case 0x7e:return 0;break;//0 按下相应的键显示相对应的码值case 0x7d:return 1;break;//1case 0x7b:return 2;break;//2case 0x77:return 3;break;//3case 0xbe:return 4;break;//4case 0xbd:return 5;break;//5case 0xbb:return 6;break;//6case 0xb7:return 7;break;//7case 0xde:return 8;break;//8case 0xdd:return 9;break;//9case 0xdb:return 10;break;//acase 0xd7:return 11;break;//bcase 0xee:return 12;break;//ccase 0xed:return 13;break;//dcase 0xeb:return 14;break;//ecase 0xe7:return 15;break;//fdefault:return 0xff;break;}
}/*------------------------------------------------
主函数
------------------------------------------------*/
void main(void)
{unsigned char i,j,num;LCD_Init();LCD_Write_Com(0x0F);//光标开,光标闪烁开LCD_Write_String(0,0,"Press the key !");while (1){num=KeyPro();if(num!=0xff){if((i==0)&&(j==0))//回到第一个字符时清屏LCD_Clear();//清屏LCD_Write_Char(0+i,0+j,dofly_code[num]);//依次显示输入字符i++;if(i==16)//如果第一行显示满,转到第二行{i=0;j++;if(j==2)//如果2行都显示满,清屏后重新从第一行显示{j=0;}}}}
}

http://www.ppmy.cn/news/753171.html

相关文章

基于RK3568的10.1寸智能显示终端

以工业级的瑞芯微RK3568 &#xff08;四核 A55 主频2.0 Ghz&#xff09;CPU为核心的高性能嵌入式一体化触摸屏。该产品设计采用高分辨率10.1英寸LED液晶显示器&#xff08;分辨率1280*800&#xff09;&#xff0c;10点电容触摸屏。支持USB、以太网、开关量输入/输出、RS485、CA…

扫地机器人采用航顺芯片的应用经验,航顺MCU32位主控HK32F103VET6

扫地机器人&#xff0c;顾名思义&#xff0c;可以扫地的机器人&#xff01;扫地机器人的基础功能就是扫地和吸尘了&#xff0c;扫地和吸尘是两个不同的概念&#xff1b;吸尘&#xff0c;就是将灰尘吸干净&#xff0c;这个功能很早之前&#xff0c;吸尘器就做的很好了&#xff0…

STM32F411RE NUCLEO标准库:报错#47;#20

STM32F411RE NUCLEO标准库&#xff1a; 关于STM32F411RE Nucleo开发板创建标准库的过程和相关的一些二错误解决 报错#47;#20 这几天心血来潮了,想起再次学习ST_MCU,手头正好有STM32F411RE NUCLEO 官方的开发板一块,于是又拾起信心了,现在不是流行HAL库了嘛,但是对于我这个新手…

Linux AT24C256芯片 数据手册解读

文章目录 AT24C256 地址AT24C256页AT24C256写操作AT24C02读操作注意 AT24C256 地址 前四位(1010)是固定的&#xff0c;A2, A1, A0 与硬件连接有关系&#xff0c;外部输入电压为高时是1&#xff0c;外部电压输入为低是0。 本设计中A2, A1, A0都是接地&#xff0c;所以我的设备地…

微控制器STM32L412RBT6,STM32L412CBU6(128KB)MCU+FPU,规格

STM32L4 32位 MCUFPU 是超低功耗微控制器&#xff0c;在超低功耗领域的表现优于市场。基于高性能的 ARMCortex-M4 32 位 RISC 内核&#xff0c;工作频率高达 80MHz。Cortex-M4 内核具有单浮点单元&#xff08;SFPU&#xff09;精度&#xff0c;支持所有 ARM 单精度数据处理指令…

中国移动MCU CM32M101A-B128-LQFP64软硬件通用STM32F103RBT6

1 产品简介 CM32M10xA 系列微控制器产品采用高性能 32 位 ARM Cortex™-M4F 内核&#xff0c;集成浮点运算单元 &#xff08; FPU &#xff09;和数字信号处理&#xff08; DSP &#xff09;&#xff0c;支持并行计算指令。最高工作主频 108MHz &#xff0c;集成高达 128KB 片…

国民32位MCU:N32G452 无须改板,完美pin to pin ST/GD

■ 内核CPU ― 32位ARM Cortex-M4 内核 FPU&#xff0c;单周期硬件乘除法指令&#xff0c;支持DSP指令和MPU ― 内置8KB 指令Cache缓存&#xff0c;支持Flash加速单元执行程序 0 等待 ― 最高主频144MHz&#xff0c;180DMIPS ■ 加密存储器 ― 高达512KByte片内Flash&#xff…

超低功耗/超省电LCD液晶段码屏显示驱动IC-VKL144A/B TSSOP48/QFN48L超薄/超小体积封装 原厂FAE技术支持

永嘉微电/VINKA 型号&#xff1a;VKL144A/B 封装形式&#xff1a;TSSOP48/QFN48L 年份&#xff1a;新年份 原厂&#xff0c;工程服务&#xff0c;技术支持&#xff01; VKL144A/B概述: VKL144A/B是一个点阵式存储映射的LCD驱动器&#xff0c;可支持最大144点&#xff08;3…

国民技术通用MCU N32G452系列

国民技术通用MCU N32G452系列芯片简介 产品简介 N32G452系列 (通用基本型) 采用32-bit ARM Cortex-M4内核&#xff0c;支持浮点运算和DSP指令&#xff0c;高达512KB 片内FLASH&#xff0c;144KB SRAM&#xff0c;多达18个数字通讯接口及4个模拟接口&#xff0c;内置10余种密码…

STM32系列(HAL库)——F103C8T6点亮1.44寸TFT-LCD彩屏

1.软件准备 (1)编程平台&#xff1a;Keil5 (2)CubeMX (3)中景园屏幕资料链接&#xff1a;点击跳转 提取码&#xff1a;8888 2.硬件准备 (1)1.44寸TFT彩屏 (2)F1的板子&#xff0c;本例使用经典F103C8T6 (3)ST-link 下载器 (4)杜邦线若干 3.模块资料 (1)模块简介&a…

STM32G491RCT6,STM32H743BIT6规格书 32bit IC MCU

STM32G4系列将强大的ArmCortex-M4加上FPU和DSP能力与丰富和先进的模拟外设相结合。它引入了两种新的数学加速器(Cordic和Filtering)&#xff0c; CAN-FD (Flexible Datarate)&#xff0c;USB Type-C接口的功率传输&#xff0c;包括物理层(PHY)和先进的安全功能。&#xff08;图…

LED数显低功耗驱动芯片VK16K33,低功耗数码管LED驱动IC-SOP28/24/20,多封装选择,带按键扫描功能,兼容市面16K33

品牌&#xff1a;永嘉微电/VINKA 型号&#xff1a;VK16K33 封装&#xff1a;SOP28/24/20 年份&#xff1a;新年份 概述&#xff1a; VK16K33是一个内存映射和多功能LED控制器驱动程序。VK16K33有28SOP、24SOP和20SOP三种封装规格&#xff0c;分別对应三种最大显示点数&…

第四章 国产MCU 雅特力AT32F403A 基于v2库的详细keil5建立新项目教程

目录 概述 下载bsp 建立工程 建立项目文件夹 keil建立项目并保存 选择型号 添加AT32F403A库的c文件 添加宏定义、头文件 编译 添加新的源码文件 keil输出hex keil 输出bin 最后 概述 雅特力的目前发布的是v2的版本的库&#xff0c;此库也一直在更…

国民技术MCU单片机N32G455系列

国民技术MCU单片机N32G455系列 产品概述 国民技术 N32G455系列微控制器产品采用高性能32位ARM Cortex™-M4F内核&#xff0c;集成浮点运算单元&#xff08;FPU&#xff09;和数字信号处理&#xff08;DSP&#xff09;&#xff0c;支持并行计算指令。最高工作主频144MHz&#x…

LCD液晶段码屏驱动芯片:VK1621B LQFP48/44 SSOP48口算训练机/儿童数学宝现成方案 提供技术支持

概述&#xff1a; VK1621是一个点阵式存储映射的LCD驱动器&#xff0c;可支持最大128点&#xff08;32SEGx4COM&#xff09;的 LCD屏&#xff0c;也支持2COM和3COM的LCD屏。单片机可通过3/4个通信脚配置显示参数和发送显 示数据&#xff0c;也可通过指令进入省电模式。QT534 特…

STM32L452CCU6 STM32L432KCU6 GD32F407VKT6 嵌入式技术数据手册 32位ARM

STM32L452CCU6 STM32L432KCU6 GD32F407VKT6 嵌入式技术数据手册 32位ARM 微控制器 1、ARM Cortex-M4 series 微控制器 IC 32 位单核 80MHz 256KB&#xff08;256K x 8&#xff09; 闪存 48-UFQFPN 型号&#xff1a;STM32L452CCU6TR 概述 STM32L452xx 器件是基于高性能 Arm Cor…

香橙派4和树莓派4B构建K8S集群实践之七: Jenkins

目录 1. 说明 2. 步骤 2.1 准备工作 2.2 安装 2.2.1 用jenkins原站for k8s的安装仓方法安装 2.2.2 Helm 安装 3. 相关命令 4. 遇到的问题 5. 参考 1. 说明 在k8s上部署jenkins&#xff0c;并用 jenkins.k8s-t2.com访问在namespace为devops下安装在指定节点k8s-master-…

LVS+Keepalived负载均衡高可用群集

目录 一、Keepalived高可用详解 1.应用场景 2.介绍和原理简介 3.主要模块和作用 二、LVSkeepalived配置实例&#xff08;抢占模式&#xff09; 1.配置NFS共享存储器 2.配置节点web服务&#xff08;两台的配置相同&#xff09; 3.配置主备LVSkeepalived负载调度器 三、非…

小区门禁卡可以复制到手机上吗_没有门禁卡怎么开门 门禁卡可以复制到手机里吗...

#生活常识# 说的门禁卡大家应该都非常熟悉,因为现在很多人平时进出入单位和小区,都是需要通过门禁卡进行刷卡。但是有时候因为特殊的情况出门比较着急,所以会忘记带门禁卡,那么没有门禁卡该怎么开门呢?今天小编为大家讲解一下相关的办法。 一、没有门禁卡怎么开门 在没有带…

手机怎么模拟125k卡_手把手教你用手机NFC秒变门禁卡,这个方法多种手机都可以适用...

现在只要手机支持NFC功能&#xff0c;手机秒变公交卡、移动支付、数据传输、门禁卡等功能&#xff0c;之前在评论看多好多人说不知道怎么复制门禁卡&#xff0c;今天就来和大家讲解下如何复制门禁卡。 我们以华为手机&#xff0c;前提是手机支持NFC功能的。 第一步&#xff1a;…
最新文章