⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 task_165.c

📁 利用C8051F020作为控制器
💻 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 + -