📄 task_165.c
字号:
/**********************************************************************/
//**程序名称:74LS165驱动键盘扫描
//** 作者:杨占刚
//**作者简介:中南民族大学_电子信息工程学院_电子信息工程专业_本科学号:05071133
//**芯片说明:8 位移位寄存器(并行输入,互补串行输出)
//**出口函数:
//**人口函数:无
//**注意事项:15脚CLK INH接地,它与CLK相或,防止干扰CLK
/*当移位/置入控制端(SH/LD为低电平时,并行数据(A-H)被置入寄存器,
而时钟(CLK,CLK INH)及串行数据(SER)均无关。当 SH/LD为高电平时,并行置数功能被禁止.*/
/*CLK和CLK INK在功能上是等价的,可以交换使用。当CLK和CLK INK有一个为低电平并且SH/LD为高电平时,
另一个时钟可以输入。当CLK和CLK INK有一个为高电平时,另一个时钟被禁止。
只有在CLK为高电平时CLK INK才可变为高电平。*/
/***建立时间:2008年7月25号
/*??????????????????????????????????????????????????????????????????????*/
#include "c8051f020.h"
#include "config.h"
#include "stdio.h"
bit flag_165; //按键存在标志,为1表示有键按下,否则没有键按下
sbit A0=ACC^0;
sbit A1=ACC^1;
sbit A2=ACC^2;
sbit A3=ACC^3;
sbit A4=ACC^4;
sbit A5=ACC^5;
sbit A6=ACC^6;
sbit A7=ACC^7;
sbit SH_LD = P3^0; //移位控制/置入控制(低电平有效):1脚
sbit CLK = P3^1; //时钟输入端(上升沿有效):2脚
sbit QH = P3^2; //输出端 :9脚
/**************************************************
>>>函数名称: IN_165(void)
>>>函数功能: 串行输出给ACC
>>>入口参数: 无
>>>出口参数: return(ACC);8个键盘码
>>>调用模块: 无
>>>建立时间: 08_07_25
/**注意事项:是先将QH值赋值给An,因为在SH_LD上升沿到来时候Qh已经输出,在CLK上升沿来的时候输出Qg值
***************************************************/
UCHAR IN_165(void)
{
//按HGFEDCBA顺序串行输出
A7=QH;CLK = 0;CLK = 1;
A6=QH;CLK = 0;CLK = 1;
A5=QH;CLK = 0;CLK = 1;
A4=QH;CLK = 0;CLK = 1;
A3=QH;CLK = 0;CLK = 1;
A2=QH;CLK = 0;CLK = 1;
A1=QH;CLK = 0;CLK = 1;
A0=QH;
return(ACC);
}
/**************************************************
>>>函数名称: TASK_165(void)
>>>函数功能: 采集键盘码
>>>入口参数: 无
>>>出口参数: 有键按下:return(DATA_165); 无键按下:return(0);
>>>调用模块: UCHAR IN_165(void);
>>>建立时间: 08_07_25
/**注意事项:
***************************************************/
UCHAR TASK_165(void)
{
UCHAR DATA_165;
DATA_165=0;
CLK = 0;
ACC=0;
SH_LD = 0; //74LS165将并行数据置入寄存器中
SH_LD = 1; //并行置数功能被禁止
DATA_165=IN_165();
if(DATA_165)
{
flag_165=1;
return(DATA_165);
}
else
{
flag_165=0;
return(0);
}
}
void main(void)
{
UINT KEY_165;
config();
for(;;)
{
KEY_165=TASK_165();
if(flag_165)
{
switch(KEY_165)
{
case 0x01: P5=0X01;break;
case 0x02: P5=0X02;break;
case 0x04: P5=0X04;break;
case 0x08: P5=0X08;break;
case 0X10: P5=0X10;break;
case 0X20: P5=0X20;break;
case 0X40: P5=0X40;break;
case 0X80: P5=0X80;break;
default: break;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -