昨天学习跑马灯~几乎没什么错误~~兴奋了一晚~~~
今天试着写入按键的程序~都没有反应~郁闷了半天~~
代码如下(书本上的代码) 编译没错也没警告~~
下载到单片机~按了几下按钮 LED灯都没反应 郁闷啊~~~不知道是单片机的按钮坏了 还是其它原因~~
/**********************************************
* File: DirKeyboard_3.C
* Description: Direct Keyboard Interface Example
* Created Date: 2007-10-01
* Last Modified: 2007-10-01
* Author: Jeffrey - Schicksal@126.com
* Notes: None
**********************************************/
#include
unsigned char Read_Keyboard();
void delay(unsigned int t)
{
for(;t>0;t--);
}
void main()
{
unsigned char LED_Status = 0xff; // 定义键值
unsigned char Keyboard_Status = 0xff; // 定义键值
unsigned char Keyboard_Status_Old = 0xff; // 上一次的键值保持
unsigned char jTemp; // 临时变量
unsigned char iTemp; // 临时变量
while(1)
{
Keyboard_Status = Read_Keyboard(); // 读取按键值
if(Keyboard_Status != Keyboard_Status_Old) // 如果有键状态发生改变
{
jTemp = Keyboard_Status^Keyboard_Status_Old; // 计算状态改变的位
for(iTemp = 1;iTemp<129;iTemp<<1) // 扫描状态位
{
if(iTemp&jTemp) // 状态改变
{
if(iTemp & Keyboard_Status_Old) // 按键被按下
{
LED_Status ^= iTemp; // Toggle LED
}
else // 按键释放
{
// Nothing // 不做任何操作
}
}
}
}
P0 = ~LED_Status; // 点亮相应的LED灯
//********************主程序部分*********************//
// Add your code here
//********************主程序部分*********************//
}
}
unsigned char Read_Keyboard()
{
unsigned char Keys_Value; // 定义键值变量
unsigned char Keys_Temp;
do
{
P2 = 0xff; // P2口置高,准备读取按键状态
Keys_Temp = P2; // 读取按键状态
delay(150); // 消抖延时
P2 = 0xff; // P2口置高,准备读取按键状态
Keys_Value = P2; // 读取按键状态
}
while(Keys_Value != Keys_Temp); // 如果读取状态不一致,则重复读取键值
return Keys_Value; // 返回按键状态值
}
复制代码