制作出来的实物图如下:
Altium Designer画的PCB图如下:(51hei附件中可下载工程文件)
单片机源程序如下:
include "reg51.h"
#include "intrins.h"
sfr P5 = 0xC8;
sfr P1M0 = 0X92;
sfr P1M1 = 0x91;
sfr P3M0 = 0XB2;
sfr P3M1 = 0xB1;
sfr P5M0 = 0XCA;
sfr P5M1 = 0xC9;
sbit S_RCLK = P1^7;//位移动信号
sbit L_RCLK = P1^6;//平行输出信号
sbit S_BIT = P1^5;//位输入
//bit ; //标志位,虚拟的按键
unsigned char ct;
//unsigned int //255 65536
unsigned char code SEG_tab[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x40,0x80};
void Send_595(unsigned char x);
void Delay1ms();
main(void)
{
P1M0 = 0X00;
P1M1 = 0X00; //0000 0000
P3M0 = 0X00; //0000 1000
P3M1 = 0X00;
P5M0 = 0X00;
P5M1 = 0X00;
L_RCLK = 0;
S_RCLK = 0;
S_BIT = 0;//位输入
while(1)
{
static unsigned char ct=0;
unsigned int j=0;
j=~(0x01<<ct);
Send_595(j>>8);//片选相数码管 位码高8位
Send_595(j);//片选相数码管 位码低8位
Send_595(SEG_tab[ct]);//数码管数据
L_RCLK = 1;
L_RCLK = 0;
Delay1ms();
if(ct<16)
{
ct++;
}
else ct=0;
}
}
void Send_595(unsigned char x)
{
unsigned char i;
for(i=0;i<8;i++)
{
if(x&0x80) S_BIT = 1;
else S_BIT = 0;
S_RCLK = 1;
S_RCLK = 0;
x = x<<1;
}
}
void Delay1ms() //@11.0592MHz
{
unsigned char i, j;
i = 15;
j = 90;
do
{
while (--j);
} while (--i);
}
PCB文件下载:
HC595_Digital_Tube_2022-04-21.PcbDoc_2022-05-05.zip
(16.59 KB, 下载次数: 29)
595原理图.pdf
(284.1 KB, 下载次数: 33)
seg802.zip
(821 Bytes, 下载次数: 29)
|