精华内容
下载资源
问答
  • 单片机矩阵键盘

    2015-11-24 21:45:31
    单片机扫描矩阵键盘的三种方式,包括行列扫描,逐行扫描和中断扫描,希望帮到你们
  • 51单片机矩阵键盘计算器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单片机矩阵键盘程序
  • 本文为 51单片机矩阵键盘扫描程序,下面一起来学习一下
  • 在这里和大家分享一个简单的单片机矩阵键盘程序,感兴趣的朋友可以看看。
  • 单片机 矩阵键盘 单片机 矩阵键盘 单片机 矩阵键盘 单片机 矩阵键盘 C 嵌入式开发 程序设计
  • c51单片机矩阵键盘最简写法,单片机新手理解掌握矩阵键盘最简代码
  • 本文为51单片机矩阵键盘扫描程序,希望对你的学习有所帮助。
  • 单片机矩阵键盘源程序按键扫描sccode
  • 文章主要介绍了单片机矩阵键盘扫描的两种方式
  • 单片机矩阵键盘计算器,含程序,仿真图。属于示例程序。
  • 本文主要讲了51单片机矩阵键盘与8051连接设计,下面一起来学习一下
  • 本文为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单片机矩阵键盘原理分析, 浅显易懂
  • com(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;

    展开全文
  • 实验准备STC90C51单片机一台P2 GPIO口短接矩阵键盘JP4GPIO P0 短接动态数码管控制端573短接138译码器和动态数码管即J15和J16实验程序void MatrixKeyTest(){ char a = 0; int v; KEY=0x0f;//高四位为0 if(KEY != 0x0f...

    实验准备

    1. STC90C51单片机一台
    2. P2 GPIO口短接矩阵键盘JP4
    3. GPIO P0 短接动态数码管控制端573
    4. 短接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};

    ef001c890243a1a273f2e215edfd8f8a.png
    展开全文
  • 51单片机矩阵键盘C程序
  • 单片机矩阵键盘应用,采用外部中断的方式检测按键并实现数码管递增显示
  • 单片机矩阵键盘密码锁,用户在矩阵键盘上输入密码,在1602液晶上有相应的现实。是用来做课程设计的好材料。
  • 蓝桥杯单片机矩阵键盘 /************************************************************ -->蓝桥杯单片机设计— CT107_V2 开发板例程,并不支持STC89C52 -->因开发需要,请将STC头文件加载到Keil5安装目录下...
  • 51单片机矩阵键盘输入液晶显示程序
  • 单片机矩阵键盘,状态机法消抖,完整代码,下载可直接使用。
  • 单片机矩阵键盘中断扫描,利用中断的方法来扫描矩阵,比软件扫描有更广的用处,是学习单片机的有用材料。
  • 简单的单片机矩阵键盘检测程序,适合新手参考
  • 这是CT107d单片机矩阵键盘的源代码,里面详细介绍了矩阵键盘的编程方式,值得参考。
  • 1. 运算过程、符号公式实时显示在显示屏上(I2C 1602)。2. 自带三角函数、开根号、平方运算。3. 计算得出的结果可设置保存并用以下一...(AT24C02)硬件连接图如下:单片机源程序如下:main.c#include#include "Calculat...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,742
精华内容 696
关键字:

单片机矩阵键盘