搜档网
当前位置:搜档网 › 按键控制流水灯花样C程序

按键控制流水灯花样C程序


#include "reg52.h"
unsigned char a,key_code=0;
//bit key_press=0;
sbit wela=P2^7;
sbit dula=P0^2;
/**********************************************************************************************
延时子程序
*********************************************************************************************/
void delay(long dly)
{
while(dly--);
}
/**********************************************************************************************
读取键盘代码子程序
**********************************************************************************************/
void read_key(void)
{
unsigned char x;
P3=0xf0; //将键盘的列赋值0
x=P3|0x0f; //将键盘的行值付给x
if(x!=0xff) //软件的键盘防抖动
{
delay(1000);
P3=0xf0;
x=P3|0x0f;
if(x!=0xff) //如果键盘的行有低电平,则有键按下
{
P3=x; //将对应的行赋值0
key_code=P3; //此时根据行和列的值,即为按键代码
// key_press=1;
a=1; //将按键标志位置1
}
}
}
/************************************************************************************************
8位发光管闪烁子程序
************************************************************************************************/
void shanshuo(void)
{
P1=0x00; //8位发光管全不亮
delay(15000); //延时约1秒
P1=0xff; //8位发光管全亮
delay(15000);
P1=0x00;
delay(15000);
P1=0xff; //8位发光管全亮
delay(15000);
}
/************************************************************************************************
8位发光管依次点亮子程序
************************************************************************************************/
void flow(void)
{
char i;
P1=0xff; //P1口赋值全为高电平
for(i=0;i<8;i++) //发光管依次点亮
{
P1=P1<<1; //将数值左移1位,赋值给P1口
delay(15000);
}
P1=0xff;
}
/*************************************************************************************************
8位发光管间隔亮灭
************************************************

*************************************************/
void jiange(void)
{
P1=0xaa; //8位发光管全不亮
delay(15000); //延时约1秒
P1=0x55; //8位发光管全亮
delay(15000);
P1=0xaa;
delay(15000);
P1=0x55; //8位发光管全亮
delay(15000);
P1=0xff;
}
void shuma(void)
{
P0=0xc0;
dula=1;
dula=0;
P2=0xff;
wela=1;
P2=0x00;
wela=0;
delay(50000);
P0=0xff;
}
void number4(void)
{
P0=0x99;
dula=1;
dula=0;
P2=0xff;
wela=1;
P2=0x00;
wela=0;
delay(50000);
P0=0xff;
}
void number5(void)
{
P0=0x92;
dula=1;
dula=0;
P2=0xff;
wela=1;
P2=0x00;
wela=0;
delay(50000);
P0=0xff;
}
void number6(void)
{
P0=0x82;
dula=1;
dula=0;
P2=0xff;
wela=1;
P2=0x00;
wela=0;
delay(50000);
P0=0xff;
}
void number7(void)
{
P0=0xf8;
dula=1;
dula=0;
P2=0xff;
wela=1;
P2=0x00;
wela=0;
delay(50000);
P0=0xff;
}
void number8(void)
{
P0=0x80;
dula=1;
dula=0;
P2=0xff;
wela=1;
P2=0x00;
wela=0;
delay(50000);
P0=0xff;
}
void number9(void)
{
P0=0x90;
dula=1;
dula=0;
P2=0xff;
wela=1;
P2=0x00;
wela=0;
delay(50000);
P0=0xff;
}
void number10(void)
{
P0=0x88;
dula=1;
dula=0;
P2=0xff;
wela=1;
P2=0x00;
wela=0;
delay(50000);
P0=0xff;
}void number11(void)
{
P0=0x83;
dula=1;
dula=0;
P2=0xff;
wela=1;
P2=0x00;
wela=0;
delay(50000);
P0=0xff;
}
void number12(void)
{
P0=0xc6;
dula=1;
dula=0;
P2=0xff;
wela=1;
P2=0x00;
wela=0;
delay(50000);
P0=0xff;
}
void number13(void)
{
P0=0xa1;
dula=1;
dula=0;
P2=0xff;
wela=1;
P2=0x00;
wela=0;
delay(50000);
P0=0xff;
}
void number14(void)
{
P0=0x86;
dula=1;
dula=0;
P2=0xff;
wela=1;
P2=0x00;
wela=0;
delay(50000);
P0=0xff;
}
void number15(void)
{
P0=0x8e;
dula=1;
dula=0;
P2=0xff;
wela=1;
P2=0x00;
wela=0;

delay(50000);
P0=0xff;
}
/************************************************************************************************
键盘分析子程序
************************************************************************************************/
void key_fenxi(void)
{
switch (key_code)
{
case 0xee: //如果按键0被按下
{
shanshuo(); //调用8位发光管闪烁子程序
break;
}
case 0xed: //如果按键1被按下
{
flow(); //调用8位发光管依次亮子程序
break;
}
case 0xeb: //如果按键2被按下
{
jiange(); //调用8位发光管间隔亮灭子程序
break;
}
case 0xe7:
{
shuma();
break;
}


case 0xde:
number4();
break;
case 0xdd:
number5();
break;
case 0xdb:
number6();
break;
case 0xd7:
number7();
break;
case 0xbe:
number8();
break;
case 0xbd:
number9();
break;
case 0xbb:
number10();
break;
case 0xb7:
number11();
break;
case 0x7e:
number12();
break;
case 0x7d:
number13();
break;
case 0x7b:
number14();
break;
case 0x77:
number15();
}
}
/************************************************************************************************
主函数
***************************

*********************************************************************/
void main(void)
{
while(1)
{
read_key(); //调用读取键盘代码子程序
//ifkey_press==1)
if(a==1) //如果有键按下
{
//key_press=0;
a=0;//按键标识清零
key_fenxi();
}
delay(3000);
}
}
























































相关主题