久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6460|回復: 2
打印 上一主題 下一主題
收起左側

單片機利用4個74HC595芯片驅動點陣屏滾動顯示漢字 Proteus仿真程序 缺少matrix.dll

[復制鏈接]
跳轉到指定樓層
樓主
ID:681355 發表于 2020-11-27 18:46 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
能在點陣屏上顯示任意漢字,并進行滾動循環顯示。
利用單片機AT89C51編寫程序驅動四塊級聯在一起的74HC595,再利用這四塊595芯片驅動點陣屏進行顯示。漢字顯示,是用相應的文字取模軟件進行文字取模,將取到的模存入數組中,配合相應的程序算法,實現文字的在點陣屏上的滾動顯示。

三、理論設計
3.1 原理分析
將事先取好的字模裝入數組之中,通過軟件編程驅動四個74HC595芯片,兩個用于字模數組的輸出,兩個用于點陣的掃描,相互配合進行漢字的顯示。在C語言中設計兩個循環進行嵌套,里面的小循環用于單個漢字的顯示,外面的大循環用于漢字的滾動。

3.2 控制系統
AT89C51是一種帶4K字節FLASH存儲器的低電壓、高性能CMOS 8位微處理器,俗稱單片機。AT89C51 提供以下標準功能:4k 字節Flash 閃速存儲器,256字節片內數據存儲器(00H -7FH為片內RAM,80H-FFH為特殊功能寄存器SFR),32 個I/O 口線,兩個16位定時/計數器,一個5向量兩級中斷結構,一個全雙工串行通信口,片內振蕩器及時鐘電路。同時,AT89C51可降至0Hz的靜態邏輯操作,并支持兩種軟件可選的節電工作模式。空閑方式停止CPU的工作,但允許RAM,定時/計數器,串行通信口及中斷系統繼續工作。掉電方式保存RAM中的內容,但振蕩器停止工作并禁止其它所有部件工作直到下一個硬件復位。

3.3 74HC595芯片工作原理
74HC595是一個8位串行輸入、并行輸出的位移緩存器:并行輸出為三態輸出。在SCK 的上升沿,串行數據由SDL輸入到內部的8位位移緩存器,并由Q7'輸出,而并行輸出則是在LCK的上升沿將在8位位移緩存器的數據存入到8位并行輸出緩存器。當串行數據輸入端OE的控制信號為低使能時,并行輸出端的輸出值等于并行輸出緩存器所存儲的值。

74HC595驅動點陣屏電路
利用四個595芯片進行級聯U2—>U3—>U4—>U5,左邊兩個595用于點陣的行掃描,下邊的兩個595用于字模數組的輸出。進行相應的邏輯組合實現漢字的滾動顯示。
圖3-4 74HC595驅動點陣屏電路

3.5系統總體結構圖


四、電路仿真及仿真結果分析
4.1電路圖
依次向上滾動所要顯示的漢字

4.2仿真結果
顯示漢字“張”
顯示漢字“啟”
顯示漢字“雄”
  • 實物圖


心得體會
通過本次設計,使我對74HC595這款芯片,以及相應的軟件驅動代碼的書寫的理解更加清晰,對單片機的認識也是更進了一步。

   在本次設計工程中,遇到了很多得問題,主要是595軟件驅動設計和芯片之間的邏輯配合,讓四個595相互配合驅動顯示目標漢字那一塊。由于對595芯片的數據寫入順序,輸出順序,以及點陣結構認識不清導致走了一些彎路。最后重新梳理了595的特點,理清了下編程思路,最后順利完成。完成這次設計后,我在書本理論知識的基礎上又有了更深層次的理解,對單片機的認識也是更加深刻。


單片機源程序如下:


  1. /**************************************************************************************
  2. 項目名稱:點陣滾動設計
  3. ***************************************************************************************/

  4. #include "reg51.h"                         //此文件中定義了單片機的一些特殊功能寄存器
  5. #include "intrins.h"

  6. typedef unsigned int u16;          //對數據類型進行聲明定義
  7. typedef unsigned char u8;

  8. //--定義使用的IO口--//
  9. sbit SRCLK=P3^6;
  10. sbit RCLK=P3^5;
  11. sbit SER=P3^4;

  12. //定義LED點陣的位選,也就是類似于數碼管的位選,因為要對其動態掃描操作
  13. //數組前16位和后16位數據正好是相反的,也就是說先讓第3個595輸出低電平,然后再讓第4個595輸出低電平

  14. u8 code ledwei[]=
  15. {
  16. 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  17. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
  18. };

  19. u8 code ledduan1[]=
  20. {
  21. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  22. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  23. /*--  文字:  湖  --*/
  24. /*--  新宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
  25. 0x01,0x00,0x21,0x1E,0x11,0x12,0x17,0xD2,0x81,0x12,0x41,0x1E,0x41,0x12,0x17,0xD2,
  26. 0x14,0x52,0x24,0x5E,0xE4,0x52,0x27,0xD2,0x24,0x52,0x20,0x22,0x20,0x2A,0x00,0x44,
  27. ,.......詳見附件.................
  28. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,


  29.         
  30. };

  31. /*******************************************************************************
  32. * 函 數 名         : delay
  33. * 函數功能                   : 延時函數,i=1時,大約延時10us
  34. *******************************************************************************/
  35. void delay(u16 i)
  36. {
  37.         while(i--);        
  38. }

  39. /*******************************************************************************
  40. * 函 數 名         : Hc595SendByte(u8 dat1,u8 dat2,u8 dat3,u8 dat4)
  41. * 函數功能                   : 通過595發送四個字節的數據
  42. * 輸    入         : dat1:第4個595輸出數值
  43. *                  * dat2: 第3個595輸出數值
  44. *                  * dat3:第2個595輸出數值
  45. *                  * dat4:第1個595輸出數值
  46. * 輸    出         : 無
  47. *******************************************************************************/
  48. void Hc595SendByte(u8 dat1,u8 dat2,u8 dat3,u8 dat4)
  49. {
  50.         u8 a;

  51.         SRCLK = 1;
  52.         RCLK = 1;

  53.         for(a=0;a<8;a++)                 //發送8位數
  54.         {
  55.                 SER = dat1 >> 7;                 //從最高位開始發送
  56.                 dat1 <<= 1;

  57.                 SRCLK = 0;                         //發送時序
  58.                 _nop_();
  59.                 _nop_();
  60.                 SRCLK = 1;        
  61.         }

  62.         for(a=0;a<8;a++)                 //發送8位數
  63.         {
  64.                 SER = dat2 >> 7;                 //從最高位開始發送
  65.                 dat2 <<= 1;

  66.                 SRCLK = 0;                         //發送時序
  67.                 _nop_();
  68.                 _nop_();
  69.                 SRCLK = 1;        
  70.         }

  71.         for(a=0;a<8;a++)                 //發送8位數
  72.         {
  73.                 SER = dat3 >> 7;                 //從最高位開始發送
  74.                 dat3 <<= 1;

  75.                 SRCLK = 0;                         //發送時序
  76.                 _nop_();
  77.                 _nop_();
  78.                 SRCLK = 1;        
  79.         }

  80.         for(a=0;a<8;a++)                 //發送8位數
  81.         {
  82.                 SER = dat4 >> 7;                 //從最高位開始發送
  83.                 dat4 <<= 1;

  84.                 SRCLK = 0;                         //發送時序
  85.                 _nop_();
  86.                 _nop_();
  87.                 SRCLK = 1;        
  88.         }

  89.         RCLK = 0;
  90.         _nop_();
  91.         _nop_();
  92.         RCLK = 1;
  93. }



  94. /*******************************************************************************
  95. * 函 數 名       : main
  96. * 函數功能                 : 主函數
  97. * 輸    入       : 無
  98. * 輸    出             : 無
  99. *******************************************************************************/
  100. void main()
  101. {        
  102.         u16 i,a;
  103.         
  104.         while(1)
  105.         {         
  106.                 for(a=0;a<=768;a=a+2)     //大循環用于漢字的滾動
  107.                 {
  108.                         for(i=0;i<16;i++)       //小循環用于每一個漢字圖片的顯示
  109.                         {
  110.                                 Hc595SendByte(ledduan1[2*i+a+1],ledduan1[2*i+a],~ledwei[i+16],~ledwei[i]);
  111.                                 delay(500);        
  112.                         }        
  113.                         a+=2;   //防止兩個不同字模的數組之間過渡的地方導致數組讀取混亂
  114.                 }               
  115.         }               
  116. }
復制代碼

所有資料51hei提供下載(Proteus仿真+源代碼):
缺少matrix.dll  求大神分享

2018111115張啟雄 點陣LED顯示屏.zip (3.81 MB, 下載次數: 128)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:630338 發表于 2021-5-25 19:43 | 只看該作者
顯示不對哦,用了普中開發板。
回復

使用道具 舉報

板凳
ID:58718 發表于 2022-4-7 10:30 | 只看該作者
為什么是右移,先送高位不應該是左移動嗎
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人免费区一区二区三区 | 国产免费一区二区三区网站免费 | 亚洲精品国产精品国自产在线 | 亚洲一区av在线 | 国产精品久久久久国产a级 欧美日韩国产免费 | 欧美成人在线影院 | 精品一区二区免费视频 | 91免费观看在线 | 中文字幕一区二区三区日韩精品 | 日韩成人免费 | 一级免费毛片 | 日韩精品一 | 免费视频成人国产精品网站 | 国产91成人 | 国产精品久久久久久一区二区三区 | 国产精品伦理一区二区三区 | 在线观看黄色电影 | 尤物视频在线免费观看 | 国产激情视频在线观看 | 国产高清精品一区二区三区 | 91xx在线观看| 久久综合久久久 | 日韩欧美国产精品一区二区三区 | 日韩精品视频在线 | 国产二区av | 日韩一区精品 | 日本成人在线观看网站 | 岛国精品| 精品在线一区二区 | 久久亚洲国产精品日日av夜夜 | 天天干天天插天天 | 国产激情91久久精品导航 | 欧美日韩国产在线观看 | 在线中文字幕av | 男人的天堂久久 | 成人夜晚看av | 在线欧美一区二区 | 国产一级在线视频 | 中文字幕国产 | 一区二区三区视频在线观看 | 97国产精品 |