標(biāo)題:
51單片機(jī)控制LED點(diǎn)陣顯示囧
[打印本頁(yè)]
作者:
liuda
時(shí)間:
2015-1-22 01:55
標(biāo)題:
51單片機(jī)控制LED點(diǎn)陣顯示囧
#include <REG51.H>
#include <intrins.h>
#define NOP() _nop_() // 定義空指令 ,這個(gè)函數(shù)在庫(kù) <intrins.h> 中
//SPI IO
sbit MOSIO = P3^4;
sbit R_CLK = P3^5;
sbit S_CLK = P3^6;
//點(diǎn)陣顯示數(shù)組
unsigned char code tab0[] = {0x00, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80,
0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x00};
unsigned char code tab1[] ={0,0,254,127,2,64,66,66,34,68,18,72,2,64,2,64,242,79,18,72,18,72,18,72,242,79,2,64,254,127,0,0};
//函數(shù)聲明
void HC595SendData( unsigned char BT3, unsigned char BT2,unsigned char BT1,unsigned char BT0);
/*************主函數(shù)*****************************/
void main(void)
{
int k,i,ms;
i = 16; //顯示時(shí)間
while(1)
{
for(ms = i; ms > 0; ms--)
{
for(k = 0; k < 16; k++) //顯示囧
{
HC595SendData(~tab1[2*k +1],~tab1[2*k],tab0[2*k],tab0[2*k + 1]);
}
}
}
}
/*********************************************************************************************************
** 函數(shù)名稱: HC595SendData
** 功能描述: 向SPI總線發(fā)送數(shù)據(jù)
*********************************************************************************************************/
void HC595SendData( unsigned char BT3, unsigned char BT2,unsigned char BT1,unsigned char BT0)
{
unsigned char i;
for(i = 0; i < 32; i++)
{
if(i > 23 )
{
if((BT0 << (i - 24)) & 0x80)
{
MOSIO = 1;
}
else
{
MOSIO = 0;
}
}
else if(i > 15 & i < 24 )
{
if((BT1 << (i - 16)) & 0x80) //set dataline high 0X80000000 最高位與SendVal左移的最高位 進(jìn)行邏輯運(yùn)算
{
MOSIO = 1; // 如果為真 MOSIO = 1
}
else
{
MOSIO = 0;
}
}
else if(i < 16 & i > 7 )
{
if((BT2 << (i - 8)) & 0x80)
{
MOSIO = 1;
}
else
{
MOSIO = 0;
}
}
else
{
if((BT3 << i) & 0x80) //set dataline high 0X80000000 最高位 進(jìn)行邏輯運(yùn)算
{
MOSIO = 1; // 如果為真 MOSIO = 1
}
else
{
MOSIO = 0;
}
}
S_CLK = 0;
NOP(); //產(chǎn)生方形波
S_CLK = 1;
}
R_CLK = 0; //set dataline low
NOP(); //產(chǎn)生方形波
R_CLK = 1;
}
復(fù)制代碼
作者:
歐陽(yáng)小美
時(shí)間:
2017-3-30 15:57
HC595SendData(~tab6[2*k +1],~tab6[2*k],tab0[2*k],tab0[2*k + 1]);這一步能解釋下嗎?
還有點(diǎn)陣顯示數(shù)組怎么來的
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1