求 关于 用单片机和4*4矩阵键盘输入数字并在LCD1602上显示出来的C语言程序

如题所述

第1个回答  2012-01-13
这个你看看可以参考!
#include<reg51.h>
#include<intrins.h>

#define uint unsigned int
#define uchar unsigned char

uchar code table[10] = {0x03, 0x9f, 0x25, 0x0d, 0x99, 0x49, 0x41, 0x1f, 0x01, 0x09};

//这三个引脚参考资料
sbit E=P2^7; //1602使能引脚
sbit RW=P2^6; //1602读写引脚
sbit RS=P2^5; //1602数据/命令选择引脚

/********************************************************************
* 名称 : 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。
* 输入 : 无
* 输出 : 无
***********************************************************************/

void delay()
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
/********************************************************************
* 名称 : bit Busy(void)
* 功能 : 这个是一个读状态函数,读出函数是否处在忙状态
* 输入 : 输入的命令值
* 输出 : 无
***********************************************************************/
bit Busy(void)
{
bit busy_flag = 0;
RS = 0;
RW = 1;
E = 1;
delay();
busy_flag = (bit)(P0 & 0x80);
E = 0;
return busy_flag;
}
/********************************************************************
* 名称 : wcmd(uchar del)
* 功能 : 1602命令函数
* 输入 : 输入的命令值
* 输出 : 无
***********************************************************************/
void wcmd(uchar del)
{
while(Busy());
RS = 0;
RW = 0;
E = 0;
delay();
P0 = del;
delay();
E = 1;
delay();
E = 0;
}

/********************************************************************
* 名称 : wdata(uchar del)
* 功能 : 1602写数据函数
* 输入 : 需要写入1602的数据
* 输出 : 无
***********************************************************************/

void wdata(uchar del)
{
while(Busy());
RS = 1;
RW = 0;
E = 0;
delay();
P0 = del;
delay();
E = 1;
delay();
E = 0;
}

/********************************************************************
* 名称 : L1602_init()
* 功能 : 1602初始化,请参考1602的资料
* 输入 : 无
* 输出 : 无
***********************************************************************/
void L1602_init(void)
{
wcmd(0x38);
wcmd(0x0c);
wcmd(0x06);
wcmd(0x01);
}

/********************************************************************
* 名称 : L1602_char(uchar hang,uchar lie,char sign)
* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符显示"b" ,调用该函数如下
L1602_char(1,5,'b')
* 输入 : 行,列,需要输入1602的数据
* 输出 : 无
***********************************************************************/
void L1602_char(uchar hang,uchar lie,char sign)
{
uchar a;
if(hang == 1) a = 0x80;
if(hang == 2) a = 0xc0;
a = a + lie - 1;
wcmd(a);
wdata(sign);
}

/********************************************************************
* 名称 : L1602_string(uchar hang,uchar lie,uchar *p)
* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下
L1602_string(1,5,"ab cd ef;")
* 输入 : 行,列,需要输入1602的数据
* 输出 : 无
***********************************************************************/
void L1602_string(uchar hang,uchar lie,uchar *p)
{
uchar a,b=0;
if(hang == 1) a = 0x80;
if(hang == 2) a = 0xc0;
a = a + lie - 1;
while(1)
{
wcmd(a++);
b++;
if((*p == '\0')||(b==16)) break;
wdata(*p);
p++;
}
}

/********************************************************************
* 名称 : Keyscan()
* 功能 : 实现按键的读取。下面这个子程序是按处理 矩阵键盘 的基本方法处理的。
* 输入 : 无
* 输出 : 按键值
***********************************************************************/
uchar Keyscan(void)
{
uchar i,j, temp, Buffer[4] = {0xfe, 0xfd, 0xfb, 0xf7};
for(j=0; j<4; j++)
{
P1 = Buffer[j];
temp = 0x10;
for(i=0; i<4; i++)
{
if(!(P1 & temp))
{
return (i+j*4);
}
temp <<= 1;
}
}
}

/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main(void)
{
uchar Key_Value; //读出的键值
L1602_init();
L1602_string(1,1," 4*4 KeyBoard ");
L1602_string(2,1,"You Press The ");
while(1)
{
P1 = 0xf0;
if(P1 != 0xf0)
{
Delay_1ms(20); //按键消抖
if(P1 != 0xf0)
{
Delay_1ms(20); //按键消抖
if(P1 != 0xf0)
{
Key_Value = Keyscan();
}
}
}
L1602_char(2,15,Key_Value / 10 + 48);
L1602_char(2,16,Key_Value % 10 + 48);
}
}

求 关于 用单片机和4*4矩阵键盘输入数字并在LCD1602上显示出来的C语言...
输入 : 需要写入1602的数据 输出 : 无 \/ void wdata(uchar del){

求用汇编语言写的代码,要求:4x4矩阵键盘输入什么数字就在LCD显示屏上显...
define LCD1602_FLAG#define LCD1602_PORT P0#include<reg51.h>#include<stddef.h>#define uchar unsigned charsbit lcd1602_rs=P2^0;sbit lcd1602_e=P2^2;sbit lcd1602_rw=P2^1;sbit lcd1602_busy=P0^7;uchar str[]="This is Key Test";uchar keyval,keystr[16];void delay(uchar a){uchar...

...键盘输入数字,并在LCD1602上显示出来的C语言程序
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显示时钟的C程序!
sbit rd=P3^7; \/\/矩阵键盘一根线设置为0,用其中四个做独立按键sbit dscs=P2^4;sbit dsas=P2^5;sbit dsrw=P2^6;sbit dsds=P2^7;sbit dsirq=P3^3;sbit beep=P2^3;uchar code table1[]=" 20 - - "; \/\/初始1602液晶显示的内容uchar code table2[]=" : : ";uchar count,k,week,mon,day,ye...

4*4矩阵键盘输入1602显示1-16,怎么9之后显示“:<;”之类的符号,没有显...
首先,LCD1602是一位一位(也就是ASCII值)显示的,你的那个a是0~16,你加了0x30,你可以查看ascii表,当a=10时加0x30就等于 3A 对应的ascii表为 :所以不会看到打印的是 :那我们怎么打印出两位数呢?我们就要把a大于9的那部分提取出来。if(a!=16){ if(a>9){ write_cmd(0x80);w...

想做一个基于51单片机按键计数用LCD1602显示的编程0-99
加上这些东西,将显示语句换成1602_display(i)即可,当然你可以将其改为只显示2个数字 sbit rw=P1^4;sbit rs=P1^3;sbit lcden=P1^5;define db P2 void write_com(uchar com)\/\/液晶屏写命令 { db=com;rs=0;rw = 0;lcden=0;Delay1ms(12);lcden=1;Delay1ms(12);lcden=0;} void ...

请问谁有LCD1602、24C04,设计的电子密码锁源程序?上网搜了好多都不...
系统采用美国 Atmel 公司的 AT89S52 单片机作为 系统核心,液晶显示器 LCD1602 作为输出设备显示系统提示信息, 4*4 矩阵薄膜键盘作为输入设备,配合蜂鸣器、继电器等电路构成整 个系统硬件;系统软件采用汇编语言编写。设计的系统液晶显示,密 码修改方便,具有报警、锁定等功能,使用便捷简单,符合住宅、办 公用锁需求,具有...

急求!!!哪位朋友指点下单片机程序题~~
;MOV X,#3 ;设置显示起始位置 MOV A,R3 ANL A,#0FH ;取出低四位二进制数 PUSH ACC ;压入堆栈 CLR C ;C=0 SUBB A,#0AH ;减10 POP ACC ;弹出堆栈 JC ASCII0 ;该数小于10,转ASCII0 JMP ASCII1 ;ADD A,#07H ;大于10的数加上37HASCII0: ADD A,#30H ;小于10的数加上30H MOV B,X CALL...

看到你的一个关于按键的程序,求助!!!
lcd1602_guanbiao(1,7 + menu_i + 0x40); \/\/开光标}if(key_can == 15) \/\/确定键{for(i=0;i<6;i++){if(password_bj[i] == password_xg[i]){flag_password = 1; \/\/两次输入的密码一样}else {flag_password = 0;write_string(1,0," Password Error ");write_string(2,0," reenter ...

...用atmega16 LCD1602 4*4矩阵式键盘 用icc语言编写有的QQ368572839_百...
代做课程设计,毕业设计,电路单片机等项目设计!

相似回答