74HC165编程与PROTEUS仿真
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5.3 74HC165输入扩展
汇编、C 语言编程。
简介:
首先shld 置低电平,延时大约1ms ,完成数据读取,然后拉高。接着进入一个8次的循环,首先clk=0;读取so 的值,在clk=1;依次循环8次。(首先读取的是高位,依次递减) 注意:本例采用的是显示哪个按键被按下,即将读取的状态赋值给P3口,再由P3口通过数码管显示!!!!(共阴极)
(1)汇编:
ORG 0000H
//------主函数-------
MAIN: CLR P2.1 //读入按键信号
NOP
NOP
SETB P2.1
CALL READ //读取第D7键值
MOV P3.7,C//赋值显示
CALL READ //读取第D6键值
MOV P3.6,C
CALL READ //读取第D5键值MOV P3.5,C
CALL READ //读取第D4键值MOV P3.4,C
CALL READ //读取第D3键值MOV P3.3,C
CALL READ //读取第D2键值MOV P3.2,C
CALL READ //读取第D1键值MOV P3.1,C
CALL READ //读取第D0键值MOV P3.0,C
SJMP MAIN //返回主函数
//----读信号子函数------- READ:
CLR P2.0
MOV C,P2.2 //读取信号SETB P2.0
RET
END
(2)C语言
#include
sbit shld=P2^1;
sbit clk=P2^0;
sbit so=P2^2;
int n=0;
//-------延时子程序------ void delay(int i)
{
int j;
while(i--)
for(j=100;j>0;j--)
;
}
//-----读信号子程序------ void read()
int i,m=0;
shld=0;//低电平读入信号
delay(10);//延时
shld=1;//置高电平
for(i=0;i<8;i++)//循环八次
{
clk=0; //拉低
n=n<<1; //左环移
n=n|so; //将位依次排列,组成16进制数clk=1; //拉高
}//首先读最高位信号再一次往低
}
//-----主函数--------
void main()
{
while(1)
{
read();//读信号
P3=n; //P3口赋值
}
}