📄 595.c
字号:
#include <reg52.h>
#include <intrins.h> /*used for _nop_() function*/
#define duanma P0
#define uchar unsigned char
sbit SDATA_595 =P1^0 ; /*串行数据输入*/
sbit RCK_595 =P1^1 ; /*输出锁存器控制脉冲*/
sbit SCLK_595 = P1^2; /*移位时钟脉冲*/
/****************************************************************/
//显示段码
unsigned char data disp_code[11]={0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 3
0x99,0x92,0x82,0xf8,0x80,0x90,0xff};// 4, 5, 6, 7, 8, 9, off
/****************************************************************/
/***************************************************************************/
void delay_1ms(unsigned int ms)
{
unsigned char i;
while(ms--)
for(i=0;i<20;i++);
}
/***************************************************************************/
/*写数据到74HC595函数*/
void WR_595(uchar data num2)
{
uchar data count1;
for(count1=0;count1<=7;count1++)
{
if((num2&0x80)==0x80) /*最高位为1,则向SDATA_595发送1*/
SDATA_595=1;/*发出数据的最高位*/
else
SDATA_595=0;
num2<<=1; /*左移位*/
SCLK_595=0;
_nop_();
_nop_();
SCLK_595=1; /*产生上升沿*/
}
}
/****************************************************************/
/*更新74HC595输出数据函数void Out_595(void)*/
void Out_595(void)
{
RCK_595=0;
_nop_();
_nop_();
RCK_595=1; /*上升沿锁存数据*/
}
/****************************************************************/
void Led_Drive(void)
{
while(1)
{
WR_595(0x01);
Out_595();
duanma=disp_code[1];
delay_1ms(2);
duanma=disp_code[10];
WR_595(0x02);
Out_595();
duanma=disp_code[2];
delay_1ms(2);
duanma=disp_code[10];
WR_595(0x04);
Out_595();
duanma=disp_code[3];
delay_1ms(2);
duanma=disp_code[10];
WR_595(0x08);
Out_595();
duanma=disp_code[4];
delay_1ms(2);
duanma=disp_code[10];
WR_595(0x10);
Out_595();
duanma=disp_code[5];
delay_1ms(2);
duanma=disp_code[10];
WR_595(0x20);
Out_595();
duanma=disp_code[6];
delay_1ms(2);
duanma=disp_code[10];
WR_595(0x40);
Out_595();
duanma=disp_code[7];
delay_1ms(2);
duanma=disp_code[10];
WR_595(0x80);
Out_595();
duanma=disp_code[8];
delay_1ms(2);
duanma=disp_code[10];
}
}
/****************************************************************/
main()
{
Led_Drive(); //自身是个无限循环显示的程序
}
//当MR为高电平,OE为低电平时,数据在SHCP上升沿进入移位寄存器,在STCP上升沿输出到并行端口。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -