【51单片机LCD1602显示矩阵键盘原始键值】2023-6-1

缘由https://ask.csdn.net/questions/7955623

cpp 复制代码
#include "reg52.h"
sbit  LCD1602_RS = P3^5;//RS端数据命令选择(H/L)
sbit  LCD1602_RW = P3^6;//RW端读写选择(H/L)
sbit  LCD1602_EN = P3^7;//EN端使能信号上升沿25ns
void PanDuan1602(/*LCD1602忙判断*/)
{ 
	LCD1602_RS = 0;/*根据规定,RS为低电平,RW为高电平时,可以读状态*/
	LCD1602_RW = 1;
	P0 = 0xFF;
	while(P0 & 0x80){LCD1602_EN = 0;P0 = 0xFF;LCD1602_EN = 1;}
}
void Xie_MinLin_ShuJu(unsigned char MinLin_ShuJu,bit XZ)/*LCD1602写入8位命令/数据函数*/
{
	unsigned char y=0;
	PanDuan1602();/*忙则等待*/
	LCD1602_RS = XZ;
	LCD1602_RW = 0;
	while(++y<47);//地址建立时间
	P0 = MinLin_ShuJu;/*写入命令*/
	LCD1602_EN = 1;/*拉高使能端 数据被传输到LCD1602内*/
	LCD1602_EN = 0;/*拉低使能以便于下一次产生上升沿*/
}	
void Xie_String(unsigned char *ShuJu,unsigned char w,bit x)/*LCD1602写入8位字符串数据子函数*/
{
	 Xie_MinLin_ShuJu((x?0xC0:0x80) + w, 0);//1表示第二行0表示第一行     
	 while (*ShuJu != '\0') Xie_MinLin_ShuJu(*ShuJu++, 1);         
}
void LCD1602ChuShiHua(/*LCD1602初始化子程序*/)	   
{
	LCD1602_RS = LCD1602_RW = LCD1602_EN = 0;
	Xie_MinLin_ShuJu(0x38, 0);/*显示模式设置16*2显示,5*7点阵,8位数据接口*/ 
	Xie_MinLin_ShuJu(0x06, 0);/*显示光标移动设置读写一字节后地址指针加1*/
	Xie_MinLin_ShuJu(0x0C, 0);/*显示开及光标设置*/
	Xie_MinLin_ShuJu(0x01, 0);/*显示清屏*/
}
unsigned char JianPanShaoMiao(/*使用行列反转扫描法*/)
{    
    unsigned char H=15,L=240;static unsigned char Ys=0;
    P1=15;
    if(P1!=15&&++Ys==0)
    {        
		H=P1;
		P1=240;
		L=P1;
		while(P1!=240);
	}
    P1 = 255;
    return (H+L);
}
void main()
{//缘由https://ask.csdn.net/questions/7955623
	unsigned char jz=0,sj[8]={"   "};
	LCD1602ChuShiHua();
	Xie_String("Key Values:",0,0);Xie_String("HJ7447",4,1);
	while(1)
	{
			jz=JianPanShaoMiao();
			if(jz!=255)
			{
				sj[0]=jz/100+'0';
				sj[1]=jz/10%10+'0';
				sj[2]=jz%10+'0';
				Xie_String(sj,11,0);
			}
	}
}
cpp 复制代码
unsigned char duli16()
{//缘由http://www.51hei.com/bbs/dpj-229608-1.html
	unsigned char jz=255;
	static unsigned char Ys=0;
	P1=239;
	if(P1!=239&&++Ys==0){jz=P1;while(P1!=239);}
	else P1=223;
	if(P1!=223&&++Ys==0){jz=P1;while(P1!=223);}
	else P1=191;
	if(P1!=191&&++Ys==0){jz=P1;while(P1!=191);}
	else P1=127;
	if(P1!=127&&++Ys==0){jz=P1;while(P1!=127);}
	P1 = 255;
	return jz;
}
相关推荐
王_teacher3 小时前
机器学习 矩阵求导 完整公式+严谨推导
人工智能·线性代数·考研·机器学习·矩阵·线性回归
STC_USB_CAN_80514 小时前
菜单学习,科学计算器使用【TFT240*320彩屏+实际键盘】@Ai8051U,ST7789
单片机·学习·51单片机
做cv的小昊11 小时前
【TJU】研究生应用统计学课程笔记(2)——第一章 数理统计的基本知识(1.3 统计中常用的分布族)
笔记·线性代数·数学建模·矩阵·概率论·学习方法·抽象代数
seabirdssss12 小时前
Windows 11 双屏拔掉显示器后任务栏显示异常,重启资源管理器秒解决
windows·计算机外设
脱离语言12 小时前
51单片机开发——完成了AI版俄罗斯方块
51单片机·ai俄罗斯方块游戏·俄罗斯方块游戏
leo__52013 小时前
51单片机实现读写U盘
嵌入式硬件·mongodb·51单片机
Pentane.16 小时前
【力扣hot100】【Leetcode 54】螺旋矩阵|边界控制 算法笔记及打卡(19/100)
算法·leetcode·矩阵
mxwin17 小时前
Unity URP 下 TBN 矩阵学习 切线空间、tangent.w 与镜像 UV 的那些坑
学习·unity·矩阵·shader
TEL1562238376217 小时前
显示控制芯片ASL9080-DP/HDMI转EDP芯片,最高分辨率 为 FHD@144Hz 或 QHD@75Hz
计算机外设·硬件工程
Dxy123931021617 小时前
Elasticsearch 8 如何进行二维矩阵向量搜索
大数据·elasticsearch·矩阵