发布网友 发布时间:2022-04-29 09:47
共4个回答
热心网友 时间:2023-10-14 00:49
给你参考一下的,我最近做的:
我的实验板上的键不够,所以只能做加法运算,而且两数之和不能大于十。
嘿嘿,没错这个给某种人用的。
//********** myh.h ***********有两个文件,一个是头文件myh.h一个是js.c
#include <reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
typedef bit BOOL;
//**
sbit rs=P2^6;
sbit rw=P2^5;
sbit e=P2^7;
//**
uchar Key_Down(void);//返回0到12的键盘的编码
void delay(uchar);//延时
void Init(void);
void Write_Cmd(uchar);
void Write_Data(uchar);
BOOL If_Busy();
//**
uchar code Lcd_tab[]="0123456789+=";
uchar code Key_tab[]={0xb7,0xbb,0xbd,0xbe,0xd7,0xdb,0xdd,0xde,0xe7,0xeb,0xed,0xee};
//**********
uint Q0;
uint Q1;
uint Q2;
//*************js.c********
#include "myh.h"
//**************
void main()
{uchar m_key;
uchar m_inc=0;
Init();
Write_Cmd(0x80);
while(1)
{ Q1=0;
Q0=0;
Q2=0;
m_key=Key_Down();
Write_Cmd(0x01);
Write_Data(Lcd_tab[m_key]);
Q0=m_key;
m_key=Key_Down();
Write_Data(Lcd_tab[m_key]);
m_key=Key_Down();
Write_Data(Lcd_tab[m_key]);
Q1=m_key;
m_key=Key_Down();
Write_Data(Lcd_tab[m_key]);
Q2=Q0+Q1;
Write_Data(Lcd_tab[Q2]);
}
}
//************************
uchar Key_Down(void)
{uchar Key_number=0;
uchar m_cx;
uchar m_cy;
uchar m_cxy;
P3=0x0f;
m_cx=P3;
while(1)
{if(m_cx!=0x0f)
{delay(500);
m_cx=P3;
if(m_cx!=0x0f)
break; }
else {P3=0x0f;m_cx=P3;}
}
P3=0x0f;
m_cx=P3&0x0f;
P3=0xf0;
m_cy=P3&0xf0;
m_cxy=m_cx|m_cy;
for(Key_number=0;Key_number<12;Key_number++)
{if(m_cxy==Key_tab[Key_number])
break;
}
return Key_number;}
//**********
void delay(uchar time)
{uchar j;
for(;time>0;time--)
for(j=0;j<200;j++);
}
//**************
void init()
{ delay(10);
Write_Cmd(0x38);
delay(10);
Write_Cmd(0x38);
delay(10);
Write_Cmd(0x38);
delay(10);
Write_Cmd(0x0c);
delay(10);
Write_Cmd(0x06);
delay(10);
Write_Cmd(0x01);
}
//***********
void Write_Cmd(uchar cmd)
{//while(If_Busy());
e=0;
rw=0;
rs=0;
delay(4);
P0=cmd;
delay(4);
e=1;
delay(10);
e=0;
}
//***
void Write_Data(uchar dat)
{//while(If_Busy());
e=0;
rw=0;
rs=1;
delay(4);
P0=dat;
delay(4);
e=1;
delay(10);
e=0;
}
//**
BOOL If_Busy()
{
BOOL result;
rw=1;
rs=0;
e=1;
delay(4);
result=(BOOL)(P2&0x80);
e=0;
return result;
}
热心网友 时间:2023-10-14 00:49
关键还是要先有硬件方案,也就是方框图,之后是详细电路图,最后才能谈到写程序。关键点有如下几点:一、要设计单片机最小系统,包括复位、晶振、EA接高电平(不许外扩存储器)。二、要有键盘,对应软件为判键程序。推荐用4×4行列式键盘。三、要有显示单元,新手推荐你用数码管(用164串转并做),或是用1602液晶做显示(更容易些)。对应软件部分是显示函数。以上三点是硬件方案,最后数学计算可以用C写,不复杂。总体来说,判键是难点。因为你首先要输入数据进入单片机;输入的数据进行相应的数*算;再把结果显示到液晶中去。热心网友 时间:2023-10-14 00:50
首先准备一块最小系统版 就是板子都做好了了 件都焊上了的那种热心网友 时间:2023-10-14 00:50
需要的功能有:键盘扫描,以及显示。热心网友 时间:2023-10-14 00:49
给你参考一下的,我最近做的:
我的实验板上的键不够,所以只能做加法运算,而且两数之和不能大于十。
嘿嘿,没错这个给某种人用的。
//********** myh.h ***********有两个文件,一个是头文件myh.h一个是js.c
#include <reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
typedef bit BOOL;
//**
sbit rs=P2^6;
sbit rw=P2^5;
sbit e=P2^7;
//**
uchar Key_Down(void);//返回0到12的键盘的编码
void delay(uchar);//延时
void Init(void);
void Write_Cmd(uchar);
void Write_Data(uchar);
BOOL If_Busy();
//**
uchar code Lcd_tab[]="0123456789+=";
uchar code Key_tab[]={0xb7,0xbb,0xbd,0xbe,0xd7,0xdb,0xdd,0xde,0xe7,0xeb,0xed,0xee};
//**********
uint Q0;
uint Q1;
uint Q2;
//*************js.c********
#include "myh.h"
//**************
void main()
{uchar m_key;
uchar m_inc=0;
Init();
Write_Cmd(0x80);
while(1)
{ Q1=0;
Q0=0;
Q2=0;
m_key=Key_Down();
Write_Cmd(0x01);
Write_Data(Lcd_tab[m_key]);
Q0=m_key;
m_key=Key_Down();
Write_Data(Lcd_tab[m_key]);
m_key=Key_Down();
Write_Data(Lcd_tab[m_key]);
Q1=m_key;
m_key=Key_Down();
Write_Data(Lcd_tab[m_key]);
Q2=Q0+Q1;
Write_Data(Lcd_tab[Q2]);
}
}
//************************
uchar Key_Down(void)
{uchar Key_number=0;
uchar m_cx;
uchar m_cy;
uchar m_cxy;
P3=0x0f;
m_cx=P3;
while(1)
{if(m_cx!=0x0f)
{delay(500);
m_cx=P3;
if(m_cx!=0x0f)
break; }
else {P3=0x0f;m_cx=P3;}
}
P3=0x0f;
m_cx=P3&0x0f;
P3=0xf0;
m_cy=P3&0xf0;
m_cxy=m_cx|m_cy;
for(Key_number=0;Key_number<12;Key_number++)
{if(m_cxy==Key_tab[Key_number])
break;
}
return Key_number;}
//**********
void delay(uchar time)
{uchar j;
for(;time>0;time--)
for(j=0;j<200;j++);
}
//**************
void init()
{ delay(10);
Write_Cmd(0x38);
delay(10);
Write_Cmd(0x38);
delay(10);
Write_Cmd(0x38);
delay(10);
Write_Cmd(0x0c);
delay(10);
Write_Cmd(0x06);
delay(10);
Write_Cmd(0x01);
}
//***********
void Write_Cmd(uchar cmd)
{//while(If_Busy());
e=0;
rw=0;
rs=0;
delay(4);
P0=cmd;
delay(4);
e=1;
delay(10);
e=0;
}
//***
void Write_Data(uchar dat)
{//while(If_Busy());
e=0;
rw=0;
rs=1;
delay(4);
P0=dat;
delay(4);
e=1;
delay(10);
e=0;
}
//**
BOOL If_Busy()
{
BOOL result;
rw=1;
rs=0;
e=1;
delay(4);
result=(BOOL)(P2&0x80);
e=0;
return result;
}
热心网友 时间:2023-10-14 00:49
关键还是要先有硬件方案,也就是方框图,之后是详细电路图,最后才能谈到写程序。关键点有如下几点:一、要设计单片机最小系统,包括复位、晶振、EA接高电平(不许外扩存储器)。二、要有键盘,对应软件为判键程序。推荐用4×4行列式键盘。三、要有显示单元,新手推荐你用数码管(用164串转并做),或是用1602液晶做显示(更容易些)。对应软件部分是显示函数。以上三点是硬件方案,最后数学计算可以用C写,不复杂。总体来说,判键是难点。因为你首先要输入数据进入单片机;输入的数据进行相应的数*算;再把结果显示到液晶中去。热心网友 时间:2023-10-14 00:50
首先准备一块最小系统版 就是板子都做好了了 件都焊上了的那种热心网友 时间:2023-10-14 00:50
需要的功能有:键盘扫描,以及显示。