一、讀懂代碼
因為自身C語言基礎比較差,所以決定先把代碼看懂然后再在源代碼的基礎上修改寫成自己的點陣顯示。
自己對代碼的簡短理解都寫成注釋附在下面的源代碼中了,有不對的地方請指正
- 實現現象:下載程序后點陣上顯示數字0
-
- 注意事項:一定要將JOE短接片短接到GND端,如果不需要595后面的小燈點亮可以拔掉JP595短接片。
- ***************************************************************************************/
- #include "reg51.h" //此文件中定義了單片機的一些特殊功能寄存器
- #include<intrins.h>
- typedef unsigned int u16; //對數據類型進行聲明定義
- typedef unsigned char u8;
- sbit SRCLK=P3^6;//用SRCLK來表示P3口的第六位
- sbit RCLK=P3^5;//用RCLK來表示P3口的第五位
- sbit SER=P3^4;//用SER來表示P3口的第四位
- //SRCLK、RCLK、SER都是下面程序用到的的芯片74hc595中的引腳的名稱,想對芯片進一步了解的同學可以看一下代碼后面附的鏈接
- u8 ledduan[]={0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00};
- u8 ledwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
- //二極管點亮的的條件是對應行列分別為高低電平使得電流產生。
- //對應本實驗實驗板即為列線為高電平,行線為低電平時二極管被點亮
- //第一行代碼控制哪列為高電平即為需要此列是否點亮,第二行控制哪一行為低電平,即某一行被點亮,行列共同點亮時交叉處LED亮燈
- //實驗板的原理圖因為自己看不懂所以這里的行列可能混了【手動狗頭】對這個比較清楚的同學可以幫給我指正一下,謝謝。
- /*******************************************************************************
- * 函 數 名 : delay
- * 函數功能 : 延時函數,i=1時,大約延時10us
- 死循環實現延時功能
- *******************************************************************************/
- void delay(u16 i)
- {
- while(i--);
- }
- /*******************************************************************************
- * 函數名 : Hc595SendByte(u8 dat)
- * 函數功能 : 向74HC595發送一個字節的數據
- * 輸入 : 無
- * 輸出 : 無
- 將一個字節的信息串行輸入給74HC595以后由芯片并行輸出
- *******************************************************************************/
- void Hc595SendByte(u8 dat)
- {
- u8 a;
- SRCLK=0;
- RCLK=0;
- for(a=0;a<8;a++)
- {
- SER=dat>>7;
- dat<<=1;
- SRCLK=1;
- _nop_();
- _nop_();
- SRCLK=0;
- }
- RCLK=1;
- _nop_();
- _nop_();
- RCLK=0;
- }
- /*******************************************************************************
- * 函 數 名 : main
- * 函數功能 : 主函數
- * 輸 入 : 無
- * 輸 出 : 無
- *******************************************************************************/
- void main()
- {
- u8 i;
- while(1)//輪回點亮循環體
- {
- P0=0x7f;
- for(i=0;i<8;i++)
- {
- P0=ledwei[i]; //位選
- Hc595SendByte(ledduan[i]); //發送段選數據
- delay(100); //延時
- Hc595SendByte(0x00); //消隱,如果的話點陣顯示時會出現重影現象
- }
- }
- }
復制代碼
74HC595芯片資料:http://www.zg4o1577.cn/chip/3978.html
二、修改代碼
理解代碼以后我們對代碼進行修改來實現自己的點陣顯示。
因為對亮度和別的指標沒有要求,所以只需要修改和字符顯示的這一段就可以啦
u8 ledduan[]={0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00};
我要顯示的是佐字,對應的代碼經過推斷
1.jpg (1.99 MB, 下載次數: 74)
下載附件
2019-1-17 04:36 上傳
所以代碼修改為
u8 ledduan[]={0x20,0x7f,0xd0,0x71,0x51,0xdf,0x51,0x51};
三、燒錄
將代碼編譯形成新的hex文件后下載到實驗板上就OK啦,當然前提是你沒有像我一樣忘記JOE短接片短接到GND端
2.jpg (3.18 MB, 下載次數: 80)
下載附件
2019-1-17 04:36 上傳
|