📄 74hc595串入并出芯片应用.c
字号:
//-----------------------------------------------------------------
// 名称: 74HC595串入并出芯片应用
//-----------------------------------------------------------------
// 说明: 74HC595具有一个8位串入并出的移位寄存器和一个8位输出锁存器,
// 本例使用74HC595,通过串行输入数据来控制数码管显示.
//
//-----------------------------------------------------------------
#include <iom16v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
#define F_CPU 8000000UL
/*-----------------------------------------------------------------------
延时函数
系统时钟:8M
-----------------------------------------------------------------------*/
void delay_1us(void) ;
void delay_nus(unsigned int n);
void delay_1ms(void);
void delay_nms(unsigned int n);
void delay_1us(void) //1us延时函数
{
asm("nop");
}
void delay_nus(unsigned int n) //N us延时函数
{
unsigned int i=0;
for (i=0;i<n;i++)
delay_1us();
}
void delay_1ms(void) //1ms延时函数
{
unsigned int i;
for (i=0;i<1140;i++);
}
void delay_nms(unsigned int n) //N ms延时函数
{
unsigned int i=0;
for (i=0;i<n;i++)
delay_1ms();
}
//74595引脚定义
#define ST_CP PC3 //输出锁存器控制脉冲
#define DS PC1 //串行数据输入
#define SH_CP PC0 //移位时钟脉冲
//74595引脚操作定义
#define ST_CP_1() PORTC |=BIT(ST_CP)
#define ST_CP_0() PORTC &=~BIT(ST_CP)
#define DS_1() PORTC |=BIT(DS)
#define DS_0() PORTC &=~BIT(DS)
#define SH_CP_1() PORTC |=BIT(SH_CP)
#define SH_CP_0() PORTC &=~BIT(SH_CP)
//数码管段码表
const uchar SEG_CODE[] =
{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
//-----------------------------------------------------------------
// 串行输入子程序
//-----------------------------------------------------------------
void Serial_Input_595(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
if(dat&0x80) DS_1();else DS_0(); //发送高位
dat<<=1 //次高位左移到高位
SH_CP_0();delay_nus(2); //移位时钟线拉低
SH_CP_1();delay_nus(2); //放在DS线的0或1在移位时钟脉冲上升沿被移入595
}
}
//-----------------------------------------------------------------
// 并行输出子程序
//-----------------------------------------------------------------
void Parallel_Output_595()
{
ST_CP_0();delay_nus(1);
ST_CP_1();delay_nus(1); //上升沿将数据送到输出锁存器
}
//------------------------------------------------------------------
// 主程序
//------------------------------------------------------------------
int main()
{
uchar i=0;
DDRC=0xFF;
while(1)
{
//将数字i的段码字节串行输入595
Serial_Input_595(SEG_CODE[i]);
//595移位寄存器数据传输到存储器并出现在输出端
Parallel_Output_595();
delay_nms(300);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -