74HC595串入并出芯片应用
//74HC595重要引脚说明:
//MR(10脚): 低电平时将移位寄存器的数据清零。通常接到VCC防止数据清零。
//OE(13脚)允许输出,低电平有效//SH_CP的上升沿,数据发生移位,而在ST_CP的上升沿,数据从每个寄存器中传送到存储寄存器
//DS(14脚)为串行数据输入引脚,本例通过移位运算将高位送入PWD寄存器的进位标
//志位CY,CY的值再传给DS引脚,8次移位即可完成一个字符的串行传送。
//ST_CP(12脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。
#include <reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit SH_CP=P2^0;
sbit DS =P2^1;
sbit ST_CP=P2^2;
uchar temp;
uchar shizi[]={0x3F,0x06,0x5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};
//延时
void yan_shi(uint ms)
{
uchar i;
while(--ms)
for(i=0;i<120;i++);
}
//串行输入子程序
void shu_ru75HC595()
{
uchar i;
for(i=0;i<8;i++)//例如:十六进是0X00,对应的二进制为:0000 0000
{
temp<<=1;//最高位会移入进位标志(CY) 最低位补0
DS=CY;//在C语言中,CY(进位标志)是程序状态字寄存器(PSW)中的一个状态标志位,用于记录算术运算中的进位或借位状态
SH_CP=1;//移位时钟脉冲上升移位
_nop_();
_nop_();//12MHz晶振下,每个 _nop_(); 延时约1微秒,在 <intrins.h>函数中。
SH_CP=0;
}
}
//并行输出
void shu_chu75HC595()
{
ST_CP=0;
_nop_();
ST_CP=1;//上升沿将数据送到输止出锁存器
_nop_();
ST_CP=0;//锁存显示数据
}
//主程序
void main()
{
uchar i;
while(1)
{
for(i=0;i<10;i++)
{
temp=shizi[i];
shu_ru75HC595();//串行输入子程序
shu_chu75HC595();//并行输出
yan_shi(200);
}
}
}
通过网盘分享的文件:
链接: https://pan.baidu.com/s/1MRI_TbzsElc8ULgqSiWs5A 提取码: 9y35









最新发布