📄 hc595.c
字号:
/****************************************************************************/
/* */
/* Copyright (c) 2005, 老树工作室 */
/* All rights reserved. */
/* */
/* Email:laoshu0902@163.com */
/* www.laoshu0902.bokee.com */
/* */
/****************************************************************************/
/****************************************************************************/
/* 文件名:hc595.c */
/* 版 本:Version 1.0 */
/* 描 述:用hc595驱动数码管演示代码 */
/* 作 者:spot */
/* 函 数: */
/* load_number */
/* send_shift_clock */
/* send_latch_clock */
/* display_number */
/* */
/* 历史记录: */
/* spot 2005-07-10 Creat Inital version. (Version 1.0) */
/****************************************************************************/
#include <reg52.h>
#include <absacc.h>
#include <intrins.h>
typedef unsigned char u_char;
sbit DS = P0^2; /* 串行数据输入 */
sbit SHCP = P0^0; /* 移位时钟输入 */
sbit STCP = P0^1; /* 锁存时钟输入 */
/* 显示数据编码,按共阴极数码管编码 */
u_char number_code[11] = {
0x3f, /* 0 */
0x06, /* 1 */
0x5b, /* 2 */
0x4f, /* 3 */
0x66, /* 4 */
0x6d, /* 5 */
0x7d, /* 6 */
0x07, /* 7 */
0x7f, /* 8 */
0x67, /* 9 */
0x00 /* 灭*/
};
void load_number(u_char number, bit dp);
void send_shift_clock(void);
void send_latch_clock(void);
void clear_led(void);
void display_number(void);
/* 加载将要显示的数据,num-显示数据,dp:1显示小数点,0不显示小数点 */
void load_number(u_char number, bit dp)
{
u_char i;
u_char temp;
temp = ~number_code[number]; /* 使用共阳极数码管,所以编码取反 */
if (dp)
{
temp &= 0x7f;
}
for (i=0; i<8; i++)
{
if ( (temp & 0x80) == 0x80)
{
DS = 1;
}
else
{
DS = 0;
}
temp <<= 1;
send_shift_clock(); /* 发移位脉冲信号 */
}
}
/* 发送移位时钟脉冲信号 */
void send_shift_clock(void)
{
SHCP = 1;
_nop_();
SHCP = 0;
}
/* 发送锁存脉冲信号 */
void send_latch_clock(void)
{
STCP = 1;
_nop_();
STCP = 0;
}
/* 清除4位数码管显示 */
void clear_led(void)
{
u_char i;
for (i=0; i<32; i++)
{
DS = 1;
send_shift_clock();
}
send_latch_clock();
}
/* 演示数码管显示数字 */
void display_number(void)
{
u_char i;
for (i=0; i<4; i++)
{
load_number(i, 0);
}
send_latch_clock();
_nop_();
for (i=0; i<4; i++)
{
load_number(i+4, 1);
}
send_latch_clock();
_nop_();
load_number(8, 0);
load_number(9, 0);
load_number(10, 0);
load_number(10, 0);
send_latch_clock();
_nop_();
}
main()
{
SHCP=0;
STCP=0;
while(1)
{
clear_led();
display_number();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -