|
代碼:
- /**************************************************************************************
- * LED點(diǎn)陣--顯示漢字實(shí)驗(yàn) *
- 實(shí)現(xiàn)現(xiàn)象:下載程序后,按照光盤(pán)內(nèi)操作視頻接線(xiàn),LED點(diǎn)陣顯示漢字
-
- 注意事項(xiàng):必須將74HC595模塊的JP595短接片短接,否則不會(huì)出現(xiàn)現(xiàn)象
- ***************************************************************************************/
- #include "reg51.h" //此文件中定義了單片機(jī)的一些特殊功能寄存器
- #include "intrins.h"
- typedef unsigned int u16; //對(duì)數(shù)據(jù)類(lèi)型進(jìn)行聲明定義
- typedef unsigned char u8;
- //--定義使用的IO口--//
- sbit SRCLK=P3^6;
- sbit RCLK=P3^5;
- sbit SER=P3^4;
- //定義LED點(diǎn)陣的位選,也就是類(lèi)似于數(shù)碼管的位選,因?yàn)橐獙?duì)其動(dòng)態(tài)掃描操作
- //數(shù)組前16位和后16位數(shù)據(jù)正好是相反的,也就是說(shuō)先讓第3個(gè)595輸出低電平,然后再讓第4個(gè)595輸出低電平
- u8 code ledwei[]=
- {
- 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
- };
- u8 code ledduan1[]=
- {
- /*-- 文字: 普 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
- 0x40,0x44,0x54,0x64,0x45,0x7E,0x44,0x44,0x44,0x7E,0x45,0x64,0x54,0x44,0x40,0x00,
- 0x00,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,0x00,
- };
- u8 code ledduan2[]=
- {
- /*-- 文字: 中 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
- 0x00,0x00,0xF0,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0xF0,0x00,0x00,0x00,
- 0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x0F,0x00,0x00,0x00,
- };
- /*******************************************************************************
- * 函 數(shù) 名 : delay
- * 函數(shù)功能 : 延時(shí)函數(shù),i=1時(shí),大約延時(shí)10us
- *******************************************************************************/
- void delay(u16 i)
- {
- while(i--);
- }
- /*******************************************************************************
- * 函 數(shù) 名 : Hc595SendByte(u8 dat1,u8 dat2,u8 dat3,u8 dat4)
- * 函數(shù)功能 : 通過(guò)595發(fā)送四個(gè)字節(jié)的數(shù)據(jù)
- * 輸 入 : dat1:第4個(gè)595輸出數(shù)值
- * * dat2: 第3個(gè)595輸出數(shù)值
- * * dat3:第2個(gè)595輸出數(shù)值
- * * dat4:第1個(gè)595輸出數(shù)值
- * 輸 出 : 無(wú)
- *******************************************************************************/
- void Hc595SendByte(u8 dat1,u8 dat2,u8 dat3,u8 dat4)
- {
- u8 a;
- SRCLK = 1;
- RCLK = 1;
- for(a=0;a<8;a++) //發(fā)送8位數(shù)
- {
- SER = dat1 >> 7; //從最高位開(kāi)始發(fā)送
- dat1 <<= 1;
- SRCLK = 0; //發(fā)送時(shí)序
- _nop_();
- _nop_();
- SRCLK = 1;
- }
- for(a=0;a<8;a++) //發(fā)送8位數(shù)
- {
- SER = dat2 >> 7; //從最高位開(kāi)始發(fā)送
- dat2 <<= 1;
- SRCLK = 0; //發(fā)送時(shí)序
- _nop_();
- _nop_();
- SRCLK = 1;
- }
- for(a=0;a<8;a++) //發(fā)送8位數(shù)
- {
- SER = dat3 >> 7; //從最高位開(kāi)始發(fā)送
- dat3 <<= 1;
- SRCLK = 0; //發(fā)送時(shí)序
- _nop_();
- _nop_();
- SRCLK = 1;
- }
- for(a=0;a<8;a++) //發(fā)送8位數(shù)
- {
- SER = dat4 >> 7; //從最高位開(kāi)始發(fā)送
- dat4 <<= 1;
- SRCLK = 0; //發(fā)送時(shí)序
- _nop_();
- _nop_();
- SRCLK = 1;
- }
- RCLK = 0;
- _nop_();
- _nop_();
- RCLK = 1;
- }
- /*******************************************************************************
- * 函 數(shù) 名 : main
- * 函數(shù)功能 : 主函數(shù)
- * 輸 入 : 無(wú)
- * 輸 出 : 無(wú)
- *******************************************************************************/
- void main()
- {
- u8 i;
-
- while(1)
- {
- for(i=0;i<16;i++)
- {
- Hc595SendByte(~ledwei[i+16],~ledwei[i],ledduan1[16+i],ledduan1[i]);
- delay(10);
- }
- }
- }
復(fù)制代碼
|
|