標(biāo)題: 單片機(jī)8*8LED點(diǎn)陣—顯示漢字實(shí)驗(yàn) [打印本頁(yè)]

作者: jhgvj    時(shí)間: 2019-1-15 18:47
標(biāo)題: 單片機(jī)8*8LED點(diǎn)陣—顯示漢字實(shí)驗(yàn)
一、讀懂代碼

因?yàn)樽陨鞢語(yǔ)言基礎(chǔ)比較差,所以決定先把代碼看懂然后再在源代碼的基礎(chǔ)上修改寫成自己的點(diǎn)陣顯示。
自己對(duì)代碼的簡(jiǎn)短理解都寫成注釋附在下面的源代碼中了,有不對(duì)的地方請(qǐng)指正
  1. 實(shí)現(xiàn)現(xiàn)象:下載程序后點(diǎn)陣上顯示數(shù)字0
  2.             
  3. 注意事項(xiàng):一定要將JOE短接片短接到GND端,如果不需要595后面的小燈點(diǎn)亮可以拔掉JP595短接片。                                                                              
  4. ***************************************************************************************/

  5. #include "reg51.h"           //此文件中定義了單片機(jī)的一些特殊功能寄存器
  6. #include<intrins.h>

  7. typedef unsigned int u16;     //對(duì)數(shù)據(jù)類型進(jìn)行聲明定義
  8. typedef unsigned char u8;

  9. sbit SRCLK=P3^6;//用SRCLK來表示P3口的第六位
  10. sbit RCLK=P3^5;//用RCLK來表示P3口的第五位
  11. sbit SER=P3^4;//用SER來表示P3口的第四位
  12. //SRCLK、RCLK、SER都是下面程序用到的的芯片74hc595中的引腳的名稱,想對(duì)芯片進(jìn)一步了解的同學(xué)可以看一下代碼后面附的鏈接

  13. u8 ledduan[]={0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00};
  14. u8 ledwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
  15. //二極管點(diǎn)亮的的條件是對(duì)應(yīng)行列分別為高低電平使得電流產(chǎn)生。
  16. //對(duì)應(yīng)本實(shí)驗(yàn)實(shí)驗(yàn)板即為列線為高電平,行線為低電平時(shí)二極管被點(diǎn)亮
  17. //第一行代碼控制哪列為高電平即為需要此列是否點(diǎn)亮,第二行控制哪一行為低電平,即某一行被點(diǎn)亮,行列共同點(diǎn)亮?xí)r交叉處LED亮燈
  18. //實(shí)驗(yàn)板的原理圖因?yàn)樽约嚎床欢赃@里的行列可能混了【手動(dòng)狗頭】對(duì)這個(gè)比較清楚的同學(xué)可以幫給我指正一下,謝謝。
  19. /*******************************************************************************
  20. * 函 數(shù) 名         : delay
  21. * 函數(shù)功能         : 延時(shí)函數(shù),i=1時(shí),大約延時(shí)10us
  22. 死循環(huán)實(shí)現(xiàn)延時(shí)功能
  23. *******************************************************************************/
  24. void delay(u16 i)
  25. {
  26.     while(i--);
  27. }

  28. /*******************************************************************************
  29. * 函數(shù)名         : Hc595SendByte(u8 dat)
  30. * 函數(shù)功能         : 向74HC595發(fā)送一個(gè)字節(jié)的數(shù)據(jù)
  31. * 輸入           : 無(wú)
  32. * 輸出             : 無(wú)
  33. 將一個(gè)字節(jié)的信息串行輸入給74HC595以后由芯片并行輸出
  34. *******************************************************************************/
  35. void Hc595SendByte(u8 dat)
  36. {
  37.     u8 a;
  38.     SRCLK=0;
  39.     RCLK=0;
  40.     for(a=0;a<8;a++)
  41.     {
  42.         SER=dat>>7;
  43.         dat<<=1;

  44.         SRCLK=1;
  45.         _nop_();
  46.         _nop_();
  47.         SRCLK=0;   
  48.     }

  49.     RCLK=1;
  50.     _nop_();
  51.     _nop_();
  52.     RCLK=0;
  53. }

  54. /*******************************************************************************
  55. * 函 數(shù) 名       : main
  56. * 函數(shù)功能       : 主函數(shù)
  57. * 輸    入       : 無(wú)
  58. * 輸    出         : 無(wú)
  59. *******************************************************************************/
  60. void main()
  61. {           
  62.     u8 i;
  63.     while(1)//輪回點(diǎn)亮循環(huán)體
  64.     {
  65.         P0=0x7f;
  66.         for(i=0;i<8;i++)
  67.         {
  68.             P0=ledwei[i];         //位選
  69.             Hc595SendByte(ledduan[i]);  //發(fā)送段選數(shù)據(jù)
  70.             delay(100);        //延時(shí)
  71.             Hc595SendByte(0x00);  //消隱,如果的話點(diǎn)陣顯示時(shí)會(huì)出現(xiàn)重影現(xiàn)象
  72.         }   
  73.     }      
  74. }
復(fù)制代碼

74HC595芯片資料:http://www.torrancerestoration.com/chip/3978.html
二、修改代碼

理解代碼以后我們對(duì)代碼進(jìn)行修改來實(shí)現(xiàn)自己的點(diǎn)陣顯示。
因?yàn)閷?duì)亮度和別的指標(biāo)沒有要求,所以只需要修改和字符顯示的這一段就可以啦

u8 ledduan[]={0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00};

我要顯示的是佐字,對(duì)應(yīng)的代碼經(jīng)過推斷


所以代碼修改為

u8 ledduan[]={0x20,0x7f,0xd0,0x71,0x51,0xdf,0x51,0x51};

三、燒錄

將代碼編譯形成新的hex文件后下載到實(shí)驗(yàn)板上就OK啦,當(dāng)然前提是你沒有像我一樣忘記JOE短接片短接到GND端



作者: yasi666    時(shí)間: 2019-1-26 21:07
真詳細(xì),好好學(xué)習(xí)
作者: 單片機(jī)菜鳥求助    時(shí)間: 2019-3-3 19:13
菜鳥求救:段和位不是應(yīng)該一塊修改嗎我想要一下就是“佐”字的位代碼
作者: 仙人撫我頂    時(shí)間: 2020-2-7 01:25
能麻煩問問怎么JOE短接片短接到GND端嗎?本人小白剛?cè)胧,不?huì)啊,球球大佬撈一把。

作者: moshu_    時(shí)間: 2020-2-7 09:48
什么型號(hào)的開發(fā)板
作者: 原力    時(shí)間: 2020-2-15 20:52
如果用138和595控制怎么寫
作者: 夏一    時(shí)間: 2020-2-21 14:14
moshu_ 發(fā)表于 2020-2-7 09:48
什么型號(hào)的開發(fā)板

我也有兩塊2.0的
作者: hbcqd    時(shí)間: 2020-2-21 21:10
這么的學(xué)習(xí)例程,謝謝分享
作者: 起個(gè)名字真難a    時(shí)間: 2020-3-16 21:34
原力 發(fā)表于 2020-2-15 20:52
如果用138和595控制怎么寫

我也想知道
作者: diyang    時(shí)間: 2020-5-12 16:49
仙人撫我頂 發(fā)表于 2020-2-7 01:25
能麻煩問問怎么JOE短接片短接到GND端嗎?本人小白剛?cè)胧,不?huì)啊,球球大佬撈一把!

拔下來

作者: like1234456    時(shí)間: 2021-8-1 13:52
仙人撫我頂 發(fā)表于 2020-2-7 01:25
能麻煩問問怎么JOE短接片短接到GND端嗎?本人小白剛?cè)胧,不?huì)啊,球球大佬撈一把。

單片機(jī)上面應(yīng)該自帶有短接板
作者: qianhuan    時(shí)間: 2022-6-8 12:41
單片機(jī)點(diǎn)陣文字是固定的,還是每種單片機(jī)都不同




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1