矩阵键盘和数码管制作计算器

更新时间:2023-05-18 14:10:21 阅读: 评论:0

/************************************************************
制作人:火柴
2011-07-14
************************************************************
************************************************************
计算器 + -  × /
使用说明:4×4矩阵键盘 + 数码管
P0 :矩阵键盘  p1:位选  P2:段选
矩阵键盘示意图如下:
1    2    3    +     
4    5    6    -       
7      8    9    ×   
清屏  0    =    /     
************************************************************/在职研究生怎么报
#include<reg52.h>
#include<intrins.h>   
#define uint unsigned int
#define uchar unsigned char
/************************************************************
查表
************************************************************/
uchar code lab[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x80,0x00,0x76,0x3e}; // 点  暗  H  U
uchar buffer[4]; //  ={}
uchar bufferx[4],buffery[4];
receiptuint x,y,z;
/************************************************************
延时函数
************************************************************/
void delay(uint z)//延时
{
uint x,y;
for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}
/************************************************************
************************************************************/
void savex()
{
    uint i;
    for(i=0;i<4;i++)
        {
            if(buffer[i]==0x11)
                bufferx[i]=0;
            el
                bufferx[i]=buffer[i];
        }
匹克英文}
/************************************************************
************************************************************/
void savey()
{
    uint i;
    for(i=0;i<4;i++)
        {
            if(buffer[i]==0x11)
                buffery[i]=0;
            el
                buffery[i]=buffer[i];
        }
}
/************************************************************
    清零函数 0x11->十进制17,lab[17]=0x00 数码管暗,无显示
************************************************************/
void clr()
{
    uint i;
        for(i=0;i<4;i++)
        {
            buffer[i]=0x11;//       
        }
}
/************************************************************
                        显示函数
************************************************************/
void display()//显示程序                         
{
    uchar i,temp;
    temp =0xef;
    for(i=4;i>0;i--)
        {
            P2=lab[buffer[i-1]];
            P1=temp;
            temp=(temp<<1)|0x01;
            delay(3);
        }   
}
/************************************************************
        是否有键按下 ?
************************************************************/
uchar keyarch()
{
    uchar k;
    P0=0xf0;
warburg pincus    k=P0;
    k=~k;
    k=k&0xf0;
    return k;  //k=0x10 , 0x20 ,0x40 ,0x80 列
}
/************************************************************
                       
************************************************************/
void digitin(uchar val) //移动
{
    int i;
    for(i=3;i>0;i--)
        buffer[i]=buffer[i-1];
    buffer[0]=val;
}
/************************************************************
tenderheart                        按键函数
************************************************************/
uchar keys()
{
    uchar a,c,kr,keynumb;
    a=keyarch();
    if(a==0)      //按键检测
        return 0xff;
    el display();//延时消抖
    a=keyarch();
    if(a==0)      //再次检测
        return 0xff;
    el
        {
        a=0xfe;
        for(kr=0;kr<4;kr++)
            {
                P0=a;
                c=P0;      //得到键值如下:
                    if((c&0x10)==0) keynumb=kr+0x00;  // 0 4 8 c
                    if((c&0x20)==0) keynumb=kr+0x04;    // 1 5 9 d
                    if((c&0x40)==0) keynumb=kr+0x08;    // 2 6 a e
                    if((c&0x80)==0) keynumb=kr+0x0c;    //    3 7 b f
his                a=_crol_(a,1);
            }
        }
    do
        {
            a=keyarch();
            display();
        }   
    while(a!=0);  //等待按键释放
    return keynumb;    //0~f
}
/************************************************************
  按键处理函数
************************************************************/
void keybranch(uchar k)    // k为返回的键值keynumb
    {
        uchar i,j,flag_add,flag_dec,flag_che,flag_chu;
small是什么意思
        switch(k)
            {
                ca 0x00 : digitin(1); break; // 0 4 8 c
                ca 0x04 : digitin(2); break; // 1 5 9 d
                ca 0x08 : digitin(3); break; // 2 6 a e       
                ca 0x01 : digitin(4); break; // 3 7 b f
                ca 0x05 : digitin(5); break; //
                ca 0x09 : digitin(6); break; // 数码管显示
                ca 0x02 : digitin(7); break; //  1 2 3 +
                ca 0x06 : digitin(8); break; //  4 5 6 -
                ca 0x0a : digitin(9); break; //  7 8 9 ×
                ca 0x07 : digitin(0); break; //    0 =    /
                ca 0x0c : savex();  //加号键
                      clr();英语小说读后感
                      flag_add=1;
                        digitin(0x0a);
                        digitin(0x0d);
                        digitin(0x0d);
                      for(i=0;i<100;i++)
                        display();
                        clr();
                        break;
                  ca 0x0d : savex();  //减号键
at my most beautiful
                      clr();
                   
                        digitin(0x0d);
                        digitin(0x0e);
                        digitin(0x0c);
                        flag_dec=1;
                      for(i=0;i<100;i++)
                        display();
                        clr();
buzzer                        break;
                  ca 0x0e : savex();  //乘号键
                      clr();
                   
                        digitin(0x0);
                        digitin(0x12);    //对应十进制18,对应显示H
                        digitin(0x0e);

本文发布于:2023-05-18 14:10:21,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/682294.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:按键   显示   键值   键盘   函数   矩阵   火柴   说明
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图