本帖最后由 405616736 于 2020-5-25 23:06 編輯
使用8塊8*8雙色點陣拼接成32*16點陣屏,使用74HC595驅動點陣,STC12C5A60S2單片機。自己寫了一個左移的程序,現分享出來。
綠色顯示
點陣層走線
單片機和595
單片機和595走線
PCB圖
程序摘要
單片機源程序如下:
- /************************************************
- 設計名詞:32*16雙色點陣
- 設計時間:2020年5月24日
- 硬件信息:8個8*8雙色共陽點陣
- 1個STC12C5A60S2單片機
- 8個74HC595
- *************************************************/
- #include <STC12C5A60S2.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
- #include <intrins.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
- /************************************************
- 數據定義
- *************************************************/
- unsigned char colour=1; //0x01代表紅色,0x02代表綠色,0x03代表紅&綠色
- unsigned int word=1; //數據位指針
- unsigned int word_temp1=0; //高八位數據暫存
- unsigned int word_temp2=0; //低八位數據暫存
- unsigned char column=1; //列數,最大數32
- unsigned char divisor=1; //列數除8的商,用于控制第幾塊點陣
- unsigned char remainder=1; //列數除8的余數,用于輸出點陣中的第幾行
- unsigned int section=0x00; //數據分段輸出控制位
- char time=5; //走字速度,可修改
- char time_temp=0; //走字速度暫存
- /************************************************
- 數組
- *************************************************/
- unsigned char segout[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,}; //列掃描數組
- unsigned char code tab[]=
- {
- 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,
- 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,//空白位置
- /*以下文字添加開始*/
- 0x00,0x00,0x0C,0x18,0x10,0x04,0x10,0x84,0x10,0x84,0x11,0x44,0x0E,0x38,//3
- 0x00,0x00,0x00,0x00,//空白位置
- 0x0E,0x0C,0x10,0x14,0x10,0x24,0x10,0x44,0x10,0x84,0x0F,0x0C,//2
- 0x00,0x00,0x00,0x00,//空白位置
- 0x10,0x10,0x08,0x20,0x04,0x40,0x02,0x80,0x01,0x00,0x02,0x80,0x04,0x40,0x08,0x20,0x10,0x10,//×
- 0x00,0x00,0x00,0x00,//空白位置
- 0x08,0x04,0x08,0x04,0x1F,0xFC,0x00,0x04,0x00,0x04,//1
- 0x00,0x00,0x00,0x00,//空白位置
- 0x07,0xF0,0x08,0x88,0x11,0x04,0x11,0x04,0x09,0x04,0x00,0xF8,//6
- 0x00,0x00,0x00,0x00,//空白位置
- 0x20,0x02,0x2C,0x0C,0x23,0x30,0x20,0xC0,0x23,0x30,0x3C,0x0C,0x00,0x01,0x20,0x02,0x3F,0x04,0x20,0xC8,0x20,0x30,0x20,0xC8,0x23,0x04,0x3C,0x02,0x00,0x01,//雙
- 0x00,0x00,0x00,0x00,//空白位置
- 0x04,0x00,0x08,0x00,0x17,0xFC,0x24,0x42,0xE4,0x42,0x24,0x42,0x24,0x42,0x27,0xC2,0x24,0x42,0x2C,0x42,0x34,0x42,0x04,0x42,0x07,0xC2,0x00,0x02,0x00,0x1E,//色
- 0x00,0x00,0x00,0x00,//空白位置
- 0x00,0x01,0x00,0x02,0x03,0xEC,0x02,0x20,0x02,0x20,0x02,0x28,0xFE,0x26,0x12,0x20,0x12,0x28,0x12,0x26,0x12,0x20,0x13,0xE0,0x10,0x08,0x10,0x07,//點
- 0x00,0x00,0x00,0x00,//空白位置
- 0x7F,0xFF,0x40,0x10,0x44,0x08,0x5B,0x10,0x60,0xE0,0x10,0x10,0x13,0x10,0x1D,0x10,0xF1,0x10,0x17,0xFF,0x11,0x10,0x11,0x10,0x11,0x10,0x10,0x10,//陣
- 0x00,0x00,0x00,0x00,//空白位置
- 0x08,0x20,0x06,0x20,0x40,0x7E,0x31,0x80,0x00,0x01,0x7F,0xE2,0x40,0x0C,0x4F,0xF0,0x40,0x08,0x7F,0xE4,0x00,0x00,0x1F,0xE2,0x00,0x01,0xFF,0xFE,//測
- 0x00,0x00,0x00,0x00,//空白位置
- 0x02,0x00,0x02,0x00,0x42,0x00,0x33,0xFC,0x00,0x08,0x09,0x14,0x09,0x06,0x09,0xFC,0x09,0x08,0x09,0x08,0xFF,0x80,0x08,0x70,0x88,0x0C,0x68,0x02,0x08,0x0F,//試
- 0x00,0x00,0x00,0x00,//空白位置
- 0x24,0x10,0x24,0x60,0x25,0x80,0x7F,0xFF,0xC4,0x80,0x44,0x60,0x00,0x02,0x7C,0x92,0x44,0x92,0x44,0x92,0x44,0xFE,0x44,0x92,0x44,0x92,0x7C,0x92,0x00,0x82,//程
- 0x00,0x00,0x00,0x00,//空白位置
- 0x00,0x02,0x00,0x0C,0x3F,0xF0,0x20,0x00,0x20,0x80,0x20,0x80,0x28,0x80,0xA8,0x82,0x6A,0x81,0x29,0xFE,0x2A,0x80,0x2C,0x80,0x28,0x80,0x20,0xA0,0x20,0xC0,//序
- 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,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,0x00,0x00,0x00,0x00,//空白位置
- 0xBB,//結束碼
- };
- /*************************************************
- 硬件端口定義,按硬件修改
- *************************************************/
- sbit SER_GREEN=P2^0; //DS 第14腳 串行數據輸入
- sbit SRCLK_GREEN=P2^1; //SH_CP 第11腳 數據輸入時鐘線
- sbit SER_RED=P2^2; //DS 第14腳 串行數據輸入
- sbit SRCLK_RED=P2^3; //SH_CP 第11腳 數據輸入時鐘線
- sbit SER_COLUMN=P2^4; //DS 第14腳 串行數據輸入
- sbit SRCLK_COLUMN=P2^5; //SH_CP 第11腳 數據輸入時鐘線
- sbit LATCH=P2^6; //ST_CP 第12腳 輸出存儲器鎖存時鐘線
- sbit OE=P2^7; //OE 第13腳 輸出有效,低電平有效
- /*************************************************
- 延時程序,1T模式單片機延時1ms,12MHZ
- *************************************************/
- void DelayXus(unsigned char n)
- {
- while (n--)
- {
- _nop_();
- _nop_();
- }
- }
- /*************************************************
- 發送綠色字節程序
- *************************************************/
- void SendByte_Green(unsigned char dat) //低電平有效
- {
- unsigned char i;
- for(i=1;i<=8;i++)
- {
- dat<<=1; //即dat=dat<<1;,將dat變量左移1位后的值賦給dat,結果會改變dat變量的值
- SER_GREEN=CY; //CY:進位標志
- SRCLK_GREEN=0; //數據輸入時鐘線置0
- _nop_(); //空指令
- _nop_(); //空指令
- SRCLK_GREEN=1; //數據輸入時鐘線置1,給上升沿
- }
- }
- /*************************************************
- 發送紅色字節程序
- *************************************************/
- void SendByte_Red(unsigned char dat) //低電平有效
- {
- unsigned char i;
- for(i=1;i<=8;i++)
- {
- dat<<=1; //即dat=dat<<1;,將dat變量左移1位后的值賦給dat,結果會改變dat變量的值
- SER_RED=CY; //CY:進位標志
- SRCLK_RED=0; //數據輸入時鐘線置0
- _nop_(); //空指令
- _nop_(); //空指令
- SRCLK_RED=1; //數據輸入時鐘線置1,給上升沿
- }
- }
復制代碼
以上程序51hei提供打包下載:
C.zip
(2.8 KB, 下載次數: 18)
2020-5-25 18:57 上傳
點擊文件名下載附件
左移走字程序
|