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++)
;
}
}
*
* 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++)
;
}
}
相关文章推荐
- ucos学习实例之消息队列---按键控制LED的亮灭
- P1 接 8 个独立按键,P2 接 8 个 LED,要求用按键控制 LED 的发光状态
- STM32_按键控制LED之轮询
- [蓝点ZigBee] Zstack 之按键驱动以及控制LED灯 ZigBee/CC2530 视频资料
- 树莓派 Learning 003 — GPIO 002 输入模式 — 按键控制LED
- 5.0 按键控制LED灯
- 外部按键 控制 LED 中断 (参考 http://www.oschina.net/question/565065_115196?sort=time )
- 独立按键控制led灯
- 基于FPGA的按键控制LED的循环左移一位
- LE一个通过java串口通信控制LED显示数据的实例
- 用LED灯和按键来模拟工业自动化设备的运动控制
- 基于Proteus+8051汇编应用实例系列之二--通过按钮来控制LED流水灯移动
- 基于mini2440的按键中断控制LED(裸机代码)
- 4412裸机程序按键控制led灯
- MCU学习3--按键控制LED
- LPC2124--GPIO按键控制LED灯的闪烁
- S3C2410 按键控制LED(中断)
- 51单片机之独立按键控制LED
- 树莓派 Learning 003 — GPIO 003 中断模式 — 按键控制LED
- FPGA学习之按键控制led