?? 74hc595串入并出芯片應(yīng)用.c
字號(hào):
//-----------------------------------------------------------------
// 名稱: 74HC595串入并出芯片應(yīng)用
//-----------------------------------------------------------------
// 說(shuō)明: 74HC595具有一個(gè)8位串入并出的移位寄存器和一個(gè)8位輸出鎖存器,
// 本例使用74HC595,通過(guò)串行輸入數(shù)據(jù)來(lái)控制數(shù)碼管顯示.
//
//-----------------------------------------------------------------
#include <iom16v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
#define F_CPU 8000000UL
/*-----------------------------------------------------------------------
延時(shí)函數(shù)
系統(tǒng)時(shí)鐘: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延時(shí)函數(shù)
{
asm("nop");
}
void delay_nus(unsigned int n) //N us延時(shí)函數(shù)
{
unsigned int i=0;
for (i=0;i<n;i++)
delay_1us();
}
void delay_1ms(void) //1ms延時(shí)函數(shù)
{
unsigned int i;
for (i=0;i<1140;i++);
}
void delay_nms(unsigned int n) //N ms延時(shí)函數(shù)
{
unsigned int i=0;
for (i=0;i<n;i++)
delay_1ms();
}
//74595引腳定義
#define ST_CP PC3 //輸出鎖存器控制脈沖
#define DS PC1 //串行數(shù)據(jù)輸入
#define SH_CP PC0 //移位時(shí)鐘脈沖
//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)
//數(shù)碼管段碼表
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(); //發(fā)送高位
dat<<=1 //次高位左移到高位
SH_CP_0();delay_nus(2); //移位時(shí)鐘線拉低
SH_CP_1();delay_nus(2); //放在DS線的0或1在移位時(shí)鐘脈沖上升沿被移入595
}
}
//-----------------------------------------------------------------
// 并行輸出子程序
//-----------------------------------------------------------------
void Parallel_Output_595()
{
ST_CP_0();delay_nus(1);
ST_CP_1();delay_nus(1); //上升沿將數(shù)據(jù)送到輸出鎖存器
}
//------------------------------------------------------------------
// 主程序
//------------------------------------------------------------------
int main()
{
uchar i=0;
DDRC=0xFF;
while(1)
{
//將數(shù)字i的段碼字節(jié)串行輸入595
Serial_Input_595(SEG_CODE[i]);
//595移位寄存器數(shù)據(jù)傳輸?shù)酱鎯?chǔ)器并出現(xiàn)在輸出端
Parallel_Output_595();
delay_nms(300);
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -