您的位置:首页 > 编程语言

C51源代码--用按键控制led走马灯实例

2006-12-03 23:45 666 查看
/******************************************************************************
*
* Description : 4 key control led flow
* key1 -- start
* key2 -- stop
* key3 -- up->down
* key4 -- down->up
*
* Author : liyangth@gmail.com
*
* Date : 2006-12-3
*
******************************************************************************/
#include "reg51.h"
#include "INTRINS.H"

typedef unsigned int uint_t;
typedef unsigned char uchar_t;

uchar_t key(void);
void mydelay(uint_t delay_time);

void main()
{
uchar_t key_v;
bit start = 0;
bit updown = 0;
uchar_t out_data = 0xfe;

for(;;){
key_v = key();

switch(key_v){
case 0xfb:{
start = 1;
break;
}
case 0xf7:{
start = 0; /*stop*/
break;
}
case 0xef:{
updown = 1;
break;
}
case 0xdf:{
updown = 0;
break;
}
}

if(start){
//P1 = 0xf0;
if(updown)
out_data = _crol_(out_data,1);
else
out_data = _cror_(out_data,1);
P1 = out_data;
}
else
P1 = 0xff; /* all down */

mydelay(1000);
}
}
/******************************************************************************
*
* Function: uchar_t key(void)
*
* Description: key event
*
* Returns: key_v
*
* Note: respond key value
*
* Add: liy 2006-12-3
*
* Modify:
*
*******************************************************************************/
uchar_t key(void)
{
uchar_t key_v;
uchar_t tmp;

P3 = P3|0x3c;
key_v = P3;
if(0xff == (key_v|0xc3))
return (0);

mydelay(10);
key_v = P3;
if(0xff == (key_v|0xc3))
return (0);
else{
for(;;){
tmp = P3;
if(0xff == (tmp|0xc3))
break;
}
return (key_v);
}
}

/******************************************************************************
*
* Function: void mydelay(uint_t delay_time)
*
* Description: delay delay_time ms
*
* Param:
*
* Returns: void
*
* Note: delay;
*
* add: liyangth@mail.com 12-3
*
* modify:
*
*******************************************************************************/
void mydelay(uint_t delay_time)
{
uint_t i;
while(delay_time--){
for(i = 0; i < 125; i++)
;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: