1. 程式人生 > >LED點陣屏中“鬼影”現象的分析與解決

LED點陣屏中“鬼影”現象的分析與解決

“鬼影”現象是指那些不該點亮的點隨機出現忽明忽暗的現象,產生的原因是在進行行切換時不可能同時完成行選和列選,兩個操作之間一定存在時差,這個時差時間內屏的顯示是錯誤的,這個錯誤的顯示就是鬼影。
進行行選和列選的程式碼如下:
P1 = (P1 & 0xf0) | Row; //行選
LED_PANEL_ST = 0; //列線輸出鎖存資料,上升沿
LED_PANEL_ST = 1;
當把資料送入595鎖存好後,如果先進行行選,再進行列選(將595鎖存的資料輸出),一切正常。但是,如果先將鎖存好的資料輸出,再進行行選,就會出現“鬼影”。
我疑惑的是:應前一種操作方式會出現鬼影,後一種方式不會出現鬼影才對啊。
不對,如果出現鬼影,那兩種方式都應該出現鬼影啊。我理解的兩種方式是過程是這樣的:
1.先行選,再輸出鎖存
先行選,行輸出高電平(LED正極),此時該行會點亮,點亮的是上一行的資料;再輸出鎖存,給鎖存器一個下降沿輸出鎖存資料,此時該行顯示的才是正確的資料,這裡有一小段時間顯示的資料是錯誤的,如果時間非常短則LED來不及發光,錯誤就被糾正了。我認為這個時間是用於產生下降沿的時間:
C語言:
LED_PANEL_ST = 0; //列線輸出鎖存資料,上升沿
LED_PANEL_ST = 1;
彙編:
CLR P3.2
SETB P3.2
2.先輸出鎖存,再進行行選
先輸出鎖存,則上一行會顯示新的資料,此時再進行行選,當行選訊號輸出完成後,上一行熄滅,新行顯示,這裡上一行顯示錯誤資料的時間等於行選訊號輸出的時間:
C語言:
P1 = (P1 & 0xf0) | Row; //行選
彙編:
MOV R0,#0×15 ;0×15地址為變數Row
MOV A,P1
ANL A,#0xF0
ORL A,@R0
Mov P1,A
分析上面兩種方式,不管是先進行行選還是先輸出鎖存,都存在有一小段時間顯示是錯誤的情況,很明顯先輸出鎖存的方式錯誤顯示的時間更長,更容易產生鬼影。
為了驗證上面的分析,如果我在第一種方式中行選操作後加入一個延時,則第一種方式應該出現與第二種方式相似的鬼影現象。
經過試驗,我在第一種方式行選操作後加入5個NOP指令,即出現與第二種方式相似的鬼影現象。

從上述的分析可以看到不論是先行選還是先輸出鎖存都可能出現鬼影,而一般在使用室內屏時不容易看到,因為LED的亮度較低,但在室外屏可能更容易看到。而徹底解決鬼影的辦法是在進行行切換前關閉全屏顯示,在準備好資料和行選後再開啟全屏顯示。程式碼如下:
LED_PANEL_EN = 1; //關閉全屏顯示,消除鬼影
P1 = (P1 & 0xf0) | Row; //行選
LED_PANEL_ST = 0; //列線輸出鎖存資料,上升沿
LED_PANEL_ST = 1;
LED_PANEL_EN = 0; //開啟全屏顯示

相關推薦

LED點陣現象分析解決

“鬼影”現象是指那些不該點亮的點隨機出現忽明忽暗的現象,產生的原因是在進行行切換時不可能同時完成行選和列選,兩個操作之間一定存在時差,這個時差時間內屏的顯示是錯誤的,這個錯誤的顯示就是鬼影。 進行行選和列選的程式碼如下: P1 = (P1 & 0xf0) | Row; //行選 LED_PANEL

tomcat類載入器找不到jar包的類問題分析解決思路

我們忽略了tomcat內部自定義的類載入器只想到了JVM的那幾個載入器,tomcat有個叫webApp的載入器它是先載入WEB-INF/classes後在載入WEB-INF/lib,但它的父載入器是它的common載入器,comon的父載入器是system載入器(和JVM的應用程式載入器功能差不多,不過指定了

08. LED點陣SPI介面控制

內容提示: 編寫自定義函式 變數的作用域 節省“主儲存器”空間的變數設定方式 雙重迴圈 建立自定義函式 函式:一組具有特定功能,並能被重複使用的程式碼 函式的呼叫:函式的名稱,後面的小括號及括號內的引數。

PPPoE認證方式使用者“掛死”現象分析解決策略

近年來,隨著寬頻業務的蓬勃發展,原來用於圈地的包月制計費方式已經不能滿足使用者的要求,寬頻應用管理計費系統的建設已經成為電信運營商迫切的需求。在這種情況下,各省地市電信運營商都將寬頻應用管理計費平臺的建設納入了計劃日程。 筆者在參與運營商寬頻應用管理計費系統建設過程中,發現普遍存在使用者掛死現象,這需要引起

jar包File 文件找不到的異常分析解決

http ont blog except .... 我們 too 格式 結果 源鏈接: http://hxraid.iteye.com/blog/483115#comments 我們常常在代碼中讀取一些資源文件(比如圖片,音樂,文本等等)。在單獨運行的時候這些簡單的處理

AIX Paging Space 使用率過高的分析解決

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

專案管理的需求變更分析解決之道

一、令人煩惱的需求變更 作為一個軟體專案經理,在專案開發進行中,你是否遇到過這樣的問題:客戶的一個電話,就推翻了之前你與客戶、與你自己的開發團隊,經過再三討論而確認定下來的需求。之後你就重新開始了和客戶、和你的開發團隊進入新一輪的需求談論中,甚至是無休止的談論,甚至要重新設

c++ 類重複定義的分析解決辦法

在C++中將類以及類中的成員函式的宣告放在.h的標頭檔案中,而將類中成員函式的定義(即實現程式碼)放在.cpp的原始檔中,這樣我們的程式設計起來更加的模組化,但是,這樣的設計也會帶來一些問題,我們分析以下的程式碼,從中找的問題,並給出問題的解決方法。首先我們在VC下新建一

Java Web常見亂碼問題的分析解決

Java Web中出現亂碼的現象: 第一類:前臺引數傳輸至服務端後亂碼 1. get請求引數中文傳送到伺服器端亂碼 2. post請求引數中文傳送到伺服器亂碼 第二類:服務端響應到達瀏覽器後亂碼 3. 在jsp頁面中,中文顯示亂碼 Java Web中出現的各種編碼: 1

Maven專案在Eclipse的匯入錯誤分析以及解決

引言: Maven專案是非常常見和高效的專案組織形式,但是在我們日常專案中,尤其在匯入其他人專案的過程中,經常碰到若干基於Pom.xml的報錯,本文將針對這個錯誤來做若干分析。1. 問題的提出    最近需要匯入某個專案進入Eclipse,分析其原始碼;在匯入Eclipse之

C#異常:“The type initializer to throw an exception(型別初始值設定項引發異常)”的簡單分析解決方法

對於C#中異常:“The type initializer to throw an exception(型別初始值設定項引發異常)”的簡單分析,目前本人分析兩種情況,如下: 情況一: 其實麒麟.NET的這篇文章主要講解分析了靜態成員的方面,總的說就是:型別初始化或訪問

Spark 2.0 DataFrame map操作Unable to find encoder for type stored in a Dataset.問題的分析解決

隨著新版本的spark已經逐漸穩定,最近擬將原有框架升級到spark 2.0。還是比較興奮的,特別是SQL的速度真的快了許多。。 然而,在其中一個操作時卻卡住了。主要是dataframe.map操作,這個之前在spark 1.X是可以執行的,然而在spark 2.0上卻無

Java程式設計漢字問題的分析解決

引:在基於Java語言的程式設計中,我們經常碰到漢字的處理及顯示的問題。一大堆看不懂的亂碼肯定不是我們願意看到的顯示效果,怎樣才能夠讓那些漢字正確顯示呢?Java語言預設的編碼方式是UNICODE,而我們中國人通常使用的檔案和資料庫都   在基於java語言的程式設計中,我們

006---粘包現象分析以及解決粘包問題

size 字節流 inpu 問題 字節數 con sub while 丟失 粘包 什麽是粘包? 須知:只有TCP有粘包現象、UDP永遠不會粘包。 socket收發消息的原理 模擬ssh遠程執行的命令 # 服務端 import subprocess, socket sk

啟動VIP報CRS-1028/CRS-0223致使VIP狀態為UNKNOWN故障分析解決

ssi host article 3.6 handle 性能優化 roc ng- 應用程序 CRS版本號為10.2.0.4 1、VIP State為UNKNOWN [[email protected]/* */ ~]# crs_stat -t

Java內部類持有外部類的引用詳細分析解決方案

調用 lai urn star keyword inner android get sta 在Java中內部類的定義與使用一般為成員內部類與匿名內部類,他們的對象都會隱式持有外部類對象的引用,影響外部類對象的回收。 GC只會回收沒有被引用或者根集不可到達的對象(取決於GC算

分布式系統互斥性冪等性問題的分析解決

解決沖突 ldr 隊列 reads failure 是的 最大 循環鏈表 成員變量 前言 隨著互聯網信息技術的飛速發展,數據量不斷增大,業務邏輯也日趨復雜,對系統的高並發訪問、海量數據處理的場景也越來越多。如何用較低成本實現系統的高可用、易伸縮、可擴展等目標就顯得越發重要。

CAN總線錯誤分析解決

[1] specified ace over 成功 keyword 回收 狀態轉換 article 背景 寫這篇文章是因為我看到網上介紹CAN總線錯誤處理的文章,清一色的都是生搬照抄教科書或是數據文檔的內容,特別是國內很難找到一些有價值的內容,這讓一些真正有需要的人

JS浮點計算精度問題分析解決

href 動態控制 hub 截斷 max fix math floating 方案 問題描述 在JS計算四則運算時會遇到精度丟失的問題,會引起諸多問題,看看以下例子: 例如:在chrome控制臺輸入 0.1 + 0.7 輸出結果是 0.7999999999999999 例如

Android開發之漫漫長途 番外篇——內存泄漏分析解決

set 程序 靜態 內存 ins clas back undle 介紹 該文章是一個系列文章,是本人在Android開發的漫漫長途上的一點感想和記錄,我會盡量按照先易後難的順序進行編寫該系列。該系列引用了《Android開發藝術探索》以及《深入理解Android 卷Ⅰ,Ⅱ,