📄 input.c
字号:
#include <avr/io.h>
#include "input.h"
//设置IO口方向寄存器
void inputInit(void)
{
//设置输入:165 串行数据输出 QH
sbi(INPUT_PORT, INPUT_DS);
cbi(INPUT_DDR, INPUT_DS);
//设置输出:165 串行时钟 CLK
sbi(INPUT_DDR, INPUT_CLK);
//设置输出:165 锁存信号 SH/LD#
sbi(INPUT_PORT, INPUT_LD);
sbi(INPUT_DDR, INPUT_LD);
//设置输出:595 串行数据输出 SER
sbi(SER_DDR,SER_DAT);
//设置输出:595 串行时钟 CLK
sbi(SER_DDR,SER_SCLK);
//设置输出:595 锁存信号 RCLK
sbi(SER_DDR,SER_RCLK);
//设置输入:温湿度
}
//得到门禁控制器地址
//由于硬件设计原因(考虑PCB布线等),拨码开关3-10和165输出值对应如下
// 拨码开关3->0x80 拨码开关2->0x40 ... 拨码开关10->0x01
//下面的程序对其进行转换,使其输出如下:
// 拨码开关3->0x01 拨码开关2->0x02 ... 拨码开关10->0x80
/*u16 getDevAddr(void)
{
u08 data;
u08 data_h;
u16 temp;
u08 i;
data=inputReadByte();
temp=0;
//拨码开关3-10
for(i=0;i<8;i++)
{
((data&(1<<i))>0)?(temp|=(1<<(7-i))):(temp&=~(1<<(7-i)));
}
temp=data;
temp<<=2;
//拨码开关1和2
data_h=(u08)((inputReadWord())&0xff);
temp+=data_h>>6;
return(temp);
}*/
//读取165一个字节
/*u08 inputReadByte(void)
{
unsigned char val = 0;
INPUT_PORT &= ~(1 << INPUT_LD); //脉冲锁存74HC165并行数据开始
_nop_(); //延时
INPUT_PORT |= (1 << INPUT_LD); //脉冲锁存74HC165并行数据结束
for(int i = 8; i > 0; i --)
{
val <<= 1;
INPUT_PORT &= ~(1 << INPUT_CLK); //发送读脉冲
//if (!(INPUT_PIN & (1 << INPUT_DS)))//低电平++
if ((INPUT_PIN & (1 << INPUT_DS)))
val ++;
INPUT_PORT |= (1 << INPUT_CLK); //发送读脉冲
}
return val;
}*/
//读取165两个字节(级联)
u16 inputReadWord(void)
{
u16 val = 0;
INPUT_PORT &= ~(1 << INPUT_LD); //脉冲锁存74HC165并行数据开始
_nop_(); //延时
INPUT_PORT |= (1 << INPUT_LD); //脉冲锁存74HC165并行数据结束
for(int i = 16; i > 0; i --)
{
val <<= 1;
INPUT_PORT |= (1 << INPUT_CLK); //发送读脉冲
INPUT_PORT &= ~(1 << INPUT_CLK); //发送读脉冲
// if (!(INPUT_PIN & (1 << INPUT_DS))) //低电平++
if ((INPUT_PIN & (1 << INPUT_DS)))
val ++;
// INPUT_PORT |= (1 << INPUT_CLK); //发送读脉冲
}
return val;
}
//向595输出一个字节
void ser_out(u08 dat)
{
u08 i=0;
for(i=0; i<8;i++)
{
// SER_PORT&=~BV(SER_SCLK);
// _nop_();
if(dat & 0x80)
SER_PORT|=BV(SER_DAT);//发送 1
else
SER_PORT&=~BV(SER_DAT);//发送 0
SER_PORT|=BV(SER_SCLK);//发送写脉冲
SER_PORT&=~BV(SER_SCLK);//发送写脉冲
dat<<=1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -