|
#include <REG51.H>
#include <intrins.h>
#include "array.h"
//--重定義函數變量--//
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
//--定義SPI要使用的 IO--//
sbit MOSIO = P3^4;
sbit R_CLK = P3^5;
sbit S_CLK = P3^6;
//--全局函數聲明--//
void HC595SendData( uchar BT3, uchar BT2,uchar BT1,uchar BT0);
/*******************************************************************************
* 函 數 名 : main
* 函數功能 : 主函數
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void main(void)
{
int k, j, ms;
//--定義一個指針數組指向每個漢字--//
uchar *p[] ={tab17, tab1, tab2, tab3, tab4, tab5, tab6, tab7, tab8,
tab9, tab10, tab11, tab12, tab13, tab14, tab15, tab16};
while(1)
{
for(ms = 20; ms > 0; ms--) //移動定格時間設置
{
for(k = 0; k < 16; k++) //顯示一個字
{
HC595SendData(~(*(p[0] + 2*(k+j) + 1)),~(*(p[0] + 2*(k+j) )),tab0[2*k],tab0[2*k + 1]); //因為字模軟件取的數組是高電平有效,所以列要取反
}
//--清屏--//
HC595SendData(0xff,0xff,0,0); //清屏
}
j++;
if(j == (17*15) )
{
j = 0;
}
}
}
/*******************************************************************************
* 函 數 名 : HC595SendData
* 函數功能 : 通過595發送四個字節的數據
* 輸 入 : BT3:第四個595輸出數值
* * BT2: 第三個595輸出數值
* * BT1:第二個595輸出數值
* * BT0:第一個595輸出數值
* 輸 出 : 無
*******************************************************************************/
void HC595SendData( uchar BT3, uchar BT2,uchar BT1,uchar BT0)
{
uchar i;
//--發送第一個字節--//
for(i=0;i<8;i++)
{
MOSIO = BT3 >> 7 ; //從高位到低位
BT3 <<= 1;
S_CLK = 0;
S_CLK = 1;
}
//--發送第一個字節--//
for(i=0;i<8;i++)
{
MOSIO = BT2 >>7; //從高位到低位
BT2 <<= 1;
S_CLK = 0;
S_CLK = 1;
}
//--發送第一個字節--//
for(i=0;i<8;i++)
{
MOSIO = BT1 >> 7; //從高位到低位
BT1 <<= 1;
S_CLK = 0;
S_CLK = 1;
}
//--發送第一個字節--//
for(i=0;i<8;i++)
{
MOSIO = BT0 >> 7; //從高位到低位
BT0 <<= 1;
S_CLK = 0;
S_CLK = 1;
}
//--輸出--//
R_CLK = 0; //set dataline low
R_CLK = 1; //片選
R_CLK = 0; //set dataline low
}
|
|
|