avr 矩阵键盘扫描,一种比较简单的方法
来源:互联网 发布:淘宝怎么弄客服 编辑:程序博客网 时间:2024/05/22 02:22
#include <iom16v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
#pragma data:code //随后的数据将存贮在程序区,即FLASH区,此区只能存贮常量,比如表格之类。
const table[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c ,
0x39,0x5e,0x79,0x71,0};
#pragma data:data//随后的数据将存贮在数据区,即RAM区,此区可存贮常量和变量。
void delay(uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<1141;j++);
}
void show_init()
{
DDRA|=BIT(3);
DDRB=0XFF;
DDRA|=BIT(4);
}
void show(uchar aa,uchar bb)//第aa个数码管显示bb
{
//PORTB=0XFF;
PORTA|=BIT(4);
PORTB=~BIT(aa);
PORTA&=~BIT(4);
PORTA|=BIT(3);
PORTB=table[bb];
PORTA&=~BIT(3);
delay(10);
}
uchar key_scan()
{
uchar i,j,m,n;
uchar key=0;
uchar t[4]={0x7f,0xbf,0xdf,0xef};
for(i=0;i<4;i++)
{
DDRD=0XF0;
j=t[i];
PORTD=j;
if((PIND&0X01)==0)
{
delay(5);
if((PIND&0X01)==0)
{
while((PIND&0X01)==0);
return key;
break;
}
}
key++;
if((PIND&0X02)==0)
{
delay(5);
if((PIND&0X02)==0)
{
while((PIND&0X02)==0);
return key;
break;
}
}
key++;
if((PIND&0X04)==0)
{
delay(5);
if((PIND&0X04)==0)
{
while((PIND&0X04)==0);
return key;
break;
}
}
key++;
if((PIND&0X08)==0)
{
delay(5);
if((PIND&0X08)==0)
{
while((PIND&0X08)==0);
return key;
break;
}
}
key++;
}
return 0xff;//如果没有健按下返回0xff
}
void main()
{
uchar s=0;
show_init();
while(1)
{
s=key_scan();
if(s!=0xff)//如果有健按下,,显示
show(0,s);
}
}
- avr 矩阵键盘扫描,一种比较简单的方法
- AVR单片机(ATMEGA16)矩阵键盘扫描程序
- FPGA矩阵键盘的扫描方法
- AVR键盘扫描
- AVR----矩阵键盘实验
- 再发一种基于stm32的4X4矩阵键盘定时器扫描消抖法,彻底告别delay函数! .
- 矩阵键盘的扫描接口函数
- 关于矩阵键盘扫描的理解
- 4*4矩阵键盘的扫描原理
- 矩阵键盘扫描
- 矩阵键盘扫描程序
- 矩阵键盘扫描程序
- 矩阵键盘中断扫描
- 矩阵键盘中断扫描
- 矩阵键盘终端扫描
- 矩阵键盘行列扫描
- 一种实用的单片机矩阵键盘设计
- 个人感觉很好的键盘矩阵键盘扫描程序
- ubuntu 安装图形界面
- java实现循环左移和右移的简单算法
- PostBack(AutoPostBack , IsPostBack) 与CallBack
- CAN学习小结_看起来做个毕业设计不错
- 强烈推荐:去面对你最大的恐惧
- avr 矩阵键盘扫描,一种比较简单的方法
- 查全率[召回率]与精度[查准率] 之辨析
- SQL联表更新,联表查询--备忘
- "控件必须放在具有 runat=server 的窗体标记内"错误的解决方法
- 时隔1年,回来继续写
- SQL Server和Oracle的区别
- 远程控制实验室机器
- http://hi.baidu.com/282280072 嵌入式 硬件
- 导出EXCEL表