-
单片机矩阵键盘
2015-11-24 21:45:31单片机扫描矩阵键盘的三种方式,包括行列扫描,逐行扫描和中断扫描,希望帮到你们 -
c51单片机矩阵键盘1602计算器_51单片机矩阵键盘计算器.doc
2021-01-13 16:37:5351单片机矩阵键盘计算器51单片机矩阵键盘计算器/**********413暑假作品*********12864液晶显示屏,结合4*4矩阵键盘,简易计算器*,存储地址:STC-hex2 , LCD12864.c *************************************//***功能:...51单片机矩阵键盘计算器
51单片机矩阵键盘计算器
/**********413暑假作品*********12864液晶显示屏,结合4*4矩阵键盘,简易计算器*,存储地址:STC-hex2 , LCD12864.c *************************************/
/***功能:1、基本整数的加减乘除; 2、有清除功能;3、除法计算,结果保留两位小数;4、分母为0报错********/
/*********5、小数减大数可显示负号;6、只能做两个数的加减乘除;7、可做10位数的有效运算***********************************/
/******注意:计算结果要求余显示,比如正确结果123,求余显示321,所以将321逐个赋给某一数组,倒序向12864输出**/
#include
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
sbit rs=P3^7;
sbit rw=P3^6;
sbit e=P3^5;
sbit psb=P3^4; //串并选择,H=串 L=并,此程序让12864并行输出
bit flag1=0; //数字标记位
bit flag11=0; // +标记位
bit flag12=0; // —标记位
bit flag13=0; // *标记位
bit flag14=0; // /标记位
bit flag15=0; // =标记位
bit flag16=0; //清除位
bit flag2=0; // 负号标记
bit flag3=0; // 分子小于分母,结果只有两位有效数字时,扩大100倍有两位有效数字
bit flag4=0; //分子小于分母,结果只有一位效数字时,扩大100倍有1位有效数字
void init(); //初始化16824子函数
void write_com(uchar); //写命令
void write_dat(uchar); //写数据,即显示内容
void display1(uchar); //显示字符
void delete(); //清除显示
void delay(uint); //延时
void keyscan(); //键盘扫描
void scan(); //扫描运算符,设定两个数计算
void display_value(); // 计算结果显示
void value(); // 计算
void begin(); //开机屏幕显示
void math_error(); //数学错误显示
uchar code table1[]="0123456789.+-*/=";
uchar code table3[]="welcome to";
uchar code table4[]=" 51 calculator" ;
uchar code table5[]="math error";
long table2[19]; //存储结果的数组,20就出错?
long s,a,b,num1; //s为计算结果,a为第一个数,b为第二个数,num1对应为键对应的值为显12864显示服务
/***********************************主**函**数***********************************************************/
void main()
{
init();
delay(5);
begin(); //开机初始化
delay(5);
write_com(0x80);//输入数在第一行显示
while(1) //大循环使其不断的显示
{
keyscan();
scan();
value();
display_value();
delete();
}
}
/***********初始化********************************/
void init()
{
psb=1; //并口传输方式
delay(50); //先等待50个毫秒
write_com(0x30); //基本操作指令
delay(5);
write_com(0x0e); //显示状态开/关,08什么也没有;0c无光标;0
-
51单片机矩阵键盘程序
2021-01-15 13:35:2051单片机矩阵键盘程序 -
51单片机矩阵键盘扫描程序
2020-07-15 07:47:23本文为 51单片机矩阵键盘扫描程序,下面一起来学习一下 -
简单的单片机矩阵键盘程序
2020-07-26 06:35:24在这里和大家分享一个简单的单片机矩阵键盘程序,感兴趣的朋友可以看看。 -
单片机矩阵键盘嵌入式开发
2009-12-26 11:31:04单片机 矩阵键盘 单片机 矩阵键盘 单片机 矩阵键盘 单片机 矩阵键盘 C 嵌入式开发 程序设计 -
c51单片机矩阵键盘最简写法
2018-07-11 16:24:00c51单片机矩阵键盘最简写法,单片机新手理解掌握矩阵键盘最简代码 -
51单片机矩阵键盘扫描程序详解
2020-07-19 07:09:45本文为51单片机矩阵键盘扫描程序,希望对你的学习有所帮助。 -
单片机矩阵键盘源程序
2015-09-14 22:49:52单片机矩阵键盘源程序按键扫描sccode -
单片机矩阵键盘扫描的两种方式
2020-08-20 01:20:26文章主要介绍了单片机矩阵键盘扫描的两种方式 -
单片机矩阵键盘计算器
2013-09-14 13:50:10单片机矩阵键盘计算器,含程序,仿真图。属于示例程序。 -
51单片机矩阵键盘与8051连接设计
2020-07-14 14:53:05本文主要讲了51单片机矩阵键盘与8051连接设计,下面一起来学习一下 -
89C52单片机矩阵键盘行列扫描程序
2020-07-19 07:11:48本文为89C52单片机矩阵键盘行列扫描程序,一起来学习一下 -
51单片机矩阵键盘
2021-01-05 15:39:30单片机矩阵键盘 行列扫描法 ①所有的行线置高电平,依次对列线进行扫描。 ②将第一列置低电平,P1.0=0 ③若检测到行线P1.4=0,则K0键被按下。 同理若P1.5=0,则K4被按下。51单片机矩阵键盘
行列扫描法
①所有的行线置高电平,依次对列线进行扫描。
②将第一列置低电平,P1.0=0
③若检测到行线P1.4=0,则K0键被按下。
同理若P1.5=0,则K4被按下。Pertues仿真图
C程序#include <reg51.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int unsigned char code table[]= { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E }; void Delay400us() //@11.0592MHz { unsigned char i; _nop_(); i = 181; while (--i); } void main() { uchar TMP,NUM; P1=0xF0; //行线置低电平,列线置高电平 TMP=P1; if((TMP&P1)!=0xF0) //如果列线为低电平,则说明有键按下 Delay400us(); while((TMP&P1)!=0xF0) { P1=0xFE; //第一列置低电平 TMP=P1; switch(TMP) { case 0xEE:NUM=0; break; case 0xDE:NUM=4; break; case 0xBE:NUM=8; break; case 0x7E:NUM=12; break; } P1=0xFD; //第二列置低电平 TMP=P1; switch(TMP) { case 0xED:NUM=1; break; case 0xDD:NUM=5; break; case 0xBD:NUM=9; break; case 0x7D:NUM=13; break; } P1=0xFB; //第三列置低电平 TMP=P1; switch(TMP) { case 0xEB:NUM=2; break; case 0xDB:NUM=6; break; case 0xBB:NUM=10; break; case 0x7B:NUM=14; break; } P1=0xF7; //第四列置低电平 TMP=P1; switch(TMP) { case 0xE7:NUM=3; break; case 0xD7:NUM=7; break; case 0xB7:NUM=11; break; case 0x77:NUM=15; break; } P2=~table[NUM]; //查表得对应的键码,给数码管显示 } }
-
8051单片机矩阵键盘原理
2012-08-20 16:34:598051单片机矩阵键盘原理分析, 浅显易懂 -
c51单片机矩阵键盘1602计算器_51单片机矩阵键盘计算器
2020-12-22 23:53:49com(0x06); //进入点设置delay(5);}/****************写指令***************************/void write_com... //表示写命令rw=0;e=0;...delay(5);e=1;delay(5);e=0;}/*****************写数据*********************...com(0x06); //进入点设置
delay(5);
}
/****************写指令***************************/
void write_com(uchar com)
{
rs=0; //表示写命令
rw=0;
e=0;
P0=com;
delay(5);
e=1;
delay(5);
e=0;
}
/*****************写数据***************************/
void write_dat(uchar dat)
{
rs=1; //表示写数据
rw=0;
e=0;
P0=dat;
delay(5);
e=1;
delay(5);
e=0;
}
/*****************显示字符函数*************************/
void display1(uchar num1)
{
write_dat(table1[num1]);
delay(2);
}
/*************************************键**盘**扫**描 P1口*********************************/
void keyscan()
{ uchar temp;
/*第一行*/
P1=0xfe; //将第一行置为低电平,其余行线置为高电平
temp=P1; //读取P3口当前状态 赋给临时变量temp,用于后面计算
temp=temp&0xf0; //判断第一行是否有按键按下
while(temp!=0xf0) //消抖
{
delay(5);
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xee:num1=7;flag1=1;//第一个键 7
break;
case 0xde:num1=8;flag1=1;; //第二个键 8
break;
case 0xbe:num1=9;flag1=1; //第三个键 9
break;
case 0x7e:num1=11;flag11=1; //第四个键 +
break;
}
while(temp!=0xf0) //等待按键释放
{
temp=P1;
temp=temp&0xf0;
}
display1(num1);
}
}
/*第二行*/
P1=0xfd;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xed:num1=4;flag1=1;//4
break;
case 0xdd:num1=5;flag1=1; //5
break;
case 0xbd:num1=6;flag1=1; //6
break;
case 0x7d:num1=12;flag12=1; //-
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
display1(num1);
}
}
/*第三行*/
P1=0xfb;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xeb:num1=1;flag1=1; // 1
break;
case 0xdb:num1=2;flag1=1; //2
break;
case 0xbb:num1=3;flag1=1; //3
break;
case 0x7b:num1=13;flag13=1; //*
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
display1(num1);
}
}
/*第四行*/
P1=0xf7;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P1;
-
c51单片机矩阵键盘1602计算器_STC90C51单片机矩阵键盘联动动态数码管
2021-01-02 06:20:14实验准备STC90C51单片机一台P2 GPIO口短接矩阵键盘JP4GPIO P0 短接动态数码管控制端573短接138译码器和动态数码管即J15和J16实验程序void MatrixKeyTest(){ char a = 0; int v; KEY=0x0f;//高四位为0 if(KEY != 0x0f...实验准备
- STC90C51单片机一台
- P2 GPIO口短接矩阵键盘JP4
- GPIO P0 短接动态数码管控制端573
- 短接138译码器和动态数码管即J15和J16
实验程序
void MatrixKeyTest(){ char a = 0; int v; KEY=0x0f;//高四位为0 if(KEY != 0x0f){//设置为高四位0,底全是1,读取一下看是不是 Delay(10); if(KEY != 0x0f){//消抖完,再次确认一下 KEY = 0x0f; //重新开始测试,列 switch(KEY){ case(0x07): v=0;break; case(0x0b): v=1;break; case(0x0d): v=2;break; case(0x0e): v=3;break; } KEY = 0xf0; //行 switch(KEY){ case(0x70): v=v;break; case(0xb0): v=v + 4;break; case(0xd0): v=v + 8;break; case(0xe0): v=v + 12;break; } //留大概半秒左右的松手检测,代表着 半秒按键间歇, 不会变化状态,实际上也不需要,因为不检测,只不过会继续循环而已 while(a<50&&KEY!=0xf0){ Delay(20); a++; } while(KEY == 0xf0){ LedOn2(1,(v+1)%10); if(v+1>9){ LedOn2(0,(v+1)/10); } } } }}
实验程序讲解
矩阵键盘采用行列式扫描,获得案件的序号,即程序中的v。详细过程: 先经过列扫描,得到v列有按钮被选中。然后进行行扫描,得到某行按钮被按下。将列加上行*4(因为每一行一共四个按钮)即得到按钮的序号。按钮的序号通过LedOn2函数点亮动态数码管。第一个参数代表点亮第几个数码管。第二个参数代表具体的数值。详细代码如下:
void LedOn2(int i,int j){ switch(i){ case(0): LSA=0;LSB=0;LSC=0; break;//显示第0位 case(1): LSA=1;LSB=0;LSC=0; break;//显示第1位 case(2): LSA=0;LSB=1;LSC=0; break;//显示第2位 case(3): LSA=1;LSB=1;LSC=0; break;//显示第3位 case(4): LSA=0;LSB=0;LSC=1; break;//显示第4位 case(5): LSA=1;LSB=0;LSC=1; break;//显示第5位 case(6): LSA=0;LSB=1;LSC=1; break;//显示第6位 case(7): LSA=1;LSB=1;LSC=1; break;//显示第7位 } DIG = DIG_CODEHEX[j]; j = 10; while(j--); DIG=0x00;}
其中LSA、LSB、LSC代表着138译码器的sbit,可以根据需要自己定义对应的GPIO口。最后一行是为了消隐,防止当前代码显示到其他的数码管上,可以自己做实验观察差别。
附录
数码管位码:
unsigned char code DIG_CODEHEX[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
-
51单片机矩阵键盘C程序
2012-09-15 17:07:3851单片机矩阵键盘C程序 -
单片机矩阵键盘应用并显示
2014-05-29 23:00:59单片机矩阵键盘应用,采用外部中断的方式检测按键并实现数码管递增显示 -
单片机矩阵键盘密码锁
2011-12-01 18:52:59单片机矩阵键盘密码锁,用户在矩阵键盘上输入密码,在1602液晶上有相应的现实。是用来做课程设计的好材料。 -
蓝桥杯单片机矩阵键盘
2020-07-07 16:23:47蓝桥杯单片机矩阵键盘 /************************************************************ -->蓝桥杯单片机设计— CT107_V2 开发板例程,并不支持STC89C52 -->因开发需要,请将STC头文件加载到Keil5安装目录下... -
51单片机矩阵键盘输入液晶显示程序
2015-09-14 22:55:2651单片机矩阵键盘输入液晶显示程序 -
15单片机矩阵键盘,状态机法消抖
2018-11-24 13:10:49单片机矩阵键盘,状态机法消抖,完整代码,下载可直接使用。 -
单片机矩阵键盘中断扫描
2011-12-01 18:50:14单片机矩阵键盘中断扫描,利用中断的方法来扫描矩阵,比软件扫描有更广的用处,是学习单片机的有用材料。 -
51单片机矩阵键盘检测程序
2012-04-27 12:37:54简单的单片机矩阵键盘检测程序,适合新手参考 -
CT107d单片机矩阵键盘的源代码
2015-04-20 21:00:34这是CT107d单片机矩阵键盘的源代码,里面详细介绍了矩阵键盘的编程方式,值得参考。 -
c51单片机矩阵键盘1602计算器_基于51单片机矩阵键盘的简易计算器制作
2020-12-22 23:53:451. 运算过程、符号公式实时显示在显示屏上(I2C 1602)。2. 自带三角函数、开根号、平方运算。3. 计算得出的结果可设置保存并用以下一...(AT24C02)硬件连接图如下:单片机源程序如下:main.c#include#include "Calculat...