回复 2楼 grmmylbs
#include <reg52.h>
//包括一个标准的51头函数
#define uchar unsigned char
//预定义
#define uint
unsigned int
//预定义
#define ulong unsigned long
//预定义
sbit SDA_164=P0^0;
//74HC164端口定义
sbit SCLK_164=P0^1;
sbit DIG1=P1^0;
//数码管位选端口
sbit DIG2=P1^1;
//数码管位选端口
sbit DIG3=P1^2;
//数码管位选端口
sbit DIG4=P1^3;
//数码管位选端口
sbit DIG5=P1^4;
//数码管位选端口
sbit DIG6=P1^5;
//数码管位选端口
sbit DIG7=P1^6;
//数码管位选端口
sbit DIG8=P1^7;
//数码管位选端口
uchar code LedNumber[14]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80,0x00,0x04,0x5c};
void delay(int i,int j)
//延时函数
{
int m;
for(;i>0;i--)
{
m=j;
for(;m>0;m--);
}
}
void wirteByte_74164 (uchar ch)
//往74164中写一个字节
{
uchar i;
SCLK_164 = 0;
for (i=0;i<8;i++)
{
SDA_164 = ch&0x80;//这个地方为什么可以这么定义
SCLK_164 = 1;
ch = ch<<1;
delay(3,2);
SCLK_164 = 0;
}
}
void led_display (uchar ch)
//一位数码管显示函数
{
wirteByte_74164 (LedNumber[ch]);
P1 = 0x00;
delay(300,200);
P1 = 0xff;
}
void main ()
//主函数
{
uchar ch;
while (1)
//死循环
{
led_display (ch);
//显示数字
ch++;
//计数
if (ch>9)
{
ch=0;
}
}
}