代码如下,这是一个光立方的程序。第一层亮了有短暂的延迟第二层才亮,然后到第三次第四层,有没有什么办法让四层同时亮。
单片机源程序如下:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit SH_CP1 = P1^0; //第一层引脚
sbit DS1 = P1^1;
sbit ST_CP1 = P1^2;
sbit SH_CP2 = P1^3;
sbit DS2 = P1^4;
sbit ST_CP2 = P1^5;
sbit SH_CP3 = P1^6; //第二层引脚
sbit DS3 = P1^7;
sbit ST_CP3 = P2^0;
sbit SH_CP4 = P2^1;
sbit DS4 = P2^2;
sbit ST_CP4 = P2^3;
sbit SH_CP5 = P2^4; //第三层引脚
sbit DS5 = P2^5;
sbit ST_CP5 = P2^6;
sbit SH_CP6 = P2^7;
sbit DS6 = P3^0;
sbit ST_CP6 = P3^1;
sbit SH_CP7 = P3^2; //第四层引脚
sbit DS7 = P3^3;
sbit ST_CP7 = P3^4;
sbit SH_CP8 = P3^5;
sbit DS8 = P3^6;
sbit ST_CP8 = P3^7;
uchar a1[] = {0x60,0x60,0x60,0x60,0x60,0x60,0x60,0xff,}; //十六进制转二
uchar a2[] = {0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xff,};
uchar b1[] = {0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xff,};
uchar b2[] = {0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0xff,};
void delay (uint x)
{
while(x--);
}
void in595(uchar temp)
{
uchar i;
for(i = 0;i < 8;i ++)
{
temp <<= 1;
DS1 = CY; //第一层
DS2 = CY;
SH_CP1 = 0;
SH_CP2 = 0;
SH_CP1 = 1;
SH_CP2 = 1;
DS3 = CY; //第二层
DS4 = CY;
SH_CP3 = 0;
SH_CP4 = 0;
SH_CP3 = 1;
SH_CP4 = 1;
DS5 = CY; //第三层
DS6 = CY;
SH_CP5 = 0;
SH_CP6 = 0;
SH_CP5 = 1;
SH_CP6 = 1;
DS7 = CY; //第四层
DS8 = CY;
SH_CP7 = 0;
SH_CP8 = 0;
SH_CP7 = 1;
SH_CP8 = 1;
}
}
void out595()
{
ST_CP1 = 0; //第一层
ST_CP1 = 1;
ST_CP2 = 0;
ST_CP2 = 1;
ST_CP3 = 0; //第二层
ST_CP3 = 1;
ST_CP4 = 0;
ST_CP4 = 1;
ST_CP5 = 0; //第三层
ST_CP5 = 1;
ST_CP6 = 0;
ST_CP6 = 1;
ST_CP7 = 0; //第四层
ST_CP7 = 1;
ST_CP8 = 0;
ST_CP8 = 1;
}
void main ()
{
uchar i;
while(1)
{
for(i = 0;i < 8;i ++)
{
in595(~a1[ i]); //第一层前8个灯
ST_CP1 = 0;
ST_CP1 = 1;
in595(~a2[ i]); //第一层后8个灯
ST_CP2 = 0;
ST_CP2 = 1;
in595(~b1[ i]); //第二层前8个灯
ST_CP3 = 0;
ST_CP3 = 1;
in595(~b2[ i]); //第二层后8个灯
ST_CP4 = 0;
ST_CP4 = 1;
in595(~b1[ i]); //第三层前8个灯
ST_CP5 = 0;
ST_CP5 = 1;
in595(~b2[ i]); //第三层后8个灯
ST_CP6 = 0;
ST_CP6 = 1;
in595(~a1[ i]); //第四层前8个灯
ST_CP7 = 0;
ST_CP7 = 1;
in595(~a2[ i]); //第四层后8个灯
ST_CP8 = 0;
ST_CP8 = 1;
}
}
}
|