/**************************************************************************************
* LED點陣--點亮一個點實驗 *
實現現象:下載程序后,LED點陣左上角第一個點的LED被點亮果
注意事項:必須將74HC595模塊的JP595短接片短接,否則不會出現現象
***************************************************************************************/
#include "reg51.h" //此文件中定義了單片機的一些特殊功能寄存器
#include "intrins.h"
typedef unsigned int u16; //對數據類型進行聲明定義
typedef unsigned char u8;
//--定義使用的IO口--//
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;
/*******************************************************************************
* 函 數 名 : Hc595SendByte(u8 dat1,u8 dat2,u8 dat3,u8 dat4)
* 函數功能 : 通過595發送四個字節的數據
* 輸 入 : dat1:第4個595輸出數值
* * dat2: 第5個595輸出數值
* * dat3:第2個595輸出數值
* * dat4:第1個595輸出數值
* 輸 出 : 無
*******************************************************************************/
void Hc595SendByte(u8 dat1,u8 dat2,u8 dat3,u8 dat4)
{
u8 a;
SRCLK = 1;
RCLK = 1;
for(a=0;a<8;a++) //發送8位數
{
SER = dat1 >> 7; //從最高位開始發送
dat1 <<= 1;
SRCLK = 0; //發送時序
_nop_();
_nop_();
SRCLK = 1;
}
for(a=0;a<8;a++) //發送8位數
{
SER = dat2 >> 7; //從最高位開始發送
dat2 <<= 1;
SRCLK = 0; //發送時序
_nop_();
_nop_();
SRCLK = 1;
}
for(a=0;a<8;a++) //發送8位數
{
SER = dat3 >> 7; //從最高位開始發送
dat3 <<= 1;
SRCLK = 0; //發送時序
_nop_();
_nop_();
SRCLK = 1;
}
for(a=0;a<8;a++) //發送8位數
{
SER = dat4 >> 7; //從最高位開始發送
dat4 <<= 1;
SRCLK = 0; //發送時序
_nop_();
_nop_();
SRCLK = 1;
}
RCLK = 0;
_nop_();
_nop_();
RCLK = 1;
}
/*******************************************************************************
* 函 數 名 : main
* 函數功能 : 主函數
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void main()
{
Hc595SendByte(0xff,0xfe,0x00,0x01);
while(1)
{
}
}
|