代碼如下,這是一個光立方的程序。第一層亮了有短暫的延遲第二層才亮,然后到第三次第四層,有沒有什么辦法讓四層同時亮。
單片機源程序如下:
#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;
}
}
}
|