问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

液晶显示4*4矩阵键盘按键号程序设计

发布网友 发布时间:2022-04-24 17:50

我来回答

2个回答

热心网友 时间:2023-07-13 21:09

//这是51hei单片机开发板附带的一个程序,矩阵键盘接p3口,其中p3.0-p3.4为行,P3.5->p3.7为列
//每按一下键数字便可显示在1602液晶上面,并且蜂鸣器会发出响声.
//全部源代码下载: http://www.51hei.com/f/jz1602.rar
#include<reg52.h>
#include <Intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit la=P2^6;
sbit wela=P2^7;
sbit rs=P2^2;
sbit lcden=P2^0;

sbit rw=P2^1;
sbit BEEP=P2^3;
uchar num,temp,date,i;

uchar code table_1[]=" shu ru tiao ma ";
uchar code table_2[]=" Pro_8888 ";
uchar code dis_tab[17]=
{
0x30, //0在1602中的十六进制码
0x31, //1在1602中的十六进制码
0x32, //2在1602中的十六进制码
0x33, //3在1602中的十六进制码
0x34, //4在1602中的十六进制码
0x35, //5在1602中的十六进制码
0x36, //6在1602中的十六进制码
0x37, //7在1602中的十六进制码
0x38, //8在1602中的十六进制码
0x39, //9在1602中的十六进制码
0x41, //A在1602中的十六进制码
0x42, //B在1602中的十六进制码
0x43, //C在1602中的十六进制码
0x44, //D在1602中的十六进制码
0x2A, //*在1602中的十六进制码
0x23, //#在1602中的十六进制码
0x20, // 在1602中的十六进制码
};

void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

void beep()
{
uchar i;
for (i=0;i<50;i++)
{
delay(4);
BEEP=0; //BEEP取反

}
BEEP=1; //关闭蜂鸣器
delay(100); //延时
}

void lcd_wait_busy() //1602忙检测函数
{
P0=0xff; //数据口全部置1,为读状态做准备
rs=0; //选择指令寄存器
rw=1; //选择读
lcden=1; //使能线电平变化
while((P0&0x80)==0x80);//读忙状态,不忙时退出
lcden=0; //恢复使能线电平
}

// 1602写命令函数

void lcd_write_com(unsigned char combuf)
{
rs=0; //选择指令寄存器
rw=0; //选择写
P0=combuf; //把命令字送入P2
lcden=1; //使能线电平变化,命令送入1602的8位数据口
_nop_();
lcden=0; //恢复使能线电平
}

// 1602写命令函数(带忙检测)

void lcd_write_com_busy(unsigned char combuf)
{
lcd_wait_busy();//调用忙检测函数
lcd_write_com(combuf); //调用写命令函数
}

// 1602写数据函数(带忙检测)

void lcd_write_data(unsigned char databuf)
{
lcd_wait_busy();//调用忙检测函数
rs=1; //选择数据寄存器
rw=0; //选择写
P0=databuf; //把数据字送入P2
lcden=1; //使能线电平变化,命令送入1602的8位数据口
_nop_();
lcden=0; //恢复使能线电平
}

// 1602显示地址写函数

void lcd_write_address(unsigned char x,unsigned char y)
{
y&=0x01;//行地址*在0-1
if(y==0x00)
lcd_write_com_busy(x|0x80); //第一行的列地址写入
else
lcd_write_com_busy((x+0x40)|0x80); //第二行的列地址写入
}

// 指定地址写入函数

void lcd_write_char(unsigned char x,unsigned char y,unsigned char buf)
{
lcd_write_address(x,y); //写入地址
lcd_write_data(buf);//写入显示数据
}

// 液晶初始化指令

void lcd_init()
{
uchar num;
la=0;
wela=0;
lcden=0;

lcd_write_com_busy(0x38); //设置16*2显示,5*7点阵,8位数据接口
lcd_write_com_busy(0x0d); //关显示 显示光标 光标闪烁
lcd_write_com_busy(0x06); //当读或写一个字符后地址指针加一,且光标加一,写一个字符,整屏显示移动
lcd_write_com_busy(0x01); //显示清屏:1,数据指针清零 2,所有显示清零
lcd_write_com_busy(0x80); //80h+地址码(0-27h,40h-67h) 设置数据地址指针
for(num=0;num<16;num++)
{
lcd_write_data(table_1[num]);
delay(5);
}

lcd_write_com_busy(0x80+0x40);

}
void key_wdat(uchar i) //按键写数据

{
//la=0;
//wela=0;
//lcden=0;
//液晶初始化指令
//write_com(0x38); //设置16*2显示,5*7点阵,8位数据接口
//write_com(0x0d); //关显示 显示光标 光标闪烁
//write_com(0x06); //当读或写一个字符后地址指针加一,且光标加一,写一个字符,整屏显示移动
//write_com(0x01); //显示清屏:1,数据指针清零 2,所有显示清零
//write_com(0x80+0x40); //80h+地址码(0-27h,40h-67h) 设置数据地址指针

lcd_wait_busy();
lcd_write_data(i);
delay(100);

}

// 删除液晶第1或2行全部数据
void clear(uchar t)
{
if(t==1)
{
lcd_write_com_busy(0x80);
}
if(t==2)
{
lcd_write_com_busy(0x80+0x40);
}
for(i=0;i<15;i++)
{
lcd_write_data(dis_tab[16]);
}
lcd_write_com_busy(0x80+0x40);
}

// 产品显示函数 待写 如何从键盘输入中提取出三位的产品号码???????????????????
/*
void display_proct()
{

}
*/

// 4*4矩阵键盘检测

void keyscan()
{
lcden=1;//???
//
P3=0xfe;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:key_wdat(dis_tab[7]); beep(); // 7
break;
case 0xde:key_wdat(dis_tab[8]); beep(); // 8
break;
case 0xbe:key_wdat(dis_tab[9]); beep(); // 9
break;
case 0x7e:key_wdat(dis_tab[17]); beep(); //
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
//
P3=0xfd;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed:key_wdat(dis_tab[4]); beep(); // 4
break;
case 0xdd:key_wdat(dis_tab[5]); beep(); // 5
break;
case 0xbd:key_wdat(dis_tab[6]); beep(); // 6
break;
case 0x7d:key_wdat(dis_tab[17]); beep(); //
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}

//
P3=0xfb;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb:key_wdat(dis_tab[1]);beep(); // 1
break;
case 0xdb:key_wdat(dis_tab[2]);beep(); // 2
break;
case 0xbb:key_wdat(dis_tab[3]);beep(); // 3
break;
case 0x7b:key_wdat(dis_tab[17]);beep(); //
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}

//
P3=0xf7;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xe7:key_wdat(dis_tab[0]); beep(); // 0
break;
case 0xd7:key_wdat(dis_tab[17]); beep(); //
break;
case 0xb7:clear(2); beep(); // 删除液晶第二行
break;
case 0x77:beep(); // enter
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}

}
//

void main()
{
lcd_init();
while(1)
{
keyscan();
}
while(1);
}追问我需要protues图还有事12864液晶显示器啊

热心网友 时间:2023-07-13 21:09

(需要Protues图 不需要代码)

--看来,楼主自己,有代码。

电路、和程序,是配套的。
楼主如果希望得到合适的电路,就应该给出你所有代码。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
联想Z470AM I5处理器与I3 联想ideapad z470 独显默认设置是什么 联想Z470 I5处理器 GT520M的显卡跟普通的GT520M显卡有什么区别 性能怎 ... 我新买了一台联想z470 i3-2310 但是朋友说显卡不太好!! 我玩天龙八部... 联想的z470笔记本 上面 的独显GT520M 能不能 更换 或者是升级阿? ...我的是双显卡的 z470- i5 显卡是 gt520m 能换吗 vivo手机耳机麦克风说话声音小 耳机通话声音小是怎么回事 为什么我手机耳机的麦克风声音很小怎么调 求:7个字的情侣游戏名,纯汉字,有诗意的(不要古诗)。不带任何符号或英文... 矩阵键盘多键按下的单片机(51)程序及电路 设计一个4X4矩阵键盘键信号检测电路 EDA 急求!用89C51单片机设计打地鼠游戏设计,要求4*4的矩阵键盘,电路图,程序都要啊 诸葛亮舌战群儒中有什么辩论的技巧? 三国演义诸葛亮舌战群儒缩写 诸葛亮舌战群儒的故事主要内容是什么,舌战群儒的主人 51单片机数码管显示矩阵键盘的按键,电路图如下: 求舌战群儒原文及翻译 4X4矩阵键盘的设计,但是下方的包括74HC08的电路起什么作用 矩阵键盘的电路设计中为啥必须要有下拉电阻? 诸葛亮舌战群儒梗概20字? 单片机8255矩阵式键盘接口电路设计 完整电路设计及程序代码。 舌战群儒的故事梗概? 谁能看懂这个电路图,是个矩阵键盘 诸葛亮舌战群儒简介50字左右 舌战群儒的故事简介。 诸葛亮舌战群儒的概括80字左右 诸葛亮利舌战群儒 主要内容五十字以下? 50岁夫妻没有感情,要不要离婚? 两个人之间如果没有了感情是不是应该离婚? 请教4x4矩阵键盘控制LCD显示字符串一个按键显示一条字符的程序和仿真电路图? 能不能用电脑扫描二维码,前提我没有摄像头 没有摄像头的话,理论上有没有办法扫描二维码? 电脑摄像头怎能扫二维码 怎么用电脑扫描二维码下载东西??识别软件必须要用摄像头扫描么?? 怎样在手机上网购 请问在山东省济南市治疗月子病哪家医院比较专业? 济南的历史 独立显卡通用吗 济南市治疗静脉曲张 哪家医院治的好? 独立显卡都是通用的吗 济南市治疗颈椎病什么医院最好 独立显卡是通用的吗? 是不是所有电脑的显卡都通用的 山东省济南市哪家医院治湿疹比较好 显卡是通用的吗? 济南市医院治疗鼻炎怎么样 孩子鼻塞厉害怎么办 青羽在古代是什么喻意 山东省济南市治疗肾病的中医专家哪个最好 电脑显卡都是通用于所有电脑吗?