74165芯片的简单使用

#include  < iom8v.h >
#include 
< macros.h >


/**********************
* PD0~PD7 ----- D0~D7 *
* PC0   --------   PL *
* PC1   --------   CP *
* PC2   --------   CE *
* PC3   --------   DS *
* PC4   --------   Q7 *
* PB0~7 ------- LED0~7*
*********************
*/


#define  PL_LOW (PORTC &= ~BIT(PC0))
#define  PL_HIGH (PORTC |= BIT(PC0))
#define  CP_HIGH (PORTC |= BIT(PC1))
#define  CP_LOW (PORTC &= ~BIT(PC1))
#define  CE_HIGH (PORTC |= BIT(PC2))
#define  CE_LOW (PORTC &= ~BIT(PC2))
#define  DS_HIGH (PORTC |= BIT(PC3))
#define  DS_LOW (PORTC &= ~BIT(PC3))
#define  PARALL_DATA PORTD
#define  LED_DATA PORTB
#define  CUR_SERIAL_DATA ((PINC & BIT(PC4)) ? BIT(0) : 0x00)

void  Device_Init( void )
{
    Port_Init();
}

void  Port_Init( void )
{
    DDRB 
= 0xFF;
    DDRD 
= 0xFF;
    DDRC 
= ~BIT(4);
    PORTB 
= 0xFF;
    PORTD 
= 0xFF;
    PORTC 
= 0x00;
}

void  Delay_MS(UINT16 wTimer)
{
    UINT16 i 
= 0,j = 0;
    
for (i = 0;i < wTimer;i++)
    
{
        
for (j = 0;j < 200;j++)
        
{;}
    }

}


void  Write_Data_To_165(UINT8 chData)         // 向165芯片写入chData
{
    PL_LOW;                            
//将PL端置为低
    PARALL_DATA = chData;            //设置数据
}


UINT8 Read_A_Byte_From_165(
void )     // 从165芯片读出一个字节
{
    UINT8 chCount 
= 0;        //控制计数
    UINT8 chResult = 0;        //存储结果
    PL_HIGH;                //PL端拉高
    CE_LOW;                    //CE端拉低
    DS_LOW;                    //DS端拉低
    for(chCount = 0; chCount < 8++chCount)    //依次读入八位数据
    {
        chResult 
<<= 1;                            //因为到上升沿时数据将会移位,所以移位之前的数据位就是原数据的最高位
        chResult |= CUR_SERIAL_DATA;
        CP_LOW;                                    
//给出CP时钟上升沿
        NOP();
        CP_HIGH;
    }

    
return chResult;                //返回结果
}



void  main()
{
    UINT8 chCount 
= 0;
    UINT8 chResult 
= 0;
    Device_Init();
    
for(chCount = 0; chCount < 99; chCount++)        //依次向165芯片写入0~99,然后再显示到LED上以检验是否正确
    {
        Write_Data_To_165(chCount);
        chResult 
= Read_A_Byte_From_165();
        LED_DATA 
= ~chResult;
        Delay_MS(
10000);
    }

}


 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值