娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

【51單片機】點陣LED的顯示實驗

發布者:EuphoricMelody最新更新時間:2024-04-07 來源: elecfans關鍵字:51單片機  點陣LED  顯示實驗 手機看文章 掃描二維碼
隨時隨地手機看文章

前言

今天女朋友生日,除了禮物之外,一時想不到能給她點什么不一樣的,并且奈何自己不會寫詩,沒辦法從這方面入手。所以就用我會的方式吧。
既然最近自己琢磨琢磨單片機,也準備玩兒點陣LED的顯示實驗,這時我靈機一動,不如用LED做一個吧。(????????????老理工男了,怎么有的女朋友?)
好,下面就來看看我是怎么做的吧。


這篇文章(點擊閱讀)。

二、硬件

這次用到的原件有80C51、MATRIX-8×8-RED、RESPACK-8,以及POWER和GROUND

1.了解Matrix-8×8就像你需要了解女朋友

MATRIX-8×8-RED是8×8的紅色LED點陣(除了紅色還有其他顏色,也不止有8×8規格的),它共有16個引腳,8個陽極引腳控制列上的LED,8個陰極引腳控制行上的LED。通常我們把控制行上LED的八位二進制數稱為列值,控制列的二進制稱為列選信號。類似于數據與片選信號的關系。
在這里插入圖片描述
上圖就是一個matrix-8×8的LED,我們無法從外觀上看出它的陰極和陽極,這時候我們就需要自己找出來。方法也很簡單,就是給它加電源。當列選端口為高電平,列值為低電平時LED點亮,利用這一特點,很容易找出陰極和陽極。如下圖:
在這里插入圖片描述
我們只需要連接左邊或者右邊一種即可,這里為方便說明把兩端都測試了一遍。打開仿真,即可觀察到:
在這里插入圖片描述
觀察左邊發現:上端輸入高電平的列有LED發光,說明上端是陽極(列選),下端是陰極(列值)。而右邊上端低電平下端高電平并沒有LED亮起,佐證了剛才的結論。
進一步,我們看到陰極輸入01111011,在一列中,從高到低是10000100B。發現了嗎?陰極低電平時對應的LED亮起,01111011就是列值。

2、正確地連接線路就像你需要以正確的方式讓她開心。

在對MATRIX8×8有了了解,測出了端口性質。接下來是連接電路。首先我們需要明確一點,80C51的P0口需要上拉電阻才能輸出高電平,具體原因是80C51芯片的設計結構,在這里就不解釋了(因為我也不甚了解,不獻丑了。有大佬可以評論區科普一下嗎?)
這里我們選用P0口做列選,用P2口作列值。于是得到如圖的電路圖
在這里插入圖片描述
其中,RESPACK-8是排阻,其八位端口接P0口,作為上拉電阻。Matrix-8×8-RED的陽極接P0口(列選),陰極接P2口(列值)。

三、軟件

1、思路就是有一個給她驚喜的想法

我的設計的是先顯示一顆跳動的愛心?,然后把她的名字首字母顯示出來。根據這個想法,我們就很好想到實現辦法了。

  • 首先,我們需要設置在開始的一段時間內讓愛心跳動,再讓字母輪流出現。

  • 愛心怎么跳動?我們可以用一大一小的愛心交替顯示表現這種效果。

  • 怎么顯示?點陣LED可以用動態掃描法顯示,只需控制好循環就能顯示圖形。
    下面開始編寫代碼:

2、頭文件就是準備工作

#include int Ledcode[5][8]={ {0x0C,0x1E,0x3E,0x7C,0x7C,0x3E,0x1E,0x0C},//大愛心 {0x00,0x0C,0x1C,0x38,0x38,0x1C,0x0C,0x00},//小愛心 {0x32,0x73,0xdb,0xdb,0xdb,0xdb,0xce,0x64},//字母‘S’ {0x01,0x03,0x7f,0xff,0xc3,0xe1,0x60,0x00},//字母‘J’ {0x01,0x03,0x87,0xfc,0xfc,0x86,0x03,0x01}};//字母‘Y’int line[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//列選


上面的代碼,因為我想顯示一顆跳動的愛心,所以在這個8×8的點陣中設計了一個大愛心和一個小愛心,讓大小愛心交替顯示,表現出跳動的效果。
后面的字母是名字縮寫。列選則是每次選擇一列顯示。所有這些都是我一個一個畫出來再轉化的列值。

  • 一開始是這樣的在這里插入圖片描述
    把它整個畫出來了

  • 然后是這樣在這里插入圖片描述
    把列中對應的二進制數寫出來,就是列值了。

  • 最后,還進行了修改,這都是在看到效果后對一些細節修改了。在這里插入圖片描述
    讓大家見笑了。


3、點陣LED顯示就是把想法變成現實

這里采用的是動態掃描的方式,因為每一列顯示的列值都不一樣,所以用動態掃描每次顯示一列,只要循環的速度足夠快,就能看到一幅靜態的圖案,這利用的是人眼的視覺暫留現象。


1)跳動愛心的代碼:

int times=0;

while(times<1500){

P0=line[n];

if(times<=1000) P2=~Ledcode[0][n++];//循環顯示大愛心1000次。

else P2=~Ledcode[1][n++];//小愛心再顯示小愛心500次.

if(n==8) n=0;//讓列值在數組中的一行循環。

times++;

delayms(1);//延時程序。

}

先循環顯示大愛心約1秒,再顯示小愛心0.5秒,形成一次跳動效果。需要跳動多次只需要再嵌套一層for循環即可。:


int times,n=0;

for(i=0;i<3;i++){

times=0;

while(times<1500){

P0=line[n];

if(times<=1000) P2=~Ledcode[0][n++];

else P2=~Ledcode[1][n++];

if(n==8) n=0;

times++;

delayms(1);

}

}

這樣就跳動了三次。


然后,當愛心跳動了三次,就會交替顯示字母。利用同樣的方法就能實現。


2)顯示字母的代碼:

times=0;

n=0;

while(times<=6000){

P0=line[n];

if(times<=2000) P2=~Ledcode[2][n++];

else if(times>2000&×<=4000) P2=~Ledcode[3][n++];

else P2=~Ledcode[4][n++];//三個字母各顯示2000次,視覺上顯示了約2秒。

times++;

if(n==8) n=0;

delayms(1);

}

以上是一次的整個流程,現在需要一直循環顯示,只需要再嵌套一層大的循環即可。

如下:


void main(void)

 { 

int i;

int n=0;

while(1){

int times;

for(i=0;i<3;i++){

times=0;

while(times<1500){

P0=line[n];

if(times<=1000) P2=~Ledcode[0][n++];

else P2=~Ledcode[1][n++];

if(n==8) n=0;

times++;

delayms(1);

}

}

times=0;

n=0;

while(times<=6000){

P0=line[n];

if(times<=2000) P2=~Ledcode[2][n++];

else if(times>2000&×<=4000) P2=~Ledcode[3][n++];

else P2=~Ledcode[4][n++];

times++;

if(n==8) n=0;

delayms(1);

}

}

 }

現在主程序完成了,這也只是一個簡單的小程序。但是剛才用到了延時程序,把延時程序補上就大功告成了。


void delayms(int n){

int i;

int j;

for(i=0;i for(j=0;j<110;j++);

}

3)附上完整代碼:

int Ledcode[5][8]={ {0x0C,0x1E,0x3E,0x7C,0x7C,0x3E,0x1E,0x0C},//大愛心的列值

{0x00,0x0C,0x1C,0x38,0x38,0x1C,0x0C,0x00},//小愛心的列值

{0x32,0x73,0xdb,0xdb,0xdb,0xdb,0xce,0x64},//字母‘S’列值

{0x01,0x03,0x7f,0xff,0xc3,0xe1,0x60,0x00},//字母‘J’列值

{0x01,0x03,0x87,0xfc,0xfc,0x86,0x03,0x01}};//字母‘Y’列值

int line[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//列選

void delayms(int n){

int i;

int j;

for(i=0;i for(j=0;j<110;j++);

}

 

void main(void)

 { 

int i;

int n=0;

while(1){

int times;

for(i=0;i<3;i++){

times=0;

while(times<1500){//顯示跳動愛心

P0=line[n];

if(times<=1000) P2=~Ledcode[0][n++];//顯示大愛心

else P2=~Ledcode[1][n++];//顯示小愛心

if(n==8) n=0;

times++;

delayms(1);

}

}

times=0;

n=0;

while(1){//輪流顯示字母

P0=line[n];

if(times<=2000) P2=~Ledcode[2][n++];//顯示字母‘S’

else if(times>2000&×<=4000) P2=~Ledcode[3][n++];//顯示字母‘J’

else P2=~Ledcode[4][n++];//顯示字母‘Y’

times++;

if(n==8) n=0;

delayms(1);

if(times==6000) break;

}

}

 }


四、效果——女朋友獲得愛意,你獲得女朋友

在這里插入圖片描述
點陣太小,放大了看不清楚,所以縮小了看更能把圖形顯示清楚。


總結

代碼很簡單,程序也很簡單,但是重要的是心意嘛。她還是很喜歡的,當然,女生可能對硬件是沒多少興趣的,她更注重的是顯示的效果和我為了這個效果做的努力。


關鍵字:51單片機  點陣LED  顯示實驗 引用地址:【51單片機】點陣LED的顯示實驗

上一篇:51單片機學習筆記之基礎部分
下一篇:【51單片機】DAC0832制作信號發生器(方波,三角波,鋸齒波)

推薦閱讀最新更新時間:2025-06-12 16:30

基于89C51單片機的編碼譯碼顯示實驗電路設計
摘 要:當前手工撥盤方式編碼譯碼顯示實驗電路存在輸入信號不穩定、控制性較差等缺點, 為了克服上述缺點, 電路設計采用89C51 單片機為核心器件作為編碼信號發生器和自動控制系統。通過Pro teus 平臺仿真和實驗調試, 電路能產生高質量輸入信號和實現自動控制, 較好地解決了手工撥盤方式編碼譯碼顯示實驗電路存在的缺陷。 0 引 言 在日常數字邏輯電路實驗中編碼譯碼顯示實驗電路是編碼、譯碼、顯示三個電路的綜合運用, 在數字邏輯實驗電路中具有重要的地位, 在實驗的過程中, 時常會出現顯示結果的抖動, 經研究出現這種現象主要原因是:編碼電路的編碼信號輸入采用手工撥盤方式, 產生的編碼輸入信號往往不穩定; 另外, 電路控制性能較差,不能達
[單片機]
基于89C<font color='red'>51單片機</font>的編碼譯碼<font color='red'>顯示</font><font color='red'>實驗</font>電路設計
74HC595在【8x8LED點陣】中的使用
前幾天學了點陣的顯示,今天按自己的思路來總結一下。 首先介紹一下點陣的顯示原理。點陣的電路圖和之前學過的矩陣按鍵的電路圖是相似的。 每個燈就相當于坐標圖中的一個點,具有唯一獨特的坐標位置,這樣就可以通過引腳的信號來控制每個燈的關和開 col管腳連接的是P0的八個引腳,row管腳連接的是595的八位并行輸出端。 實驗中采取的是逐列顯示,通過P0控制八列每列逐列顯示,其間通過595位移緩存器控制每列要亮的led燈。 74HC595是串入并出帶有鎖存功能移位寄存器.如圖: 形象來說,14引腳是搬運工,11是進廠守門員,12是出廠守門員, 11出現上升沿時,從14引腳輸入一位數據,一共重復八次 12引腳上升
[單片機]
74HC595在【8x8<font color='red'>LED</font><font color='red'>點陣</font>】中的使用
基于STM32的LED點陣屏的設計與實現
近年來,隨著信息產業的高速發展,點陣LED 顯示屏已廣泛應用于金融行業、郵電行業、體育館、廣告業等各種廣告發布和信息顯示系統,成為信息傳送的重要手段。本文介紹的LED 書寫點陣屏,不但可以像普通顯示屏一樣作為信息輸出設備,而且可以通過光筆直接在LED 顯示屏上進行信息輸入,普通的顯示屏也具有 手寫 的功能了。 1 硬件系統設計 本系統總體框圖如圖1 所示,由鍵盤與顯示模塊、光筆模塊、LED 點陣屏模塊、STM32 控制模塊、電源模塊五部分組成。 圖1 總體方案方框圖 1. 1 核心控制模塊 本系統以STM32F103VCT6 為控制核心。 STM32 是32 位微處理器,具有低功耗,中斷延遲小,高性能等特點。STM3
[單片機]
基于STM32的<font color='red'>LED</font><font color='red'>點陣</font>屏的設計與實現
OLED自定義顯示圖像實驗(基礎->進階)
OLED顯示實驗(8080接口方式) OLED接口說明 讀寫流程簡述 先根據要寫入/讀取的數據的類型,設置 DC 為高(針對數據)/低(針對命令),然后拉低片選(選中 SSD1306芯片),接著我們根據是讀數據,還是要寫數據置 RD/WR為低或者高,如果是寫數據或者寫命令,就在RD的上升沿,使數據/命令鎖存到數據線(D )上;如果是讀數據或者讀狀態,就在WR的上升沿,使狀態/數據所存至數據線(D )上。 SSD1306 的 8080 并口讀寫時序解析 OLED顯存的排列 在單片機的內部建立一個OLED的GRAM(需要128*8 個字節),在每次修改的時候,只是修改單片機上的GRAM(實際上就是 SRAM)
[單片機]
OLED自定義<font color='red'>顯示</font>圖像<font color='red'>實驗</font>(基礎->進階)
STM32f4---OLCD顯示實驗代碼(03)
OLED_Refresh_Gram 函數先設置頁地址,然后寫入列地址(也就是縱坐標),然后從 0 開始寫入 128 個字節,寫滿該頁,最后循環把 8 頁的內容都寫入,就實現了整個從 STM32F4 顯存到OLED 顯存的拷貝。 OLED_Refresh_Gram 函數還用到了一個外部函數,也就是我們接著要介紹的函數:OLED_WR_Byte,該函數直接和硬件相關,函數代碼如下: #if OLED_MODE==1 //通過拼湊的方法向OLED 輸出一個8位數據 //data:要輸出的數據 void OLED_Data_Out(u8 data) { u16 dat=data&0X0F; GPIOC- ODR&=~(0XF 6);/
[單片機]
LED數碼管顯示實驗
1.代碼: #include reg52.h typedef unsigned char u8; typedef unsigned int u16; sbit seg_sel = P1^4; sbit bit_sel = P1^5; #define DATA P0 //code 在程序編譯的時候 當作代買直接 u8 code seg_tab ={ 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e }; u8 code bit_tab ={
[單片機]
<font color='red'>LED</font>數碼管<font color='red'>顯示</font><font color='red'>實驗</font>
PIC入門1,跑馬燈和數碼管顯示實驗
我使用的是愛晶3ePIC實驗板,以下都是自己寫的程序,只是為了紀念和學習交流使用,別無它意。在我的 相冊里有板子的原理圖。 跑馬燈實驗: 程序: //適合3epic實驗板,是跑馬燈程序 #include pic.h unsigned int i; //主函數 main() { TRISD=0X00; //D口為輸出模式,接LED的正極 TRISE=0X00; //E口為輸出輸出模式,LED使能,接LED的負極 while(1) { PORTE=0X00; PORTD=0X01; //點亮第一個LED for(i=0;i 50000;i++); //延時 PORTD=0X02; //點亮第二個LED
[單片機]
8051單片機-軟件復位
ISP_CONTR:ISP/IAP控制寄存器 D7 D6 D5 D4 D3 D2 D1 D0 復位值 ISPEN SWBS SWRST - - WT2 WT1 WT0 000x,0000 SWBS:當設置為0時,軟件復位后從用戶應用程序區啟動;當設置為1時,軟件復位從ISP程序區啟動,。要與SWRST直接配合才可以實現。 SWRST:當設置為0時,不執行軟件復位;當設置為1時,產生軟件系統復位,硬件自動清零。 該復位是整個系統復位,所有的特殊功能寄存器都會復位到初始值,I/O口也會初始化。 【例子】通過按鍵中斷來使MCU軟件復位,復位后閃爍LED燈一段時間,然
[單片機]
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 廉江市| 张家界市| 文昌市| 伊宁市| 喜德县| 建宁县| 安徽省| 当涂县| 于都县| 荆州市| 靖安县| 上饶市| 新蔡县| 盐源县| 黔西县| 兴仁县| 什邡市| 洛川县| 剑川县| 通海县| 贵南县| 郯城县| 夏津县| 沁水县| 仁化县| 东阳市| 巴林右旗| 泸水县| 特克斯县| 碌曲县| 梅河口市| 临安市| 宜春市| 奎屯市| 汉寿县| 台前县| 宝兴县| 原平市| 闸北区| 昔阳县| 治县。|