单片机系列(三)
来源:互联网 发布:linux sleep精度 编辑:程序博客网 时间:2024/05/18 13:48
单片机实现按键控制led的亮灭,感觉写的很不成功,按键很不“灵”。我的本意是想当有按键按下时点亮相应的灯,如果同一个键被按下两次则第二次为熄灭对应的那个灯。
程序中有点问题,并不是能很好的实现功能,应该是去抖动那块做的不好。对软件去抖动还不是很熟悉,想日后好好做一下,现在也将源代码贴上来,如果有心人能帮着改一下将不胜感激!这样的学习应该更刻骨铭心!
/*
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$//
|| FileName: key.c ||
|| Function: 实现一个按键控制一个灯的亮灭 ||
|| 如果两次按下同一个键则一个为, ||
|| 一个为灭 ||
|| Author : Softstone ||
|| Date : 2007/04/21 ||
|| Email : softstonechwch@126.com ||
|| Tips : 对按键的扫描不能除去抖动 ||
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$//
*/
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define LED P0 //LED接在P0口上,使用低四位,P0^0——P0^3
#define KEY P2 //按键接着P2口,也是低四位
sbit LedCs= P3^7;
//函数声明
void Delay(void);
void KeyScan(void);
void main()
{
KEY = 0xff;
LED = 0xff;
LedCs = 0; //开LED使能端
while (1)
{
KeyScan();
}
}
/*##########################
按键扫描并且点亮LED。
*/
void KeyScan()
{
uchar lastKey;
uchar currentKey;
currentKey = KEY;
currentKey |= 0xf0;
if (currentKey != 0xf0 )
{
Delay(); /*防抖动,具体最小时间也不甚清楚,
延迟过大则会出现有时按键后灯不亮*/
currentKey = KEY;
currentKey |= 0xf0;
if ((currentKey == lastKey) && (LED !=0xff)) //判断是否有键按下,且是否为第二次按键相同的键。
{
LED = 0xff;
}
else if ((currentKey == lastKey) && (LED ==0xff))//如果为第一次按下键,则点亮相应的灯。
{
switch (currentKey)
{
case 0xfe: LED = 0xfe; break;
case 0xfd: LED = 0xfd; break;
case 0xfb: LED = 0xfb; break;
case 0xf7: LED = 0xf7; break;
default: break;
}
}
else //如果没有键按下则保持原来的状态。
{
switch (currentKey)
{
case 0xfe: LED = 0xfe; break;
case 0xfd: LED = 0xfd; break;
case 0xfb: LED = 0xfb; break;
case 0xf7: LED = 0xf7; break;
default: break;
}
}
lastKey = LED;
}
}
/*############################
延时程序
*/
void Delay()
{
unsigned int kk=0x9fff;
do{_nop_();kk--;}
while(kk!=0);
}
- 单片机系列(三)
- 单片机系列(三)之修改
- 单片机小白学步系列(三) 偶遇51单片机
- 51单片机开发系列三_数码管动态扫描显示
- 单片机系列(一)
- 单片机系列(二)
- 单片机系列(四)
- C8051F系列单片机相关
- 单片机系列的识别
- Microchip 单片机 PIC系列
- STC15F2K60S2系列单片机
- C8051F系列单片机相关
- 8051 系列单片机内部结构
- EMC单片机学习三
- 单片机实验三
- 【单片机笔记】STM8S系列单片机FLASH操作
- Microchip公司PIC系列单片机
- 51系列单片机开发宝典
- JavaMail 深入浅出
- Java能够成为完美的技术平台吗?
- 测试概念进行代码设计时的七条基本原则
- 谈谈如何保证测试代码的正确性
- 程序员应具有的素质
- 单片机系列(三)
- CGOGO朱波做客新浪:3G是手机搜索催化剂
- 好的JAVA风格(英译)
- 【treeview开发笔记(2)】高兴,又发现了一个加速treeview的方法
- Windows操作系统“安全模式”的应用
- .NET开发中的一些小技巧
- Hibernate 缓存
- JavaScript的系统函数学习
- JSP显示内容缓存技巧