📄 keyscan.c
字号:
/*******************************************************************
实验二
实验名称: 键盘扫描实验
实验目的: 进一步了解AVR单片机端口的操作,加深对AVR单片机端口寄存器的
理解
实验现象: 按键按下对应的LED发亮
环 境: ICCAVR6.31A
设 计 者: shinea8868
说 明: 部分程序原型源自网络,经本人修改调试可用,请尊重知识产权,如
作商业用途请保留本段文字
完成日期: 2007年4月9日
*******************************************************************/
#include <iom16v.h>
#include <macros.h>
#include "..\ICC_H\SOFTWARE.h"
/*-----------------------------------------------------------------
延时程序计算方法
计数个数j = 延时时间/6*晶振频率 - 1
函数名称: void DelayMs(uchar i)
函数功能: 毫秒延时
参 数:
返 回 值: 无
-----------------------------------------------------------------*/
void DelayMs(uchar i)
{
uchar j;
while(i--)
{
j = 167;//1mhz 1ms延时
while(j--);
}
}
/*-----------------------------------------------------------------
函数名称: void KeyScan(void)
函数功能: 键盘扫描程序
参 数:
返 回 值: 无
-----------------------------------------------------------------*/
void KeyScan(void)
{
uchar KeyNum = 0; //用来存放按键信息
DDRA = 0xff; //置端口A为输出
PORTA = 0xff; //全部输出为高电平
DelayMs(1); //延时一段时间
DDRA = 0x00; //置端口A为输入
if( PINA != 0xff) //是否有按键按下
DelayMs(1); //延时去抖动
DDRA = 0xff; //置端口A为输出
PORTA = 0xff; //全部输出为高电平
DelayMs(1); //延时一段时间
DDRA = 0x00; //置端口A为输入
if( PINA != 0xff) //是否有按键按下
{ //确实有按键按下
switch (PINA & 0xff)//判断是哪个按键按下
{
case 0b11111110: KeyNum = 1;break;
case 0b11111101: KeyNum = 2;break;
case 0b11111011: KeyNum = 3;break;
case 0b11110111: KeyNum = 4;break;
case 0b11101111: KeyNum = 5;break;
case 0b11011111: KeyNum = 6;break;
case 0b10111111: KeyNum = 7;break;
case 0b01111111: KeyNum = 8;break;
default: break;
}
while(PINA != 0xff)
{
DDRB = 0xff;
PORTB&= ~(1<<(KeyNum-1));//显示对应的发光二极管
DDRA = 0xff; //置端口A为输出
PORTA = 0xff; //全部输出为高电平
DelayMs(1); //延时一段时间
DDRA = 0x00;
}
DDRB = 0xff; //设为输出
PORTB = 0xff; //灭所有的二极管
}
}
/*-----------------------------------------------------------------
函数名称: void main(void)
函数功能:
参 数:
返 回 值: 无
-----------------------------------------------------------------*/
void main(void)
{
DDRB = 0xff;
PORTB = 0xff;
while(1)
{
DelayMs(200);
KeyScan();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -