第1个回答 2019-05-30
#include"reg51.h"
#include"intrins.h"
#define uchar unsigned char
#define uint unsigned int
uchar num=0;
long i=0;
uint k; uint k1; uint k2;
uchar code nu1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar nu2[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
sbit ada=P2^2;
sbit adb=P2^3;
sbit adc=P2^4;
sbit k3=P3^2;
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;
uchar lw[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
uchar ll[]={0x00,0x41,0x41,0x7F,0x41,0x41,0x00,0x10,0x38,0x7C,0x3E,0x1F,0x3E,0x7C,0x38,0x10,
0x00,0x7C,0x02,0x01,0x01,0x02,0x7C,0x00};
/*******************************************************************************
* 函数名 : Hc595SendByte(u8 dat)
* 函数功能 : 向74HC595发送一个字节的数据
* 输入 : 无
* 输出 : 无
*******************************************************************************/
void tuxiang(uchar dat)
{
uchar a;
SRCLK=0;
RCLK=0;
for(a=0;a<8;a++)
{
SER=dat>>7;
dat<<=1;
SRCLK=1;
_nop_();
_nop_();
SRCLK=0;
}
RCLK=1;
_nop_();
_nop_();
RCLK=0;
}
//sbit k1=P3^3;
void delay( );//延时
void delay1( );//消抖
void main()
{
ada=0;
adb=0;
adc=0;
TMOD=0x01;
TH0=0xFE;
TL0=0x0C;
TR0=1;
EA=1;//总中断允许
ET0=1;//允许定时器0中断
while(1)
{ if(k2==1000)
{ k2=0;
k1++;
if(k==2000)
{
k=0;
i++;
nu2[0]=nu1[i%10];
nu2[1]=nu1[i/10%10];
nu2[2]=nu1[i/100%10];
nu2[3]=nu1[i/1000%10];
nu2[4]=nu1[i/10000%10];
nu2[5]=nu1[i/100000%10];
nu2[6]=nu1[i/1000000%10];
nu2[7]=nu1[i/10000000%10];
} }
}
}
void zhongduan() interrupt 1
{
TH0=0xFE;
TL0=0x0C;
k++; k2++;
switch(num++%16)
{
case 0: ada=0; adb=0; adc=0; P0=nu2[0];
break;
case 1: ada=1; adb=0; adc=0; P0=nu2[1];
break;
case 2: ada=0; adb=1; adc=0; P0=nu2[2];
break;
case 3: ada=1; adb=1; adc=0; P0=nu2[3];
break;
case 4: ada=0; adb=0; adc=1; P0=nu2[4];
break;
case 5: ada=1; adb=0; adc=1; P0=nu2[5];
break;
case 6: ada=0; adb=1; adc=1; P0=nu2[6];
break;
case 7: ada=1; adb=1; adc=1; P0=nu2[7];
break;
case 8:
P0=lw[0]; //位选
tuxiang(ll[(0+k1)%24]); //发送段选数据
case 9:
P0=lw[1]; //位选
tuxiang(ll[(1+k1)%24]); //发送段选数据
break;
case 10:
P0=lw[2]; //位选
tuxiang(ll[(2+k1)%24]); //发送段选数据
break;
case 11:
P0=lw[3]; //位选
tuxiang(ll[(3+k1)%24]); //发送段选数据
tuxiang(0x00); //消隐
break;
case 12:
P0=lw[4]; //位选
tuxiang(ll[(4+k1)%24]); //发送段选数据
break;
case 13:
P0=lw[5]; //位选
tuxiang(ll[(5+k1)%24]); //发送段选数据
break;
case 14:
P0=lw[6]; //位选
tuxiang(ll[(6+k1)%24]); //发送段选数据
break;
case 15:
P0=lw[7]; //位选
tuxiang(ll[(7+k1)%24]); //发送段选数据
break;
}
}
/*case 0: ada=0; adb=0; adc=0; P0=nu2[0];
break;
case 1: P0=lw[0]; //位选
tuxiang(ll[(0+k1)%24]); //发送段选数据
break;
case 2:ada=1; adb=0; adc=0; P0=nu2[1];
break;
case 3:P0=lw[1]; //位选
tuxiang(ll[(1+k1)%24]); //发送段选数据
break;
case 4:ada=0; adb=1; adc=0; P0=nu2[2];
break;
case 5:P0=lw[2]; //位选
tuxiang(ll[(2+k1)%24]);
break; //发送段选数据
case 6:ada=1; adb=1; adc=0; P0=nu2[3];
break;
case 7: P0=lw[3]; //位选
tuxiang(ll[(3+k1)%24]); //发送段选数据
tuxiang(0x00); //消隐
break;
case 8:ada=0; adb=0; adc=1; P0=nu2[4];
break;
case 9: P0=lw[4]; //位选
tuxiang(ll[(4+k1)%24]); //发送段选数据
break;
case 10: ada=1; adb=0; adc=1; P0=nu2[5];
break;
case 11: P0=lw[5]; //位选
tuxiang(ll[(5+k1)%24]); //发送段选数据
break;
case 12:ada=0; adb=1; adc=1; P0=nu2[6];
break;
case 13: P0=lw[6]; //位选
tuxiang(ll[(6+k1)%24]); //发送段选数据
break;
case 14:ada=1; adb=1; adc=1; P0=nu2[7];
break;
case 15:
P0=lw[7]; //位选
tuxiang(ll[(7+k1)%24]); //发送段选数据
break;*/