登录  | 立即注册

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

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] 矩形按键从到F 的显示

[复制链接]
发表于 2022-2-5 15:45:57 | 显示全部楼层 |阅读模式
学习笔记
学习科目: 单片机
学习安排: 单片机
开始时间: 2022-02-05
结束时间: 2022-02-05
由于单片机上引脚P202122有重复使用
所以对他们的赋值会改变;


#include <reg52.h>
       
sbit ADDR2 = P2^2;
sbit ADDR1 = P2^1;
sbit ADDR0 = P2^0;
sbit ENLED = P1^1;                                                                                                                                                        


sbit KOUT4 = P2^7;
sbit KOUT3 = P2^6;
sbit KOUT2 = P2^5;
sbit KOUT1 = P2^4;       
       
sbit KEY4 = P2^3;
unsigned char keysta[4][4] = {
        {1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}};

unsigned int ledchar[]={
                0xC6,0xA1,0x86,0x8E,0x80,0x90,0x88,0x83,
                0x99,0x92,0x82,0xF8,0xC0,0xF9,0xA4,0xB0,
        };
void main()
{
        unsigned char backup[4][4] = {
        {1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}};
        unsigned char i,j;
  ADDR2 = 1;
        ADDR1 = 1;
        ADDR0 = 1;
        KEY4 = 1;
        EA = 1;
        TMOD = 0x01;       
        TL0 = 0x18;       
        TH0 = 0xFC;       
        TF0 = 0;       
        TR0 = 1;       
  TR0=1;              
  ET0=1;
        P0 = ledchar[0];


while(1)
{
        ENLED = 0;
        ADDR2 = 1;
        ADDR1 = 0;
        ADDR0 = 1;

        for(i=0;i<4;i++)
        {
    for(j=0;j<4;j++)
     {
       if(backup [j] != keysta [j])
                         {
                          if(backup [j] == 0)
                                {
                                  P0 = ledchar[i*4+j];
                    }
                                 backup [j] = keysta [j];
                         }


     }               
        }
}
}


void InterruptTime() interrupt 1
        {
          static unsigned char KOUT = 0;
                unsigned char i = 0;
static unsigned char keybuff[4] [4]  = {
        {0xFF,0xFF,0xFF,0xFF},
  {0xFF,0xFF,0xFF,0xFF},
        {0xFF,0xFF,0xFF,0xFF},
        {0xFF,0xFF,0xFF,0xFF}
};
  ADDR2 = 1;
        ADDR1 = 1;
        ADDR0 = 1;
        KEY4 = 1;
  TL0 = 0x18;       
        TH0 = 0xFC;       


keybuff[KOUT] [0] = (keybuff[KOUT] [0] <<1) |ADDR0;
keybuff[KOUT] [1] = (keybuff[KOUT] [1] <<1) |ADDR1;
keybuff[KOUT] [2] = (keybuff[KOUT] [2] <<1) |ADDR2;
keybuff[KOUT] [3] = (keybuff[KOUT] [3] <<1) |KEY4;


for(i=0;i<4;i++)
{
if((keybuff[KOUT] &0x0F)==0x00)
{keysta[KOUT] = 0;}
else if((keybuff[KOUT] &0x0F)==0x0F)
{keysta[KOUT] = 1;}
}
KOUT++;
if(KOUT>=4)
{
KOUT=0;
}
switch(KOUT)
{
        case 0:KOUT4=1;KOUT3=1;KOUT2=1;KOUT1=0;break;
        case 1:KOUT4=1;KOUT3=1;KOUT2=0;KOUT1=1;break;
        case 2:KOUT4=1;KOUT3=0;KOUT2=1;KOUT1=1;break;
        case 3:KOUT4=0;KOUT3=1;KOUT2=1;KOUT1=1;break;
        default : break;
}
  ADDR2 = 1;
        ADDR1 = 0;
        ADDR0 = 1;
}
       

好懒~~不想说~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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