/******************************************
Project :矩阵键盘
Chip type :MEGA16
Clock frequence :8.0000MHZ
******************************************/
#include<iom16v.h>
#include<macros.h>
#define PORTKEY PORTB
#define DDRKEY DDRB
#define PINKEY PINB
#pragma data:code
const table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
#pragma data:data
/*******************************/
//函数名称:
//入口参数:
//出口参数:
//函数功能:延时
/******************************/
void delay_nus(unsigned int time)
{
while (time!=0)
{
NOP();NOP();NOP();NOP();
time--;
}
}
void delay_nms(unsigned int time)
{
unsigned int i;
while (time!=0)
{
for(i=0;i<1150;i++);
time--;
}
}
/*******************************/
//函数名称:
//入口参数:
//出口参数:
//函数功能:端口初始化
/******************************/
void port_init()
{
DDRA=0XFF;
PORTA=0XFF;
DDRD=0XFF;
PORTD=0XFF;
}
/*******************************/
//函数名称:
//入口参数:
//出口参数:
//函数功能:键盘端口初始化
/******************************/
void key_init()
{
DDRKEY=0XF0;
PORTKEY=0XFF;
}
/*******************************/
//函数名称:
//入口参数:
//出口参数:
//函数功能:显示程序
/******************************/
void show(unsigned int data,unsigned int num)
{
PORTA=table[data];
PORTD=0XFF;
PORTD&=~BIT(num);
delay_nms(1);
}
/*******************************/
//函数名称:
//入口参数:
//出口参数:
//函数功能:键盘扫描程序
/******************************/
unsigned int key_scan()
{
unsigned int tem,tem1;
PORTKEY&=0X0F;
delay_nms(1);
tem1=PINKEY;
tem1&=0x0f;
delay_nus(1);
if(tem1!=0X0F)
{
delay_nms(5);
tem=PINKEY;
tem&=0x0f;
if(tem1==tem)
return 1;
else
return 0;
}
else
return 0;
}
/*******************************/
//函数名称:
//入口参数:
//出口参数:
//函数功能:键值判断
/******************************/
unsigned int key_num()
{
unsigned int i,j;
if(key_scan())
{
for(i=7;i>3;i--)
{
PORTKEY=~(1<<i);
delay_nms(1);
switch(PINKEY)
{
case 0xee:j=0;break;
case 0xed:j=1;break;
case 0xeb:j=2;break;
case 0xe7:j=3;break;
case 0xde:j=4;break;
case 0xdd:j=5;break;
case 0xdb:j=6;break;
case 0xd7:j=7;break;
case 0xbe:j=8;break;
case 0xbd:j=9;break;
case 0xbb:j=10;break;
case 0xb7:j=11;break;
case 0x7e:j=12;break;
case 0x7d:j=13;break;
case 0x7b:j=14;break;
case 0x77:j=15;break;
default:break;
}
}
}
while(key_scan());
return j;
}
/*******************************/
//函数名称:
//入口参数:
//出口参数:
//函数功能:主函数
/******************************/
void main()
{
unsigned char keyn,keys;
port_init();
while(1)
{
if(key_scan())
{
keyn=key_num();
show(keyn,0);
}
}
}
JUZHENJIANPAN.zip_avr 矩阵键盘_矩阵键盘
版权申诉
66 浏览量
2022-09-14
19:00:11
上传
评论
收藏 3KB ZIP 举报
刘良运
- 粉丝: 69
- 资源: 1万+
最新资源
- MySQL是一种广泛使用的开源关系型数据库管理系统
- MySQL是一种广泛使用的开源关系型数据库管理系统
- MySQL是一种广泛使用的开源关系型数据库管理系统
- 012c3c44c465a099108e0d8570b86a70.zip
- 基于Java和JavaWeb的网上商城项目设计源码 - myshopping
- 基于Vue和JavaScript的书城项目设计源码 - Demo12.18
- wp2787778-map-wallpaper.jpg
- 基于Javascript的杜王町打工人仓库管理系统设计源码 - 杜王町打工人的仓库
- 基于C#的报销材料合并工具设计源码 - 报账材料合并
- 基于Java的驾校一点通后端服务设计源码 - jiaxiaoServer
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0