595.c

来自「AVR 门锁的程序 包含与模块通讯 密码按键」· C语言 代码 · 共 100 行

C
100
字号
#include "Include.h"

//硬件连接
//595 RCK PA5
//595 CLK PA6
//595 DATA PA7

//Power PC0

#define SetCLK();	{PORTA|=0x40;}
#define ClrCLK();	{PORTA&=0xBF;}
#define SetRCK();	{PORTA|=0x20;}
#define ClrRCK();	{PORTA&=0xDF;}
#define SetData();	{PORTA|=0x80;}
#define ClrData();	{PORTA&=0x7F;}


unsigned char DisPlayWord[3]={0xFF,0xFF,0xFF};//595显示数组


void HC595On(void)
{
        PORTC|=1<<PC0;
}

void HC595Off(void)
{
        DisPlayWord[0]=0xFF;
        DisPlayWord[1]=0xFF;
        DisPlayWord[2]=0xFF;
        Refresh595();
        PORTC&=0xFE;
}

//595初始化
void HC595Init(void)
{
        //设置PC0为输出
        DDRC|=1<<PC0;

        HC595On();//打开595

	//设置PA5 PA6 PA7为输出
	DDRA|=0xE0;

	//设置PC0为输出
	DDRC|=0x01;

        Refresh595();//更新595
}

void CLKPulse(void)
{
	ClrCLK();
	SetCLK();
	ClrCLK();
}

void RCKPulse(void)
{
	ClrRCK();
	SetRCK();
	ClrRCK();
}

void SendCharTo595(unsigned char sdata)
{
	unsigned char i;
	unsigned char volatile t;
	for(i=0;i<8;i++)
	{
		t=sdata<<i;
		t=t>>7;
		if(1==t)
		{
			SetData();
		}
		else
		{
			ClrData();
		}
		CLKPulse();
	}
}

//更新595
void Refresh595(void)
{
        SendCharTo595(DisPlayWord[0]);
        SendCharTo595(DisPlayWord[1]);
        SendCharTo595(DisPlayWord[2]);
        RCKPulse();
}

void Test595(void)
{
        HC595Init();
        while(1) {;}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?