找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6092|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

16*16的點陣 我想讓它閃爍隔一秒顯示一下,用的是4個595和2個138驅(qū)動

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:140343 發(fā)表于 2016-10-20 18:49 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
各位大神些,本人小白一個,請教一個問題。我買了一塊16*16的點陣,用的是4個595和2個138驅(qū)動,F(xiàn)在的程序能正確顯示圖形。但我想讓它閃爍隔一秒顯示一下。要怎么才能閃爍呢?
  1. /*-----------------------------------------------
  2.   名稱:595控制4漢字點陣屏
  3.   內(nèi)容:屏+5V、GND連接電源5V
  4.         P0.0-P0.3分別連接A、B、C、D,用于控制16行,通過2路HC138控制
  5.         SCK時鐘連接P2.5
  6.         LATCH鎖存連接P2.6
  7.         R1紅色數(shù)據(jù)信號連接至P0.4
  8.         G1綠色數(shù)據(jù)信號連接至P2.4,如果使用單紅色屏此信號無需連接
  9.         OE使能端一般接GND,可以用IO引腳PWM控制亮度
  10.         或者使用此引腳控制拖尾現(xiàn)象。
  11.   現(xiàn)象:使用普通速度51系列單片機。屏幕出現(xiàn)笑臉圖標(biāo)
  12. ------------------------------------------------*/
  13. #include<reg52.h>
  14. #include <intrins.h>  
  15. #define uchar unsigned char  
  16. #define uint  unsigned int


  17. sbit Key1=P1^0;   //定義單片機P1口的第0位(即P1.0)為輸入
  18. sbit Key2=P1^1;   //定義單片機P1口的第0位(即P1.1)為輸入
  19. sbit Key3=P1^2;   //定義單片機P1口的第0位(即P1.2)為輸入


  20. sbit T_STR = P2^6;       //鎖存引腳,屏上標(biāo)識位STR
  21. sbit R1    = P0^4;       //數(shù)據(jù)引腳,屏上標(biāo)識R1
  22. sbit G1    = P2^4;       //數(shù)據(jù)引腳,屏上標(biāo)識G1
  23. sbit T_CLK = P2^5;       //時鐘引腳,屏上標(biāo)識位CLK
  24. sbit OE    = P2^1;       //使能引腳,屏上標(biāo)識EN/OE

  25. unsigned char tab[8];
  26. unsigned char DIS[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};//行數(shù)據(jù)

  27. /*-----------------------------------------------
  28.              16x16漢字取模數(shù)據(jù)
  29. ------------------------------------------------*/
  30. unsigned char code hztest[][32]=    //二維數(shù)組,目的是減少運算,可以用最基本的一維數(shù)組,每個漢字有32個字節(jié)數(shù)據(jù)
  31. {
  32. /*--  調(diào)入了一幅圖像:K:\C51\漢字 取模程序\前行16.bmp  --*/
  33. /*--  寬度x高度=16x16  --*/
  34. 0x80,0x01,0xC0,0x03,0xE0,0x07,0xF0,0x0F,0xF8,0x1F,0xFC,0x3F,0xDE,0x7B,0xCF,0xF3,
  35. 0xC7,0xE3,0xC3,0xC3,0xC1,0x83,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,



  36. /*--  調(diào)入了一幅圖像:K:\C51\漢字 取模程序\左轉(zhuǎn)16.bmp  --*/
  37. /*--  寬度x高度=16x16  --*/
  38. 0x80,0x07,0xC0,0x03,0xE0,0x01,0xF0,0x00,0x78,0x00,0x3C,0x00,0xFE,0xFF,0xFF,0xFF,
  39. 0xFF,0xFF,0xFE,0xFF,0x3C,0x00,0x78,0x00,0xF0,0x00,0xE0,0x01,0xC0,0x03,0x80,0x07,



  40. /*--  調(diào)入了一幅圖像:K:\C51\漢字 取模程序\右轉(zhuǎn)16.bmp  --*/
  41. /*--  寬度x高度=16x16  --*/
  42. 0xE0,0x01,0xC0,0x03,0x80,0x07,0x00,0x0F,0x00,0x1E,0x00,0x3C,0xFF,0x7F,0xFF,0xFF,
  43. 0xFF,0xFF,0xFF,0x7F,0x00,0x3C,0x00,0x1E,0x00,0x0F,0x80,0x07,0xC0,0x03,0xE0,0x01,

  44. };
  45. /*-----------------------------------------------
  46.              向595寫入一個字節(jié) 單紅色
  47. ------------------------------------------------*/
  48. void InputByte( uchar DataR1) //寫一個字節(jié)
  49. {
  50. uchar i;
  51. for(i=8; i>0; i--)
  52. {
  53. R1 = !(DataR1&0x01);                  
  54. T_CLK = 0;
  55. T_CLK = 1;
  56. DataR1 = DataR1 >> 1;
  57. }
  58. }
  59. /*-----------------------------------------------
  60.              向595寫入兩個字節(jié) 雙色
  61. ------------------------------------------------*/
  62. void Input2Byte( uchar DataR1,uchar DataG1) //寫一個字節(jié)
  63. {
  64. uchar i;
  65. for(i=8; i>0; i--)
  66. {
  67. R1 = !(DataR1&0x01);   
  68. G1 = !(DataG1&0x01);               
  69. T_CLK = 0;
  70. T_CLK = 1;
  71. DataR1 = DataR1 >> 1;
  72. DataG1 = DataG1 >> 1;
  73. }
  74. }



  75. void Write_A(uint k) //寫一個字符
  76. {
  77. static uchar count,j;
  78. uchar i;

  79. T_STR=0;       //鎖存釋放
  80.    
  81. for(j=0;j<1;j++) //取每個漢字的前2個字節(jié),數(shù)據(jù)傳輸完成后鎖存輸出即可 j表示漢字個數(shù),如果是3個漢字屏就可以修改成3
  82.         {
  83.     InputByte(hztest[j][k]);
  84.     InputByte(hztest[j][k+1]);
  85.         }
  86. OE=1;  //暫時關(guān)閉屏幕,防止出現(xiàn)鬼影,如果沒有使用該引腳控制則會出現(xiàn)拖影現(xiàn)象。
  87. T_STR=1;      //鎖存有效,此時一行的數(shù)據(jù)顯示到屏上
  88. P0=DIS[15-count]|0xf0;//用P0口的前4位控制16行,屏內(nèi)部通過4-16譯碼器工作,循環(huán)掃描其他15行
  89. OE=0;//使能
  90. count++;
  91. i+=2;              //累加調(diào)用下一行數(shù)據(jù)
  92. if(count==16)
  93.     count=0;
  94. if(i==32)
  95.     i=0;
  96. }

  97. //--------------------------------------------
  98. /*n毫秒的延時程序*/  
  99. void Delay_xms(uint x)  
  100. {  
  101. uint i,j;  
  102. for(i=0;i<x;i++)  
  103.   for(j=0;j<112;j++);  
  104. }



  105. /*-----------------------------------------------
  106.                       主程序
  107. ------------------------------------------------*/
  108. main()
  109. {


  110. while(1)
  111. {

  112.   Write_A(1);
  113.   Delay_xms(2000);//這名出錯,一加上就不能正確顯示;



  114. }
  115. }
復(fù)制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:111634 發(fā)表于 2016-10-20 21:42 | 只看該作者
本帖最后由 zl2168 于 2016-10-21 09:09 編輯

實例66  LED 16×16點陣掃描顯示漢字
電路設(shè)計

該案例技術(shù)要求與你的完全相同,且比你的更簡潔有效。
595與164同屬串入并出移位寄存器,區(qū)別是595有輸出控制,移位完畢再輸出;164是邊移邊輸出。因此用2片164有16機器周期的顯示混亂期,而595沒有。不過對于顯示來講,人眼根本不能察覺。若晶振為12MHz,16機器周期只有16us,人眼能察覺的至少20ms以上,20ms=20000us>>16us。而且,595輸出控制要多花費一個I/O引腳。你要用4片595?怎么用?
154可頂2片138。154是4-16譯碼器,138是3-8譯碼器,控制列掃描一片154就夠了。
至于秒閃爍,只需在每次顯示0.5s后,164置CLR=0或595置OE=0,停顯示0.5s,就行。
漢字編碼
漢字編碼概述   …
漢字點陣顯示代碼   …
漢字點陣取模軟件   
程序設(shè)計   
Keil調(diào)試   
Proteus仿真
Proteus仿真一下,確認(rèn)有效。
實例66a LED 16×16點陣漢字顯示.rar (48.21 KB, 下載次數(shù): 17)



以上摘自張志良編著《80C51單片機仿真設(shè)計實例教程——基于Keil CProteus》清華大學(xué)出版社ISBN 978-7-302-41682-1
書中電路和程序設(shè)計有詳細(xì)說明,程序語句條條有注解













































































回復(fù)

使用道具 舉報

板凳
ID:123289 發(fā)表于 2016-10-20 22:06 | 只看該作者
做一個標(biāo)記位(如:B_FLASH),
做一個0.5秒定時器(可利用中斷,每0.5秒置標(biāo)記,如:B_05S)
當(dāng)0.5秒到時(如:B_05S=1時),將B_FLASH求反(B_FLASH=~B_FLASH,當(dāng)然記得復(fù)位B_05S)。
在你現(xiàn)有的輸出數(shù)據(jù)動作前,增加“插入”一個動作,就是將輸出數(shù)據(jù)與B_FLASH“與”一下再輸出。
回復(fù)

使用道具 舉報

地板
ID:123289 發(fā)表于 2016-10-20 22:08 | 只看該作者
凡是需要閃的數(shù)據(jù)位,就與B_FLASH“與”一下再送出,不需要閃的,不與。
回復(fù)

使用道具 舉報

5#
ID:111634 發(fā)表于 2016-10-21 09:20 | 只看該作者
實例66  LED 16×16點陣掃描顯示漢字
該案例技術(shù)要求與你的完全相同,且比你的更簡潔有效。
595與164同屬串入并出移位寄存器,區(qū)別是595有輸出控制,移位完畢再輸出;164是邊移邊輸出。因此用2片164有16機器周期的顯示混亂期,而595沒有。不過對于顯示來講,人眼根本不能察覺。若晶振為12MHz,16機器周期只有16us,人眼能察覺的至少20ms以上,20ms=20000us>>16us。而且,595輸出控制要多花費一個I/O引腳。你要用4片595?怎么用?
154可頂2片138。154是4-16譯碼器,138是3-8譯碼器,控制列掃描一片154就夠了。
至于秒閃爍,只需在每次顯示0.5s后,164置CLR=0或595置OE=0,停顯示0.5s,就行。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表