登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] 按键3

[复制链接]
发表于 2022-1-11 17:17:31 | 显示全部楼层 |阅读模式
学习笔记
学习科目: 单片机
学习安排: 按键进阶
开始时间: 2022-01-11
结束时间: 2022-01-11
本帖最后由 房一鹏 于 2022-1-23 18:39 编辑

按下k1数码管显示0;按下k2数码管显示1;以此类推显示0,1,2,3,4,5,6,7,8,9,A , B , C , D , E , F
(注:此程序在让数码管1显示的同时其余数码管也会有波动,是程序问题。但总归是写出来了)


程序中有错误的地方,我编辑改了之后保存又变回了原来的样子,我把注释留在了后面,注意!!!


#include<reg52.h>

sbit ENLED=P1^1;

sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;
sbit kout1=P2^4;
sbit kout2=P2^5;
sbit kout3=P2^6;
sbit kout4=P2^7;

unsigned char ledchar[]={
        0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
        0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,
};
unsigned char keysta[4][4]={
        {1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}
};

void main ()
{
        unsigned int i,j;                           
        unsigned char backup[4][4]={               
        {1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}     
  };
        ENLED=0;
  EA=1;
  TMOD=0x01;
  TH0=0xEA;
  TL0=0xAB;
  TR0=1;              
  ET0=1;              

        P20=1;
        P21=1;
        P22=1;
        P23=1;
        while(1)
        {
                P20=021=022=0;         
                for(i=0;i<4;i++)
                {
                        for(j=0;j<4;j++)
                        {
                                if(keysta[j]!=backup[j])                              //这里是keysta [i ] [j]和backup [i ] [j],下面都是,每次保存后[i ]都不显示
                                {
                                        if(backup[j]==0)
                                        {
                                                P0=ledchar[i*4+j];
                                        }
                                        backup[j]=keysta[j];
                                }
                        }
                }
        }
}

void interruptTime() interrupt 1
{
        static unsigned char keyout=0;
        unsigned char i=0;
        static unsigned char keybuf[4][4]={
                0xFF,0xFF,0xFF,0xFF,
          0xFF,0xFF,0xFF,0xFF,
          0xFF,0xFF,0xFF,0xFF,
          0xFF,0xFF,0xFF,0xFF
        };
     P20=121=122=1;               //重点!重点!重点!后面加法计算器,秒表只要是用到按键了,没有这句都是错的
      
        
        TH0=0xEA;
        TL0=0xAB;
        
        keybuf[keyout][0]=(keybuf[keyout][0]<<1)|P20;
        keybuf[keyout][1]=(keybuf[keyout][1]<<1)|P21;
        keybuf[keyout][2]=(keybuf[keyout][2]<<1)|P22;
        keybuf[keyout][3]=(keybuf[keyout][3]<<1)|P23;
        
        
        
        for(i=0;i<4;i++)
        {
                if((keybuf[keyout]&0x0F)==0x00)                                       //  
这里是keybuf[keyout][i ],每次保存后[i ]都不显示
                {
                        keysta[keyout]=0;                                                      //
这里是keysta[keyout][i ],每次保存后[i ]都不显示
                }
                else if((keybuf[keyout]&0x0F)==0x0F)
                {
                        keysta[keyout]=1;
                }
                else{}
        }
        
        keyout++;
//        if(keyout>=4)
//        {
//                keyout=0;
//        }
        keyout=keyout&0x03;
        switch(keyout)
        {
                case 0:kout1=1;kout2=1;kout3=1;kout4=0;break;
                case 1:kout1=1;kout2=1;kout3=0;kout4=1;break;
                case 2:kout1=1;kout2=0;kout3=1;kout4=1;break;
                case 3:kout1=0;kout2=1;kout3=1;kout4=1;break;
    default :break;
        }
        P20=021=022=0;  
}





捕获.PNG
1.PNG
捕获.PNG
3.PNG

按键进阶.zip

27.36 KB, 下载次数: 278

好懒~~不想说~~~
发表于 2022-1-21 22:40:17 | 显示全部楼层
可以可以,哥们你是我见到第一个写出分时复用的大佬
好懒~~不想说~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表