求单片机实现4×4键盘输入,并用LCD1602显示键盘输入的数字的程序,
发布网友
发布时间:2022-04-26 23:34
我来回答
共1个回答
热心网友
时间:2022-06-20 05:15
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define DD P0
sbit Rs=P0^0;
sbit Rw=P0^1;
sbit E=P0^2;
uchar key_led;
unsigned char code disp_code[]={"0123456789abcdef"};
unsigned char code key_code[]={
0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,
0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77 };//注意这里你自己看下你电路是怎么连得,对应改一下表单里的值
/*******************************************************************/
/*
*/
/* 延时子程序
*/
/*
*/
/*******************************************************************/
void delay(int ms)
{
int i;
while(ms--)
{
for(i = 0; i< 250; i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
void delay_1ms(unsigned char i) //最小延时1ms
{ unsigned char j;
while(i--)
for(j=0;j<125; j++);
}
void delay_10ns(unsigned char i) //最小延时10ns
{
unsigned char j;
while(i--)
for(j=0;j<10; j++);
}
void write_com(unsigned char com,bit p) //写指令
{if(p)
delay_10ns(5);
E=0;
Rs=0;
Rw=0;
DD=com;
delay_10ns(50); //>40ns
E=1;
delay_1ms(2); //>150ns
E=0;
delay_10ns(4); //>25+10ns
}
void write_date(unsigned char DATA) //写数据
{
delay_10ns(50);
E=0;
Rs=1;
Rw=0;
DD=DATA;
delay_10ns(50);
E=1;
delay_10ns(50);
E=0;
delay_10ns(4);
}
void addr_x_y(unsigned char x,bit y) //写坐标,定位置
{
unsigned char temp=0x80;
if(y)
{
temp|=0x40;
}
temp|=x;
write_com(temp,0);
}
void desplay_char(unsigned char x,bit y,unsigned char p)
//在指定位置显示一个字符。
{
addr_x_y(x,y);
write_date(p);
}
void lcd_init(void)
{
delay_1ms(15);
write_com(0x38,0);
delay_1ms(5);
write_com(0x38,0);
delay_1ms(5);
write_com(0x38,0);
delay_1ms(5);
write_com(0x38,1);
write_com(0x08,1);
write_com(0x01,1);
write_com(0x06,1);
write_com(0x0c,1);
}
/**********************************************************
键盘扫描子函数
**********************************************************/
uchar keyscan()
{
uchar scan1,scan2,keycode,j;
P1=0xf0;
scan1=P1;
if((scan1&0xf0)!=0xf0) //判键是否按下
{
delay(30); //延时30ms
scan1=P1;
if((scan1&0xf0)!=0xf0) //二次判键是否按下
{
P1=0x0f;
scan2=P1;
keycode=scan1|scan2; //组合成键编码
for(j=0;j<=15;j++)
{
if(keycode== key_code[j]) //查表得键值
{
delay(30);
key_led=j;
}
}
}
}
else return(16) ;
}
/**********************************************************
判键是否按下子函数
**********************************************************/
void keydown()
{
P1=0xf0;
if((P1&0xf0)!=0xf0)
{
keyscan();
}
}
/*******************************************************************/
/*
*/
/* 主程序
*/
/*
*/
/*******************************************************************/
void main(void)
{
lcd_init(); // 初始化LCD
key_led=16;
while(1)
{
keydown();
desplay_char(0,0,disp_code[key_led]);
}
}追问仿真不出啊,不知道怎么回事儿。再给我看看呗,真的很着急!
追答显示部分程序应该是没有问题的,你看下你的键盘扫描部分,我仔细看了下你的电路,扫描部分跟我的硬件不一样,我的上拉接在高四位,你对应改一下就行了
求单片机实现4×4键盘输入,并用LCD1602显示键盘输入的数字的程序,
include <reg52.h> include <intrins.h> define uchar unsigned char define uint unsigned int define DD P0 sbit Rs=P0^0;sbit Rw=P0^1;sbit E=P0^2;uchar key_led;unsigned char code disp_code[]={"0123456789abcdef"};unsigned char code key_code[]={ 0xee,0xde,0xbe,0x7e,0xe...
单片机原理及应用
《单片机原理及应用》是2010年9月由电子工业出版社出版的图书,作者是张友渔。本书系统全面地介绍了80C51单片机的基本原理、硬件结构、指令系统,并从应用的角度介绍了汇编语言程序设计、单片机外部电路的扩展,以及与键盘、LED显示、LCD显示、打印机等多种硬件接口的设计方法,详细介绍了串行、并行接口的A/D、D/A转换器功能特点和典型应用,增加了单片机应用系统设计、Proteus仿真、实验和课程设计等内容。本书主要特点:1. 系统全面地介绍了80C51单片机的基本原理、硬件结构、指令系统。2. 从应用的角度介绍了汇编语言程序设计、单片机外部电路的…意法半导体单片机产品线拥有业界宽广、极具创新力的32位产品系列 – STM32,覆盖超低功耗、超高性能方向,同时兼具一流的市场竞争力。STM32是ARM Cortex内核单片机和微处理器市场和技术方面的佼佼者,目前提供16大产品线 (F0, G0, F1, F2, F3, G...
求单片机实现4×4键盘输入,并用LCD1602显示键盘输入的数字的程序
因为4×4的键盘在输入的过程中单片机可以直接利用ipl C去进行输入。
...用单片机和4*4矩阵键盘输入数字并在LCD1602上显示出来的C语言程序...
名称 : Delay_1ms()功能 : 延时子程序,延时时间为 1ms * x 输入 : x (延时一毫秒的个数)输出 : 无 / void Delay_1ms(uint i)//1ms延时 { uchar x,j;for(j=0;j<i;j++)for(x=0;x<=148;x++);} / 名称 : delay()功能 : 延时,延时时间大概为5US。输入 : 无 输出 : 无 ...
求于用单片机和4*4矩阵键盘输入数字计数并在LCD1602上显示出来的C语言...
这是一个以前写的矩阵键盘程序,显示在数码管上的。你该改就可以了 include<reg52.h> define uchar unsigned char define uint unsigned int sbit dula=P2^6;sbit wela=P2^7;uchar code table[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0...
...用基于51单片机LCD1602显示的简易计算器的程序,4*4矩阵键盘,只要求+...
可以在proteus下仿真的啊 主要是矩阵控制 可以交流
51单片机lcd1602如何显示数字变量
1602是可以显示字符的,如'1','2'等,可以设置一个字符串,如char AA[]={'0123456789'} 那么设置一个变量i, AA[i]就行了,
给个单片机液晶1602显示汉字的程序,谢谢
51单片机对lcd1602一些基础程序 include <intrins.h> define dataport P1 sbit RS=P2^ 6;sbit RW=P2^5;sbit EN=P2^4;//=== //=== void waitfor() //检测忙信号函数 { dataport=0xff;RS=0;RW=1;_nop_(); //选择指令寄存器 读操作 EN=1;_nop_(); //使能操作 while(data...
...键盘输入数字,并在LCD1602上显示出来的C语言程序
E_SET()PB|=1<<2#define LCD1602_E_RST()PB&=~(1<<2)static void Delay_ms(unsigned char time){unsigned char i;while(time--){for(i=0;i<100;i++);}}static void LCD1602_WriteByte(unsigned char value,bit dataTypedef){if(dataTypedef)LCD1602_RS_SET();elseLCD1602_RS_...
...按键四个可以设置温湿度的上下限,显示用lcd1602,超限报警
求单片机程序关于温湿度。传感器采用DHT11,按键四个可以设置温湿度的上下限,显示用lcd1602,超限报警 50 我来答 1个回答 #热议# 直播| 一起见证OPPO Reno7系列正式亮相!pcdian 2013-09-15 · 知道合伙人IT服务行家 pcdian 知道合伙人IT服务行家 采纳数:1493 获赞数:2860 向TA提问 私信TA 关注 ...
跪求:液晶LCD1602显示时钟的C程序!
void write_dat(uchar dat) //1602液晶写数据程序{rs=1;P1=dat;e=0;delay(5);e=1;delay(5);e=0;delay(5);}void write_sfm(uchar add,uchar dat) //写时分秒的程序{uchar sh,g;sh=dat/10;g=dat%10;write_com(0x80+0x40+add);write_dat(0x30+sh); //1602字符手册里的数字对应的编码值...