日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

51单片机-74HC595移位寄存器

發布時間:2024/3/12 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的引腳配置:
//*配置引腳,根據原理圖 sbit STCP=P3^5;//儲存寄存器時鐘輸入引腳配置 sbit SHCP=P3^6;//移位寄存器時鐘輸入引腳配置 sbit DS=P3^4; //串行數據輸入引腳配置

3.2.字模提取

????????針對點陣屏要顯示的內容,我們可以通過一些輔助的手段,提取所需字模,簡單有效;如下就是2.3點陣屏顯示動畫的字模內容;

總結

以上是生活随笔為你收集整理的51单片机-74HC595移位寄存器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。