|
本人新手一枚,正在學(xué)51單片機(jī),買了一塊開(kāi)發(fā)板,配套的教程解釋有點(diǎn)錯(cuò)誤,摸索了一天,把程序改了一下,更能方便理解單片機(jī)的串轉(zhuǎn)并IC-74HC595的工作時(shí)序及用法
(74HC595的規(guī)格書及8*8LED點(diǎn)陣模塊電路這里省略)
程序功能:通過(guò)主程序調(diào)用發(fā)送數(shù)據(jù)的子函數(shù),發(fā)送了兩個(gè)數(shù)據(jù),分別點(diǎn)亮LED陣列的第一列的底下一個(gè)LED和頂上的七個(gè)LED,并交替閃爍
#include "reg51.h" //此文件中定義了單片機(jī)的一些特殊功能寄存器
#include "intrins.h"
typedef unsigned int u16; //對(duì)數(shù)據(jù)類型進(jìn)行聲明定義
typedef unsigned char u8;
//--定義使用的 IO 口--//
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;
sbit LED=P0^7;
//sbit LED1=P0^6;
/********************************************************************
***********
* 函 數(shù) 名 : Hc595SendByte(u8 dat1,u8 dat2)
* 函數(shù)功能 : 通過(guò) 595 發(fā)送 2 個(gè)字節(jié)的數(shù)據(jù)
* 輸 入 : dat1:第 2 個(gè) 595 輸出數(shù)值
* * dat2: 第 1 個(gè) 595 輸出數(shù)值
* 輸 出 : 無(wú)
*********************************************************************
**********/
void Hc595SendByte(u8 dat1,u8 dat2)
{
u8 a;
u16 b;
SRCLK = 1;
RCLK = 1;
for(a=0;a<8;a++) //發(fā)送 8 位數(shù)
{
SER = dat1 >> 7; //從最高位開(kāi)始發(fā)送
dat1 <<= 1;
SRCLK = 0; //發(fā)送時(shí)序
_nop_();
_nop_();
SRCLK = 1;
}
RCLK = 0;
_nop_();
_nop_();
RCLK = 1;
for(b=0;b<65535;b++){} //加入延時(shí),方便在開(kāi)發(fā)板上看清HC595發(fā)送第一個(gè)數(shù)據(jù)時(shí),點(diǎn)亮的LED
SRCLK = 1;
RCLK = 1;
for(a=0;a<8;a++) //發(fā)送 8 位數(shù)
{
SER = dat2 >> 7; //從最高位開(kāi)始發(fā)送
dat2 <<= 1;
SRCLK = 0; //發(fā)送時(shí)序
_nop_();
_nop_();
SRCLK = 1;
}
RCLK = 0;
_nop_();
_nop_();
RCLK = 1;
for(b=0;b<65535;b++){} // 加入延時(shí),方便在開(kāi)發(fā)板上看清看清HC595發(fā)送第一個(gè)數(shù)據(jù)時(shí),點(diǎn)亮的LED
}
/********************************************************************
***********
* 函 數(shù) 名 : main
* 函數(shù)功能 : 主函數(shù)
* 輸 入 : 無(wú)
* 輸 出 : 無(wú)
*********************************************************************
**********/
void main()
{ LED=0; //使第一列為低電平。
while(1)
{
Hc595SendByte(0x01,0xfe);
}
}
|
評(píng)分
-
查看全部評(píng)分
|