欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
3D8光立方的Proteus仿真+單片機代碼分享
[打印本頁]
作者:
劉飛洋123
時間:
2018-12-21 17:16
標題:
3D8光立方的Proteus仿真+單片機代碼分享
采用51系列單片機
首先把512個燈板分為8個燈板,每個燈板64個燈
64個led燈橫向共陰,縱向共陽,
8個74HC573鎖存器來控制每一層燈板共陽端
一個ULN2803來驅動,輸出接每層燈板的共陰端反向驅動
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png
(12.87 KB, 下載次數: 23)
下載附件
2018-12-21 17:46 上傳
0.png
(41 KB, 下載次數: 22)
下載附件
2018-12-21 17:47 上傳
單片機源程序如下:
#include<reg51.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
#define DataPort P0 //定義數據端口 程序中遇到DataPort 則用P0 替換
#define DataPort1 P1 //定義數據端口 程序中遇到DataPort 則用P0 替換
sbit LATCH1=P2^0;//定義鎖存使能端口 第一燈板的字節鎖存
sbit LATCH2=P2^1;//
sbit LATCH3=P2^2;//
sbit LATCH4=P2^3;
sbit LATCH5=P2^4;
sbit LATCH6=P2^5;
sbit LATCH7=P2^6;
sbit LATCH8=P2^7;
void Delay(unsigned int t)
{
while(--t);
}
unsigned char line[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};// 顯示行值01234567
void display(unsigned char *Data)//顯示子程序,指針數組作為形參,直接指向傳過來的實參數組的地址 ,這樣就可直接操縱數組傳過來的數組了
{
unsigned char i;
for(i=0;i<8;i++)
{
DataPort1=line[i]; //先給行(燈板的公共端)輸入數據
DataPort=Data[i]; //把數組Data[0~7]里的值依次傳給第一燈板的573鎖存器中
LATCH1=1;LATCH1=0;
DataPort=Data[8+i]; //把數組Data[8~15]里的值依次傳給第二燈板的573鎖存器中
LATCH2=1;LATCH2=0;
DataPort=Data[16+i]; //把數組Data[16~23]里的值依次傳給第三燈板的573鎖存器中
LATCH3=1;LATCH3=0;
DataPort=Data[24+i];
LATCH4=1;LATCH4=0;
DataPort=Data[32+i];
LATCH5=1;LATCH5=0;
DataPort=Data[40+i];
LATCH6=1;LATCH6=0;
DataPort=Data[48+i];
LATCH7=1;LATCH7=0;
DataPort=Data[56+i];
LATCH8=1;LATCH8=0;
Delay(200); //掃描間隙延時,時間太長會閃爍,太短會造成重影
DataPort1=0x00; // 清空行鎖存器里數據,防止出現亂碼
} /*如此一趟循環下來,每次都是8塊燈板的同一行一起點亮,
如此組成一個燈板,8次循環下來,就全部燈都點亮了*/
}
void display1(unsigned char *Data)//顯示子程序,指針數組作為形參,直接指向傳過來的實參數組的地址 ,這樣就可直接操縱數組傳過來的數組了
{
unsigned char i;
for(i=0;i<8;i++)
{
DataPort1=line[i]; //先給行(燈板的公共端)輸入數據
DataPort=Data[i]; //把數組Data[0~7]里的值依次傳給第一燈板的573鎖存器中
LATCH1=1;LATCH1=0;
DataPort=Data[8+i]; //把數組Data[8~15]里的值依次傳給第二燈板的573鎖存器中
LATCH2=1;LATCH2=0;
DataPort=Data[16+i]; //把數組Data[16~23]里的值依次傳給第三燈板的573鎖存器中
LATCH3=1;LATCH3=0;
DataPort=Data[24+i];
LATCH4=1;LATCH4=0;
DataPort=Data[32+i];
LATCH5=1;LATCH5=0;
DataPort=Data[40+i];
LATCH6=1;LATCH6=0;
DataPort=Data[48+i];
LATCH7=1;LATCH7=0;
DataPort=Data[56+i];
LATCH8=1;LATCH8=0;
Delay(5000); //掃描間隙延時,時間太長會閃爍,太短會造成重影
DataPort1=0x00; // 清空行鎖存器里數據,防止出現亂碼
} /*如此一趟循環下來,每次都是8塊燈板的同一行一起點亮,
如此組成一個燈板,8次循環下來,就全部燈都點亮了*/
}
void display2(unsigned char *Data)//顯示子程序,指針數組作為形參,直接指向傳過來的實參數組的地址 ,這樣就可直接操縱數組傳過來的數組了
{
unsigned char i;
for(i=0;i<8;i++)
{
DataPort1=line[i]; //先給行(燈板的公共端)輸入數據
DataPort=Data[i]; //把數組Data[0~7]里的值依次傳給第一燈板的573鎖存器中
LATCH1=1;LATCH1=0;
DataPort=Data[8+i]; //把數組Data[8~15]里的值依次傳給第二燈板的573鎖存器中
LATCH2=1;LATCH2=0;
DataPort=Data[16+i]; //把數組Data[16~23]里的值依次傳給第三燈板的573鎖存器中
LATCH3=1;LATCH3=0;
DataPort=Data[24+i];
LATCH4=1;LATCH4=0;
DataPort=Data[32+i];
LATCH5=1;LATCH5=0;
DataPort=Data[40+i];
LATCH6=1;LATCH6=0;
DataPort=Data[48+i];
LATCH7=1;LATCH7=0;
DataPort=Data[56+i];
LATCH8=1;LATCH8=0;
Delay(1000); //掃描間隙延時,時間太長會閃爍,太短會造成重影
DataPort1=0x00; // 清空行鎖存器里數據,防止出現亂碼
} /*如此一趟循環下來,每次都是8塊燈板的同一行一起點亮,
如此組成一個燈板,8次循環下來,就全部燈都點亮了*/
}
void liang() //點亮所有的燈
{
unsigned int i;
for(i=0;i<4000;i++)
{
DataPort1=0xff; //先給行(燈板的公共端)輸入數據
DataPort=0xff; //把0xff送進鎖存器1~8中,使它們的輸出引腳都輸出高電平,與行鎖存器的0x00相對,點亮所有的燈
LATCH1=1;LATCH1=0;
LATCH2=1;LATCH2=0;
LATCH3=1;LATCH3=0;
LATCH4=1;LATCH4=0;
LATCH5=1;LATCH5=0;
LATCH6=1;LATCH6=0;
LATCH7=1;LATCH7=0;
LATCH8=1;LATCH8=0;
}
}
void mie() //熄滅所有的燈
{
unsigned int i;
for(i=0;i<4000;i++)
{
DataPort1=0xff; //先給行(燈板的公共端)輸入數據
DataPort=0x00; //把0x00送進鎖存器1~8中,使它們的輸出引腳都輸出高電平,與行鎖存器的0x00相對,熄滅所有的燈
LATCH1=1;LATCH1=0;
LATCH2=1;LATCH2=0;
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
3D8光立方.zip
(31.65 KB, 下載次數: 52)
2018-12-21 17:12 上傳
點擊文件名下載附件
光立方
下載積分: 黑幣 -5
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1