• 大小: 0.09M
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-04
  • 语言: 其他
  • 标签: 其他  

资源简介

AT89C51的矩阵键盘、跑马灯和呼吸灯设计.rar

资源截图

代码片段和文件信息

#include “reg52.h“			 //此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16;   //对数据类型进行声明定义
typedef unsigned char u8;

sbit d1=P0^0; //16个LED灯:D1-D16
sbit d2=P0^1;
sbit d3=P0^2;
sbit d4=P0^3;
sbit d5=P0^4;
sbit d6=P0^5;
sbit d7=P0^6;
sbit d8=P0^7;
sbit d9=P2^0;
sbit d10=P2^1;
sbit d11=P2^2;
sbit d12=P2^3;
sbit d13=P2^4;
sbit d14=P2^5;
sbit d15=P2^6;
sbit d16=P2^7;

sbit P32=P3^2;         //P3.2引脚是外部中断INT0的信号
sbit xintiaodeng=P3^3; //P3.3引脚作为心跳灯的控制信号

int a[]={0xfe0xfd0xfb0xf70xef0xdf0xbf0x7f};//顺序流水灯数组
int b[]={0x7f0xbf0xdf0xef0xf70xfb0xfd0xfe};//倒序流水灯数组
int c[]={0xfe0xfc0xf80xf00xe00xc00x800x000x800xc00xe00xf00xf80xfc0xfe0xff}; //顺序逐盏点亮逐盏灭掉数组
int d[]={0x7f0x3f0x1f0x0f0x070x030x010x000x010x030x070x0f0x1f0x3f0x7f0xff};  //倒序逐盏点亮逐盏灭掉数组
u8 KeyValue; //用来存放读取到矩阵键盘的键值
u8 k;           //定义循环变量k

void delay(u16 i)  // delay延时函数    i=1时,大约延时10us
{
while(i--);
}

void KeyDown(void)    //该函数用于检测是否有按键按下并读取键值
{
char a=0;
P1=0x0f; //高四位为0,低四位为1,当按键被按下后,会有某个低四位变为0
if(P1!=0x0f)//读取按键是否按下
{
delay(100);//延时10ms进行消抖
if(P1!=0x0f)//再次检测键盘是否按下
{
//测试列
P1=0X0F;
switch(P1)   //按键被按下后,会有某个低四位变为0
{
case(0X07): KeyValue=0;break; //P1.3=0,即第一列有某个按键被按下
case(0X0b): KeyValue=1;break; //P1.2=0,即第二列有某个按键被按下
case(0X0d): KeyValue=2;break; //P1.3=0,即第三列有某个按键被按下
case(0X0e): KeyValue=3;break; //P1.4=0,即第四列有某个按键被按下
}
//测试行
P1=0XF0;
switch(P1)
{
case(0X70): KeyValue=KeyValue;break;  //P1.7=0,即第一行有某个按键被按下
case(0Xb0): KeyValue=KeyValue+4;break;  //……每行相差4,因此为+4
case(0Xd0): KeyValue=KeyValue+8;break;
case(0Xe0): KeyValue=KeyValue+12;break;
}
while((a<50)&&(P1!=0xf0))  //检测按键松手检测
{
delay(100);
a++;
}
}
}
}

void zoumadeng2(void) //D1-D8,单点循环一次,长按无限循环 
{
for(k=0;k<8;k++)
{
P0=a[k];
delay(30000);
}
P0=0XFF;

}
void zoumadeng3(void) //D8-D1,单点循环一次,长按无限循环
{
for(k=0;k<8;k++)
{
P0=b[k];
delay(30000);
}
P0=0XFF;
}
void zoumadeng4(void) //D9-D16,单点循环一次,长按无限循环
{
for(k=0;k<8;k++)
{
P2=a[k];
delay(30000);
}
P2=0XFF;
}
void zoumadeng5(void) //D16-D9,单点循环一次,长按无限循环
{
for(k=0;k<8;k++)
{
P2=b[k];
delay(30000);
}
P2=0XFF;
}
void zoumadeng6(void) //D1-D16,单点循环一次,长按无限循环
{
for(k=0;k<8;k++)
{
P0=a[k];
delay(30000);
}
P0=0xff;
for(k=0;k<8;k++)
{
P2=a[k];
delay(30000);
P2=0xff;
}

}
void zoumadeng7(void) ////D16-D1,单点循环一次,长按无限循环
{
for(k=0;k<8;k++)
{
P2=b[k];
delay(30000);
}
P2=0xff;
for(k=0;k<8;k++)
{
P0=b[k];
delay(30000);
}
P0=0xff;

}
void zoumadeng8(void) ////D1-D8顺序逐盏点亮逐盏灭掉数组单点循环一次,长按无限循环
{
for(k=0;k<16;k++)
{
P0=c[k];
delay(30000);
}
}
void zoumadeng9(void) ////D8-D1倒序逐盏点亮逐盏灭掉数组单点循环一次,长按无限循环
{
for(k=0;k<16;k++)
{
P0=d[k];
delay(30000);
}
}
void zoumadeng10(void) ////D9-D16顺序逐盏点亮逐盏灭掉数组单点循环一次,长按无限循环
{
for(k=0;k<16;k++)
{
P2=c[k];
delay(3000

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      23462  2019-11-15 14:01  Backup Of new51.pdsbak

     文件      22759  2019-11-16 20:15  Last Loaded new51.pdsbak

     文件      18641  2019-11-16 20:14  new51

     文件       8586  2019-11-16 20:13  new51.c

     文件       4754  2019-11-16 20:14  new51.hex

     文件         27  2019-11-16 20:14  new51.lnp

     文件      18504  2019-11-16 20:14  new51.LST

     文件      22893  2019-11-16 20:14  new51.M51

     文件      22056  2019-11-16 20:14  new51.OBJ

     文件      22784  2019-11-16 20:21  new51.pdsprj

     文件       3152  2019-11-16 20:32  new51.pdsprj.LAPTOP-4TU8EL4B.win10.workspace

     文件        337  2019-11-16 20:14  new51.plg

    .......     55217  2019-11-16 20:14  new51.uvopt

    .......     13227  2019-11-15 14:38  new51.uvproj

    .......     55217  2019-11-16 20:13  new51_uvopt.bak

    .......         0  2019-11-15 14:05  new51_uvproj.bak

----------- ---------  ---------- -----  ----

               291616                    16


评论

共有 条评论