【Proteus仿真】51单片机用74HC165扩展IO读取8个按键状态

【Proteus仿真】51单片机用74HC165扩展IO读取8个按键状态


  • 🔖Proteus仿真实验:51单片机利用74HC165扩展IO
  • 🌿Proteus8.12平台
  • 🌿本实验代码基于Keil编程.
  • 🎬仿真演示:
    在这里插入图片描述

📓程序说明

📋51单片机利用74HC165扩展IO,将8个独立按键接在74HC165上的:D0 - D7上。当有按键被按下时,通过接在单片机P2端口上的led亮灭,来显示按键状态。

📝程序代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
\* 单片机IO扩展--74HC165实验 \*
实现现象:按下独立按键可以点亮对应的P2->led
K1--led1
K2--led2
K3--led3
...
K8--led8

\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/

#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
#include "intrins.h"

typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;

//--定义使用的IO口--//
#define GPIO\_LED P2
sbit IN_PL = P1 ^ 6;
sbit IN_Data = P1 ^ 7; //数据通过P1.7脚移进单片机内处理
sbit SCK = P3 ^ 6;

/\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
\* 函 数 名 : Read74HC165
\* 函数功能 : 使用165读取一个字节数据
\* 输 入 : 无
\* 输 出 : 无
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/

u8 Read74HC165(void)
{
u8 i;
u8 indata;

IN_PL = 0;
\_nop\_(); //短暂延时 产生一定宽度的脉冲
IN_PL = 1; //将外部信号全部读入锁存器中
\_nop\_();

indata = 0; //保存数据的变量清0
for(i = 0; i < 8; i++)
{
indata = indata << 1; //左移一位
SCK = 0; //时钟置0
\_nop\_();
indata |= IN_Data;
SCK = 1; //时钟置1
}

return(indata);
}


/\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
\* 函 数 名 : main
\* 函数功能 : 主函数
\* 输 入 : 无
\* 输 出 : 无
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/
void main()
{
u8 h165Value;

GPIO_LED = 0xff;
while(1)
{
h165Value = Read74HC165();
if(h165Value != 0xFF)
{
GPIO_LED = h165Value;
}
}
}


📚仿真资源和程序源码

1
2
3
链接:https://pan.baidu.com/s/1sgDEmky5S-KUhSRNVFDSOg 
提取码:6uns