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

歷史上的今天

今天是:2025年03月14日(星期五)

2020年03月14日 | 使用51單片機實現點陣漢字平滑滾動顯示

發布者:電子設計藝術家 來源: eefocus關鍵字:51單片機  點陣  漢字  平滑滾動顯示 手機看文章 掃描二維碼
隨時隨地手機看文章

#說明:采用的芯片是89C51,LED點陣屏的規格是16*16,同時使用了兩個74HC595芯片,字模生成軟件在文末有網盤鏈接。


1 連接原理圖

在這里插入圖片描述

整體的電路連接如上圖所示,單片機只需要使用三個IO接口,就可以實現對點陣屏的控制。當然對于不同的單片機而言連線是不同的,但是使用74HC595擴展的原理是相同的,在這里不再對于其IO擴展原理進行探究。


2 實現的功能

51單片機以及C語言的環境下,實現LED點陣屏幕上漢字的平滑滾動,就像是公交車上顯示“前方到站第二醫院,下車乘客請提前做好準備”一樣。我們最后顯示的是“計算機測控技術”幾個字,當然顯示的漢字內容是自定義的。同時,設置一個按鈕能夠讓平滑滾動的漢字可以隨時停下來。

在這里插入圖片描述

這里有兩點細節需要注意一下:

1、漢字循環到最后一個時,要繼續滾動出第一個漢字,而不是跳變到開頭重新循環。

2、漢字滾動的時候按下按鈕停止,滾動停止的時候按下按鈕繼續滾動,使用同一個按鈕。


3 C語言程序實現

3.1 定義變量

在這里我們定義芯片P3.4、P3.5、P3.6 三個接口為輸出IO接口,P2.7為接開關控制的IO接口。同時定義一個大數組儲存所有漢字對應的取模16進制碼,一個小數組用于表示現在屏幕上所需顯示的漢字。


#include

#include


typedef unsigned int u16; //常規無符號字符串和整數定義   

typedef unsigned char u8;

//將595的三個內置接口賦給新的名字

sbit SRCLK = P3 ^ 6; // 數據輸入口(串)

sbit RCLK = P3 ^ 5; // 移位寄存器時鐘

sbit SER = P3 ^ 4; // 存儲寄存器時鐘

sbit stopscreen = P2^7; //暫停與開始開關定義引腳


/*定義一個數組存儲所有需要平滑滾動的文字的16進制碼,由取模軟件自動生成,

每個字由32個16進制數字組合而成,現在數組中存儲的是“計算機測控技術”*/

u8 code word[] = {

/*--  文字:  計  --*/

0x00, 0x02, 0x04, 0x02, 0x08, 0x02, 0x08, 0x02, 0x00, 0x02, 0x00, 0x02, 0xEF, 0x7F, 0x08, 0x02,

0x08, 0x02, 0x08, 0x02, 0x08, 0x02, 0x08, 0x02, 0x28, 0x02, 0x18, 0x02, 0x08, 0x02, 0x00, 0x02,


/*--  文字:  算  --*/

0x04, 0x02, 0x7C, 0x7E, 0x12, 0x09, 0x01, 0x00, 0xFC, 0x1F, 0x04, 0x10, 0xFC, 0x1F, 0x04, 0x10,

0xFC, 0x1F, 0x04, 0x10, 0xFC, 0x1F, 0x10, 0x04, 0xFF, 0x7F, 0x10, 0x04, 0x08, 0x04, 0x04, 0x04,


/*--  文字:  機  --*/

0x08, 0x00, 0x88, 0x0F, 0x88, 0x08, 0x88, 0x08, 0xBF, 0x08, 0x88, 0x08, 0x8C, 0x08, 0x9C, 0x08,

0xAA, 0x08, 0xAA, 0x08, 0x89, 0x08, 0x88, 0x48, 0x88, 0x48, 0x48, 0x48, 0x48, 0x70, 0x28, 0x00,


/*--  文字:  測  --*/

0x00, 0x20, 0xE4, 0x23, 0x28, 0x22, 0x28, 0x2A, 0xA1, 0x2A, 0xA2, 0x2A, 0xA2, 0x2A, 0xA8, 0x2A,

0xA8, 0x2A, 0xA4, 0x2A, 0xA7, 0x2A, 0x84, 0x20, 0x44, 0x21, 0x44, 0x22, 0x24, 0x28, 0x10, 0x10,


/*--  文字:  控  --*/

0x08, 0x02, 0x08, 0x04, 0x08, 0x04, 0xC8, 0x7F, 0x5F, 0x40, 0x28, 0x29, 0x88, 0x10, 0x58, 0x20,

0x0C, 0x00, 0x8B, 0x3F, 0x08, 0x04, 0x08, 0x04, 0x08, 0x04, 0x08, 0x04, 0xEA, 0x7F, 0x04, 0x00,


/*--  文字:  技  --*/

0x08, 0x04, 0x08, 0x04, 0x08, 0x04, 0xC8, 0x7F, 0x3F, 0x04, 0x08, 0x04, 0x08, 0x04, 0xA8, 0x3F,

0x18, 0x21, 0x0C, 0x11, 0x0B, 0x12, 0x08, 0x0A, 0x08, 0x04, 0x08, 0x0A, 0x8A, 0x11, 0x64, 0x60,


/*--  文字:  術  --*/

0x80, 0x00, 0x80, 0x04, 0x80, 0x08, 0x80, 0x08, 0xFE, 0x3F, 0xC0, 0x01, 0xA0, 0x02, 0xA0, 0x02,

0x90, 0x04, 0x88, 0x08, 0x84, 0x10, 0x82, 0x20, 0x81, 0x40, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00};

//下面一個用于存儲每一時刻點陣屏顯示內容的數字,隨著時間會不斷重新賦值與變化

u8 now[32] = {

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };


3.2 點陣顯示函數

由于使用595進行了接口擴展,首先編寫行顯示函數LED_line,接著再編寫漢字顯示函數LED_array,>>和<<這兩個符號是二進制移位符號。


void delay(u16 i)    //延時函數,很普通

{

while (i--);

}

//行顯示函數: LED_line (字節1 1 ,字節2 2 ,行號)

void LED_line(u8 ledata1, u8 ledata2, u8 line_num)

{

u8 b_num, i;

u8 REG595[4]; // 發送到595的四個字節。

REG595[0] = ledata2; REG595[1] = ledata1;

if (line_num<8) {

REG595[2] = 0;

REG595[3] = 0x01 << line_num;

}

else {

REG595[2] = 0x01 << (line_num - 8);

REG595[3] = 0;

}

SRCLK = 1; // 移位準備

RCLK = 1; //輸出準備

for (b_num = 0; b_num<4; b_num++) {   // 向595發送四個字節

for (i = 0; i<8; i++) {    //發送8位數

SER = REG595[b_num] >> 7; //從最高位開始發送

REG595[b_num] <<= 1;

SRCLK = 0;

SRCLK = 1;   //移位寄存器時序,低電平準備,高電平有效

}

}

RCLK = 0; // 存儲寄存器時序,低電平準備,高電平有效,四個字節同時發出

RCLK = 1;

}


void LED_array(u8 word[], u16 t_delay) //漢字顯示函數

{

u8 i;

while (t_delay--) {

for (i = 0; i<16; i++) { // 逐行顯示

LED_line(~word[i * 2], ~word[i * 2 + 1], i);

}

}

}


3.3 平滑滾動

通過上面的內容,我們只要調用LED_array函數,正確傳參后就可以在LED點陣屏上顯示我們想要顯示的內容了。實現平滑滾動才是本文的關鍵,主函數的算法流程圖如下所示:

在這里插入圖片描述

總的來說,就是使用小數組(now)在大數組(word)中一步步移動的方法,在算法與數據結構里,我們往往把這種方法叫做滑動窗口法。在漢字取模軟件中生成的16進制數,每兩個一組代表LED點陣上的一行燈的亮滅。這也不難理解,因為一行是16個LED燈,一個兩位16進制數剛好可以表示8個2進制數,所以兩個兩位16進制數控制一行。因此,我們滑動窗口每次移動2個兩位16進制數。


void main()    //主函數

{

u16 i, j;

for(j=0;;j++){    //在這里不使用while循環是因為while循環顯示輸出不穩定

//每次賦給now的值都后移兩位,顯示出來就是點陣一行行地變化

for (i=0;i<32;i++){ //對now中32個位置,每個位置都賦值

/*將需要實時顯示的內容放到實時數組now中去,同時使用對數組最大數224取余實現循環平滑滾動*/

now[i] = word[(i+(2*j))%224];

}

LED_array(now, 10); //調用漢字顯示函數,依次顯示now中內容

delay(300);   //延遲后進行下一循環

if(stopscreen==0){ //按鍵防抖設計

delay(50);

if(stopscreen==0){

while(1){ //按第一下開關停止平滑滾動

LED_array(now, 10);

if(stopscreen==0){ //按鍵防抖設計

delay(50);

if(stopscreen==0){

break;   //按第二下開關繼續平滑滾動

}

}

}

}

}

}

}


4 總結

清楚了LED點陣屏顯示的原理,我們可以設計LED點陣屏的多種顯示方式,甚至可以做出動畫片、游戲等。

字模生成軟件百度云:鏈接:https://pan.baidu.com/s/1OwK_L_aDjWas5LF_MuULmQ

提取碼:idov

關鍵字:51單片機  點陣  漢字  平滑滾動顯示 引用地址:使用51單片機實現點陣漢字平滑滾動顯示

上一篇:51單片機基于Proteus的8X8點陣滾動顯示心形
下一篇:51單片機LED點陣顯示文字

推薦閱讀

3月12日,榮耀在北京舉行2018年春節后的首場國內手機發布會,推出了極具性價比的榮耀暢玩7C手機。人臉識別、全面屏、后置雙攝等一系列旗艦機的功能傍身,加之不足千元的價位使得榮耀7C甫一問世便帶上了市場競爭力的標簽,也被視為攪動市場格局之作。發布會上,榮耀總裁趙明將2018年定義為"乘風破浪、揚帆遠航"之年。在一步一個腳印,取得中國互聯網手機品...
全球連接與傳感領域領軍企業TE Connectivity (TE)最新推出的M8/M12 線束是注塑到電線組件的 M8/M12 圓形連接器,以安全可靠的方式確保工業應用中的通信。與安裝傳感器和執行器的單獨電纜和連接器相比,它們提供了一種即插即用的解決方案,可以實現多功能系統的快速輕松創建。與連接器結構一樣,M8/M12 注塑線束的范圍根據應用需求,通過廣泛的護套電...
在ARM體系中通常有以下3種方式控制程序的執行流程:在正常程序執行過程中,每執行一條ARM指令,程序計數器寄存器(PC)的值加4個字節;每執行一條Thumb指令,程序計數器寄存器(PC)的值加兩個字節。整個過程是順序執行。通過跳轉指令,程序可以跳轉到特定的地址標志處執行,或者跳轉到特定的子程序處執行。其中,B指令用于執行跳轉操作;BL指令在執行跳轉動作...
01 高比能技術寧德時代電池系統能量密度可達到215wh/kg,這是因為寧德時代采用了CTP技術、高鎳技術、高電壓技術、超薄基材等技術。CTP技術:通過簡化模組結構,使得電池包體積利用率提15%~20%,零部件數量減少40%,生產效率提升50%。高鎳技術:高鎳811領先體系,配合業界首創的納米鉚釘技術,在電芯層面進行結構加固防護,大幅度提升能量密度,有效兼顧高...

史海拾趣

問答坊 | AI 解惑

80年后的女生們最喜歡的十款車型

MINI 甲克蟲 奧迪A5 奔馳SMARTE 雨燕 飛度 菲亞特500 QQ 威姿 標志206…

查看全部問答∨

超聲波測距學習板套件的完整原理圖

賽先生科技(www.schoolboy.com.cn)原創的超聲波學習板套件之原理圖,詳情可以登陸該網站。…

查看全部問答∨

ccs有沒有函數感應功能,就像VC那樣?

ccs有沒有函數感應功能,就像VC那樣?…

查看全部問答∨

大家幫忙給看一個單片機程序哪出錯了 4*4鍵盤+lcd1602

我做的程序的一部分是 從液晶屏顯示鍵盤輸入  寫完之后發現運行總是出錯不管摁一下什么總是顯示很多0 但如果一步一步調試的話顯示正確 自己看不出來哪錯了 大家幫忙給看一下吧 程序如下: key.c #include "key.h" #include "SPC ...…

查看全部問答∨

wince 5中IE不能下載大文件?

好像IE把windows目錄設置為cache了,下載大的mp3/rar文件出現空間不足。其實我外部有SD卡 修改了registry,設置cache為外部,還是不行 …

查看全部問答∨

CD4098消抖電路

現在需要用cd4098——雙單穩態觸發器搭建一個鍵盤消抖電路,以前一直是軟件消抖的,這個芯片不太會用,望高手賜教!…

查看全部問答∨

關于WINCE MEDIPLAYER的問題--在線等

本人第1次用CE。。。。 剛裝好platform builder時。馬上Build了一個NK。BIn 放在目標機上可以好好的運行。目標機上的media player可以打開windows media server編碼出來的WMV9的MMS流。 后來我更改了一些東西。。。再BUILd就打不能MMS流了。。連 ...…

查看全部問答∨

IO口中斷的奇怪問題

本人用F412做儀表,設置一個按鍵P16來關機,關機后進入LPM4,同時設定IO口中斷,結果發現進入休眠以后P1IE莫名其妙地被清零,硬件仿真的時候讀出來的P1IE為0,從而導致不能再次開機,修改內存把它改為0x40(BIT6)后才能進入中斷喚醒,再次進入休眠 ...…

查看全部問答∨

eZ430-RF2500體驗之前奏

  今天上午剛剛收到eZ430-RF2500,上傳幾張照片,作為一個紀念,另外謝謝寄給我東西的那位同學的精心包裝,什么話都不說,先上圖,呵呵…

查看全部問答∨

2011年全國電子設計大賽基本儀器和主要元器件清單

本帖最后由 paulhyde 于 2014-9-15 09:47 編輯 、基本儀器清單 20MHz普通示波器(雙通道,外觸發輸入,有X軸輸入) 60MHz雙通道數字示波器 低頻信號發生器(1Hz~1MHz) 標準高頻信號發生器(1MHz~30MHz,可輸出1mV小信號) 函數發生器(10 M ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

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

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

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 林周县| 武陟县| 惠水县| 芷江| 平潭县| 和政县| 成武县| 东乌珠穆沁旗| 手机| 浦县| 福贡县| 西城区| 漳州市| 潞城市| 漳浦县| 苏州市| 周至县| 东至县| 醴陵市| 宣汉县| 蓬溪县| 盈江县| 永仁县| 新宁县| 洪江市| 扶沟县| 罗田县| 湘乡市| 进贤县| 阳曲县| 抚宁县| 家居| 同德县| 仲巴县| 秦安县| 贞丰县| 罗定市| 乳山市| 长兴县| 鄱阳县| 黑河市|