單片機源程序如下:
- /*************************************************************
- 旋轉LED立體顯示字體測試程序 中斷標志位方式 去除盲點
- 程序編寫:Fucp
- 單片機 STC89C52 或者其他51
- 字模軟件用 PC2002
- 逐列取模方式
- 電機旋轉方向 逆時針
- /***********************************************************
- 說明:
- 硬件介紹:用單片機的16個IO口獨立驅動LED燈
- 無線供電方式給旋轉主板供電以及性能較好的RF370電機帶動旋轉,在5V供電下 顯示的效果非常好.電機速度也夠快
- 夠安靜.
- 看程序前請看下原理圖,根據原理圖來理解比較容易!
- 程序用中斷判斷紅外起點的方法開始顯示 每轉一圈,列數往后移動一列
- 顯示完指定的字數后循環 此種方式在中斷中放起點標志位。在顯示一圈的過程中
- 如果沒有顯示完一圈數據中斷又來了,會立即跳出,可實現盲點很小的顯示
- 感覺一個圓都能顯示字
- 字幕配置方法 見初級程序中的說明
- *************************************************************/
- #include "NEW_8051.H"
- #include "task.h"
- #include <stddef.h>
-
- bit BIT_timeout=0;
- uint i=0,j=0;
- #define ucNumRows 176 //定義一周顯示字個數 一個字16列 160/16=10個字
- /*********延時子程序**********/
- /*****n(us)延時子程序*****/
- void DelayUs(uint N)
- {
- uint x ;
- for(x=0;x<=N;x++);
- }
- /*********中斷子程序**********/
- void int0() interrupt 0 //使用外部中斷0
- {
- BIT_timeout=1; //起點標志位
- }
- /********************************/
- void start(void)
- {
- P1=0XFF;
- P2=0XFF;
-
-
- }
- /***************************************/
- void OS_ALLRun(void)
- {
- if(BIT_timeout) //起點判斷
- {
- BIT_timeout=0; //清零
-
- j++;
- if( j>1920 )//顯示完文字后 循環; j=16*需要顯示的字數 這里大概有120個字符 所以120*16=1920
- {
- j=0 ;
- }
- for(i=j;i<ucNumRows+j;i++) //立體顯示176列 數據 176/16=11個字
- {
-
- P1=zimo[i*2]; //送數據低位顯示
- P2=zimo[i*2+1];//送數據高位顯示
-
- DelayUs(15);
- P1=P2=0XFF;
- if(BIT_timeout)//這里如果沒有顯示完一圈的數據 回到起點了
- //直接跳出 就不會出現頭吃尾的現象 而且盲點很小
- {
- return;
- }
- }
-
- }
- }
復制代碼
所有資料51hei提供下載:
十字旋轉LED.7z
(2.76 MB, 下載次數: 27)
2019-10-5 15:56 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|