找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2451|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

深入理解單片機(jī)的串轉(zhuǎn)并IC-74HC595的工作時(shí)序及用法

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:532529 發(fā)表于 2020-3-1 21:42 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本人新手一枚,正在學(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)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:103667 發(fā)表于 2020-3-2 08:43 | 只看該作者
新手正在學(xué)習(xí),很有幫助。感謝樓主分享!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表