上次炫了一下七彩旋轉LED后,沒有及時的上次資料,這里補上
LED.jpg (1.08 MB, 下載次數: 370)
下載附件
2014-6-27 00:19 上傳
散件資料.rar
(2.44 MB, 下載次數: 5173)
2014-6-27 00:21 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
參考程序.rar
(19.75 KB, 下載次數: 130)
2016-11-15 12:26 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
企鵝 1556546395
主程序:
- /*************************************************************************
- ** 程序名稱: ZA1LA3-R3旋轉LED紅外遙控旋轉LED柱面顯示遙控碼
- ** 功能描述:顯示紅色led走字模式,,遙控改變文字效果 學習遙控以及595串口的使用
- ** 作 者: yyl
- ** 日 期: 2014-4-1
- 單片機芯片 STC15F2Kxxxx 或者其他51 選用內部晶振頻率11.0592MHz
- 字模軟件用 PC2002
- **------------------------------------------------------------------------------------------------------
- ** 修 改 人:
- ** 日 期:
- **------------------------------------------------------------------------------------------------------
- ***************************************************************************/
- /*****************************************************
- 說明:
- 用595擴充單片機的IO口,每個595有8位兩個串起來就是16位,
- 剛好一列,此程序的595是低位在前,所以發送數據需要先送低位
- 采用無線供電方式電流可達500MA,足夠使用(當顯示白色的時候
- 電流最大,將近200ma)。以及12560電機,在12V電源下 顯示的效果
- 非常好.電機速度快且安靜.
- 調試學習程序前請務必看一下原理圖,根據原理圖來理解比較容易!
- 程序用判斷紅外起點的方法開始顯示 每轉一圈,列數往后移動一列
- 顯示完指定的字數后循環 此種弊端是沒用中斷,一圈的開始后必須要顯示完
- 指定的列數才能退出,如果電機速度太快會造成頭吃尾的后果,后面會介紹避免
- 頭吃尾的方法,讓整一圈都能顯示字 盲點很小。
- 學習知識:
- 只為簡單的理解顯示的原理,利用人眼視覺暫存,用電機旋轉做列掃描,
- 每送一列數據延時 再送下一列數據,原理比較簡單,跟點陣顯示差不多。
- /***************************************************/
- #include "rotatingled.h"
- uchar i=0,j=0;
- uchar Buff[192]=0xff;
- /*********************************************************************************************************
- ** 函數名稱: main
- ** 功能描述: 主函數,用戶程序從這里執行
- ** 輸 入: 無
- ** 輸 出: 無
- ** 全局變量: 無
- ** 調用模塊:
- **
- ** 作 者:yyl
- ** 日 期: 20140321
- **-------------------------------------------------------------------------------------------------------
- ** 修 改 人:
- ** 日 期:
- **------------------------------------------------------------------------------------------------------
- ********************************************************************************************************/
- void main(void)
- {
- EA = 1; //總中斷
- IT0 = 1; //外部中斷為邊沿觸發
- EX0 = 1; //允許外部中斷
- IT1 = 1; //外部中斷為邊沿觸發
- EX1 = 1; //允許外部中斷
- /****************定時器1初始化****************///160微秒@22.1184MHz
- AUXR |= 0x40; //定時器時鐘1T模式
- TMOD &= 0x0F; //設置定時器模式
- TL1 = 0x92; //設置定時初值
- TH1 = 0xF1; //設置定時初值
- TF1 = 0; //清除TF1標志
- TR1 = 1; //定時器1開始計時
- ET1 =1;
- memcpy(Buff,txt1,160);//顯示俊元電子0x
- OE=0;
- i=key_code>>4;
- memcpy(&Buff[160],&txt2[i*16],16);//顯示紅外碼值高位
- i=key_code&0x0f;
- memcpy(&Buff[176],&txt2[i*16],16);//顯示紅外碼值低位
-
- while(1)
- { if( new_code )
- { new_code=0;
- i=key_code>>4;
- memcpy(&Buff[160],&txt2[i*16],16);//顯示紅外碼值高位
- i=key_code&0x0f;
- memcpy(&Buff[176],&txt2[i*16],16);//顯示紅外碼值低位
- }
-
-
- if(IRFLAG)
- {
- IRFLAG=0;
-
- for(i=0;i<96;i++)
- {
- Write595 (Buff[i*2+1]);
- Write595 (Buff[i*2]);
- RCLK=0;
- Delay1us();
- RCLK=1; //上升沿把8位數據并行輸出
- Delay100us();//延時讓LED亮起來 每列延時的時間
- Write595(0xff); //送高電平關閉顯示
- Write595(0xff);
- RCLK=0;
- Delay1us();
- RCLK=1;
-
- }
- }
- }
- }
復制代碼
|