📄 595串行显示.txt
字号:
#include <reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
#define nop() _nop_();_nop_();
sbit RCLK = P3^7;
sbit CLK = P3^6;
sbit DAT = P3^5;
ulong a;
void delay_1ms(void);
void delay_nms(unsigned int n);
void sendbyte(uchar byte);
void out595(void);
void Display(unsigned long dat,unsigned char DotPosition,bit ClearZeroFlag);
//---------------8位2进制段代码对应数码管笔段 hcdb afge----------------//
uchar code displaycode[] = {0x82,0xaf,0xc4,0x85,0xa9,0x91,0x90,0xa7,0x80,0x81,
0xa0,0x98,0xd2,0x8c,0xd0,0xf0,0xfd,0xff};//0-9,A-F,-,全灭
//0x82,0xaf,0xc4,0x85,0xa9,0x91,0x90,0xa7,0x80,0x81,
//0xa0,0x98,0xd2,0x8c,0xd0,0xf0,0xfd,0xff
uchar PortCode[8] = {0,0,0,0,0,0,0,0};
main()
{
unsigned int a;
while(1)
{
a++;
Display(a,0,1);
delay_nms(100);
}
}
void delay_1ms(void)
{
unsigned int b;
for (b=0;b<150;b++);
}
void delay_nms(unsigned int n)
{
unsigned int c=0;
for (c=0;c<n;c++)
delay_1ms();
}
void Display(unsigned long dat,unsigned char DotPosition,bit ClearZeroFlag)
{
unsigned char i;
for(i = 0; i != 8; i++)
{
if(i == DotPosition)/// 小数点处理
{
PortCode[i] = (displaycode[(dat%10)]&0x7f);
}
else
PortCode[i] = displaycode[dat%10];
if(ClearZeroFlag&&(!dat)&&(i>DotPosition)) PortCode[i]=0xff;
dat /= 10;
}
sendbyte(PortCode[0]);
sendbyte(PortCode[1]);
sendbyte(PortCode[2]);
sendbyte(PortCode[3]);
sendbyte(PortCode[4]);
sendbyte(PortCode[5]);
sendbyte(PortCode[6]);
sendbyte(PortCode[7]);
out595();
}
void sendbyte(uchar byte)
{
uchar c;
for(c=0;c<8;c++)
{
CLK=0;
DAT=byte&0x80;
byte=byte<<1;
CLK=1;
}
}
void out595(void)
{
RCLK=0;
nop();
RCLK=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -