51单片机-74HC595移位寄存器
目錄
1.74HC595芯片介紹?
1.1.引腳定義
1.2.工作原理
2.實際應用
2.1.控制數碼管
2.2.點陣屏顯示圖形
2.3.點陣屏顯示動畫
3.知識點
3.1.位變量(sbit/bit)
3.2.字模提取
1.74HC595芯片介紹?
????????74HC595芯片是一個串行輸入,并行輸出設備。其內部包括一個8位移位寄存器、一個存儲器以及三態輸出門電路,其中移位寄存器和存儲器都有相互獨立的時鐘,每當移位寄存器輸入時鐘SHCP上升沿來臨之時,數據被移出。
1.1.引腳定義
????????引腳定義,怎么命名,并沒有個統一的規則,所以每個人在繪制芯片引腳圖時,根據個人習慣命名可能都不一樣(如:14號引腳(DS/SER),10號引腳(MR/SCLR),11號引腳(SHCP/SCK),12號引腳(STCP/RCK)等);雖然命名可能不一樣,但引腳的功能確是一樣;
1.2.工作原理
工作方式1:將DS的數據,通過SHCP產生上升沿,一位位的移入移位寄存器;然后再有STCP產生一個上升沿,將移位寄存器的數據送入存儲寄存器;再通過OE低電平使能,將對應的數據給到工作引腳;這,只是74HC595常見的工作方式之一,也是本篇的重點;
- 數據輸入:串行數據從DS口輸入,要將DS上的數據移入移位寄存器,需要時鐘驅動,即SHCP每產生一個上升沿,DS上的數據往移位寄存器送入一位,先送低位,后送高位,經過8個上升沿后,8bit全部送入移位寄存器;
- 數據鎖存:就是要將移位寄存器里邊的數據,送入存儲寄存器,即時鐘信號STCP產生一個上升沿,就可完成此操作;
- 數據輸出:使能信號OE為低電平,存儲寄存器的8bit數據(一個字節)就在Q7-Q0并行輸出,并輸出的數據會被鎖存起來
功能匯總:除了以上介紹的方式1之外,74HC595芯片的功能有以下
2.實際應用
2.1.控制數碼管
功能需求:通過74HC595控制P2口(前提:可以通過移位寄存器控制P2口)
程序設計:根據74HC595芯片的工作原理,我們知道,最關鍵的引腳其實只有三個,分別是串行數據輸入引腳DS、移位寄存器時鐘輸入引腳SHCP、儲存寄存器時鐘輸入引腳STCP;所以代碼怎么寫,無非就是配置這幾個引腳,定義串行數據輸入的子函數,以及運行所需要的主函數;
#include <REGX52.H>//*配置引腳,根據原理圖 sbit STCP=P3^5;//儲存寄存器時鐘輸入引腳配置 sbit SHCP=P3^6;//移位寄存器時鐘輸入引腳配置 sbit DS=P3^4; //串行數據輸入引腳配置//*子函數,定義需要輸入的串行數據 void _74HC595_WriteByte(unsigned char Byte) {unsigned char i;for(i=0;i<8;i++) //當i>8時,跳出循環,即次函數循環8次(8位移位寄存器){DS=Byte&(0x80>>i);//非0即1,每運行1次,數據整體右移一位SHCP=1; //SHCP上升沿時,DS的數據寫入移位寄存器SHCP=0;}STCP=1; //STCP上升沿時,數據從移位寄存器轉存儲存寄存器STCP=0; }//*主函數 void main() {SHCP=0; //移位寄存器時鐘信號初始化STCP=0; //儲存寄存器時鐘信號初始化_74HC595_WriteByte(0x48);//74HC595寫入0x48(0100 1000)while(1){} }2.2.點陣屏顯示圖形
功能需求:通過74HC595芯片,控制LED點陣屏,顯示所需靜態畫面
硬件電路:從原理圖可以看出,點陣屏的電路,也是個矩陣電路;想點亮其中哪顆或哪幾顆燈,其實就是段選和位選的過程;
程序設計:相比上一個用例,點陣屏的驅動,其實就是增加了點陣LED燈的段選和位選子函數;
#include <REGX52.H> #include "Delay.h"//*配置引腳,根據原理圖 sbit STCP=P3^5;//儲存寄存器時鐘輸入引腳配置 sbit SHCP=P3^6;//移位寄存器時鐘輸入引腳配置 sbit DS=P3^4; //串行數據輸入引腳配置//*子函數,定義需要輸入的串行數據 void _74HC595_WriteByte(unsigned char Byte) {unsigned char i;for(i=0;i<8;i++) //當i>8時,跳出循環,即次函數循環8次(8位移位寄存器){DS=Byte&(0x80>>i);//非0即1,每運行1次,數據整體右移一位SHCP=1; //SHCP上升沿時,DS的數據寫入移位寄存器SHCP=0;}STCP=1; //STCP上升沿時,數據從移位寄存器轉存儲存寄存器STCP=0; }//*子函數,通過控制點陣屏的段選和位選,來控制想要的圖形 void MatrixLED_ShowColumn(unsigned char Column,Data)//定義變量列(位選)和行(段選) {_74HC595_WriteByte(Data);//段選,通過74HC595的串行數據輸入口DS控制P0=~(0x80>>Column); //位選,通過向右移一位的方式,去控制點陣屏的8列Delay(1); //延時1msP0=0xFF; //消影,P0口置高電平 }//*主函數 void main() {SHCP=0;STCP=0;while(1){MatrixLED_ShowColumn(0,0x80);//位選第1列,段選顯示0x80MatrixLED_ShowColumn(1,0xF0);//位選第2列,段選顯示0xF0MatrixLED_ShowColumn(2,0x48);//位選第3列,段選顯示0x48MatrixLED_ShowColumn(3,0x66);//位選第4列,段選顯示0x66} }2.3.點陣屏顯示動畫
功能需求:通過74HC595芯片,控制LED點陣屏,顯示所需靜態畫面
硬件電路:從原理圖可以看出,點陣屏的電路,也是個矩陣電路;想點亮其中哪顆或哪幾顆燈,其實就是段選和位選的過程;
#include <REGX52.H> #include "Delay.h"//*配置引腳,根據原理圖 sbit STCP=P3^5;//儲存寄存器時鐘輸入引腳配置 sbit SHCP=P3^6;//移位寄存器時鐘輸入引腳配置 sbit DS=P3^4; //串行數據輸入引腳配置//*子函數,定義需要輸入的串行數據 void _74HC595_WriteByte(unsigned char Byte) {unsigned char i;for(i=0;i<8;i++) //當i>8時,跳出循環,即次函數循環8次(8位移位寄存器){DS=Byte&(0x80>>i);//非0即1,每運行1次,數據整體右移一位SHCP=1; //SHCP上升沿時,DS的數據寫入移位寄存器SHCP=0;}STCP=1; //STCP上升沿時,數據從移位寄存器轉存儲存寄存器STCP=0; }//*子函數,通過控制點陣屏的段選和位選,來控制想要的圖形 void MatrixLED_ShowColumn(unsigned char Column,Data)//定義變量列(位選)和行(段選) {_74HC595_WriteByte(Data);//段選,通過74HC595的串行數據輸入口DS控制P0=~(0x80>>Column); //位選,通過向右移一位的方式,去控制點陣屏的8列Delay(1); //延時1msP0=0xFF; //消影,P0口置高電平 }//*數組,編輯需要顯示的圖形文字 unsigned char Animation[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0x1F,0x20,0x40,0x80,0x00,0x2F,0x00,0x80,0x40,0x20,0x1F,0x20,0x40,0x80,0x00,0x2F,0x00,0x30,0x48,0x84,0x42,0x21,0x42,0x84,0x48,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, };//*主函數 void main() {//*定義所需變量unsigned char i,Offset,Count;SHCP=0; //移位寄存器時鐘信號初始化STCP=0; //儲存寄存器時鐘信號初始化while(1){for(i=0;i<8;i++){MatrixLED_ShowColumn(i,Animation[i+Offset]);}Count++;//*相當于有一個延時,掃描10遍,當Count>10的時候,Offset++,偏移一位//*那這能不能用Delay函數代替呢???if(Count>10){Count=0;Offset++;if(Offset>32)//Offset可以偏移多少位,根據實際顯示的內容設置,因為我們需要顯示的內容是8*32的,所以當Offset>32的時候,回到第1位{Offset=0;}}} }3.知識點
3.1.位變量(sbit/bit)
????????在 C51 中,允許用戶通過位類型符定義位變量。位類型符有兩個:bit 和 sbit;可以定義兩種位變量bit 位類型符:用于定義一般的可位處理位變量;它的格式如下:
bit 位變量名;sbit 位類型符:用于定義在可位尋址字節或特殊功能寄存器中的位,定義時須指明其位地址,可以是位直接地址,可以是可位尋址變量帶位號,也可以是特殊功能寄存器名帶位號;格式如下:
sbit 位變量名=位地址;- 如位地址為位直接地址,其取值范圍為 0x00~0xff;
- 如位地址是可位尋址變量帶位號或特殊功能寄存器名帶位號,則在它前面須對可位尋址變量或特殊功能寄存器進行定義;字節地址與位號之間、特殊功能寄存器與位號之間一般用“^”作間隔;如74H595的引腳配置:
3.2.字模提取
????????針對點陣屏要顯示的內容,我們可以通過一些輔助的手段,提取所需字模,簡單有效;如下就是2.3點陣屏顯示動畫的字模內容;
總結
以上是生活随笔為你收集整理的51单片机-74HC595移位寄存器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 四则运算_四则运算————ja
- 下一篇: 网络趋势