⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 74hc595串入并出芯片应用.c

📁 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 + -