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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5192|回復: 4
收起左側

2*16*16漢字點陣滾動顯示單片機源碼及仿真電路圖等資料

[復制鏈接]
ID:275479 發表于 2018-2-3 07:53 | 顯示全部樓層 |閱讀模式
源碼和電路圖都在壓縮包中,滾動顯示最關鍵的就在于不同8*8點陣塊中如何銜接與字模數據如何傳入到595芯片當中。

一、點陣測試說明
一、單組點陣原理圖
1.png
電路采用H1~H16用2個138組成4譯16電路驅動,L1~L16用2個74HC595的串并轉換驅動

ABCDG 為16行 譯碼控制信號。
ABCD 為H0~H16的4-16(兩個138組成)的譯碼輸入信號。G為兩個138譯碼控制腳,低電平有效。
CLK 為列信號控制的時鐘信號
DATA 為串行數據信號
LATCH 為信號鎖定,上升沿時移位寄存器的數據進入數據存儲寄存器,下降沿時存儲寄存器數據不變。(通常將LATCH置為低電平,)當移位結束后,在LATCH端產生一個正脈沖(5V時,大于幾十納秒就行了。通常都選微秒級),更新顯示數據
DATAOUT 為級聯時數據串出信號。
IN針定義(從上到下)依次為LATCH、CLK、DATA、G、A、B、C、D
OUT針定義(從上到下)依次為LATCH、CLK、DATAOUT、G、A、B、C、D
級聯使用時OUT針和IN針用短路片連接。

二、實驗方式:
可單個點陣顯示,也通過短路片連接可接聯控制。

三、實驗接線:
P1.0接D
P1.1接C
P1.2接B
P1.3接A
P1.4接G
P1.5接DATA
P1.6接CLK
P1.7接LATCH

四、實驗程序
程序1  LED3J.C   三字靜態顯示
程序2  LED3D.C  二屏(左邊二屏)六字左移顯示。(如三屏接聯,最右屏同最左屏的字,且字向下偏移一個位)
調試時,按調試按鈕傳送結束后,在反匯編窗口點擊0000起始地址,讓程序從0000開始運行。或直接在鍵盤上運行起始地址為0000。

字模設置選項
2.png

加了左右滾動開關,非常好用,閃爍是手機錄制的問題

加了左右滾動開關,非常好用,閃爍是手機錄制的問題

0.png

仿真圖:
0.png

單片機源程序如下:
  1. #include "main.h"
  2. #include <intrins.h>
  3. //char code STT516[3] _at_ 0x003b;
  4. #define Display_Num_Word 2                                //液晶能顯示的漢字個數

  5. unsigned char Display_Buffer[4];
  6. unsigned char Display_Swap_Buffer[Display_Num_Word][32]={0};                                        //顯示緩沖區
  7. bit Shift_Bit = 0;
  8. bit Flag_Shift = 0;
  9. #define Shift_Speed 5                                                                                        //移動速度
  10. unsigned char Timer0_Count = 0;
  11. unsigned char temp = 0x80;
  12. unsigned char Shift_Count = 0;
  13. unsigned char Display_Word_Count = 0;

  14. #define Num_Of_Word 6
  15. unsigned char code Word[Num_Of_Word][32] =
  16. {

  17. 0xFE,0xFE,0xFE,0xFE,0xFE,0xE0,0xEF,0xEF,0xEF,0xE0,0xEF,0xFE,0xD7,0xDB,0xBB,0xFF,
  18. 0xFF,0xFF,0x07,0xFF,0xEF,0x07,0xEF,0xEF,0xEF,0x0F,0xEF,0xEF,0x77,0xBB,0xBB,0xFF,/*"點",0*/

  19. 0xFF,0x07,0x77,0x68,0x5E,0x6E,0x75,0x70,0x77,0x57,0x68,0x7F,0x7F,0x7F,0x7F,0x7F,
  20. 0x7F,0x7F,0x7F,0x03,0xFF,0xBF,0xBF,0x03,0xBF,0xBF,0x01,0xBF,0xBF,0xBF,0xBF,0xBF,/*"陣",1*/

  21. 0xBF,0xD8,0xDB,0x7B,0xBA,0xAA,0xEA,0xDA,0xDA,0xDA,0x3A,0xBE,0xBD,0xBD,0xBB,0xB7,
  22. 0xFD,0x3D,0xBD,0xAD,0xAD,0xAD,0xAD,0xAD,0xAD,0xAD,0xAD,0xFD,0x7D,0xBD,0xB5,0xFB,/*"測",2*/

  23. 0xFF,0xBF,0xDF,0xCF,0xD8,0xFF,0x1F,0xD8,0xDE,0xDE,0xDE,0xDE,0xD6,0xC9,0xDF,0xFF,
  24. 0xDF,0xD7,0xDB,0xDB,0x01,0xDF,0xDF,0x1F,0xDF,0xEF,0xEF,0xF5,0x35,0xF9,0xFD,0xFF,/*"試",3*/

  25. 0xBF,0xDE,0xCE,0xDE,0xFE,0xFE,0x1D,0xDA,0xDE,0xDE,0xDF,0xDF,0xD7,0xCF,0xDC,0xF3,
  26. 0xFF,0x0F,0xEF,0xEF,0xEF,0xEF,0xF1,0x07,0xF7,0xF7,0x6F,0x6F,0x9F,0x6F,0xF1,0xFB,/*"設",4*/

  27. 0xBF,0xDF,0xCF,0xDF,0xFF,0x0C,0xEF,0xEF,0xEF,0xEF,0xEF,0xED,0xEB,0xE7,0xEF,0xFF,
  28. 0xDF,0xDF,0xDF,0xDF,0xDF,0x01,0xDF,0xDF,0xDF,0xDF,0xDF,0xDF,0xDF,0xDF,0xDF,0xDF,/*"計",5*/


  29. };

  30. //************************************************************
  31. //主函數
  32. //************************************************************
  33. void main()
  34. {
  35.         Init_Timer0();
  36.         Clear_Display();
  37.         while(1)
  38.         {
  39.                 Display(Display_Swap_Buffer);
  40.                 if(Flag_Shift == 1)
  41.                 {
  42.                         Flag_Shift = 0;
  43.                         Display_Word_Count = Shift_Count/16;                                //計算當前顯示第幾個字
  44.                         Calc_Shift();                                                                               
  45.                        
  46.                         Shift_Count++;
  47.                        
  48.                         if(Shift_Count == (Num_Of_Word+Display_Num_Word)*16 )                                //移動次數
  49.                         {
  50.                                 Shift_Count = 0;                               
  51.                         }                       
  52.                 }                                                                       
  53.         }
  54. }

  55. //****************************************************
  56. //初始化定時器0
  57. //****************************************************
  58. void Init_Timer0()
  59. {
  60.         TMOD = 0X01;                        //T0, 工作模式1

  61.         TH0 = (65536 - 50000)/256;
  62.         TL0 = (65536 - 50000)%256;

  63.         TR0 = 1;                                //開啟定時器
  64.         ET0 = 1;                            //開啟定時器中斷
  65.         EA = 1;                                        //開啟總中斷               
  66. }

  67. //****************************************************
  68. //中斷函數
  69. //****************************************************
  70. void Timer0() interrupt 1
  71. {
  72.         TH0 = (65536 - 50000)/256;
  73.         TL0 = (65536 - 50000)%256;
  74.        
  75.         TF0 = 0;
  76.         Timer0_Count++;
  77.         if(Timer0_Count >= Shift_Speed)
  78.         {
  79.                 Timer0_Count = 0;
  80.                 Flag_Shift = 1;
  81.         }

  82. }

  83. //************************************************************
  84. //計算移動數據,存在在緩沖器
  85. //************************************************************
  86. void Calc_Shift()
  87. {
  88.         unsigned char i;

  89.         for(i = 0;i < 16;i++)
  90.         {
  91.                 if((Display_Swap_Buffer[0][16+i]&0x80) == 0)                                                                        //每行第一個字節移位
  92.                 {
  93.                         Display_Swap_Buffer[0][i] = (Display_Swap_Buffer[0][i] << 1)&0xfe;                         //最低位清零       
  94.                 }
  95.                 else
  96.                 {
  97.                         Display_Swap_Buffer[0][i] = (Display_Swap_Buffer[0][i] << 1)|0x01;                        //最低位置一        
  98.                 }

  99.                 if((Display_Swap_Buffer[1][i]&0x80) == 0)                                                                        //每行第二個字節移位
  100.                 {
  101.                         Display_Swap_Buffer[0][16+i] = (Display_Swap_Buffer[0][16+i] << 1)&0xfe;                         //最低位清零       
  102.                 }
  103.                 else
  104.                 {
  105.                         Display_Swap_Buffer[0][16+i] = (Display_Swap_Buffer[0][16+i] << 1)|0x01;                        //最低位置一        
  106.                 }

  107.                 if((Display_Swap_Buffer[1][16+i]&0x80) == 0)                                                                        //每行第三個字節移位
  108.                 {
  109.                         Display_Swap_Buffer[1][i] = (Display_Swap_Buffer[1][i] << 1)&0xfe;                         //最低位清零       
  110.                 }
  111.                 else
  112.                 {
  113.                         Display_Swap_Buffer[1][i] = (Display_Swap_Buffer[1][i] << 1)|0x01;                        //最低位置一        
  114.                 }

  115.                 if(Shift_Count%16 < 8 && Display_Word_Count < Num_Of_Word)
  116.                 {
  117.                         Shift_Bit = Word[Display_Word_Count][i]&temp;
  118.                 }
  119.                 else if(Shift_Count%16 < 16 && Display_Word_Count < Num_Of_Word)
  120.                 {
  121.                         Shift_Bit = Word[Display_Word_Count][16+i]&temp;
  122.                 }
  123.                 else
  124.                 {
  125.                         Shift_Bit = 1;                                                //把字移出緩沖區
  126.                 }

  127.                 if( Shift_Bit == 0)                                                                                                                //后8位移位
  128.                 {
  129.                         Display_Swap_Buffer[1][16+i] = (Display_Swap_Buffer[1][16+i] << 1)&0xfe;                 //最低位清零
  130.                 }
  131.                 else
  132.                 {
  133.                         Shift_Bit =        1;
  134.                         Display_Swap_Buffer[1][16+i] = (Display_Swap_Buffer[1][16+i] << 1)|0x01;                //最低位置一                        
  135.                 }
  136.                
  137.         }
  138.         temp = (temp>>1)&0x7f;
  139.         if(temp == 0x00)
  140.         {
  141.                 temp = 0x80;
  142.         }
  143. }

  144. //************************************************************
  145. //清空緩沖區
  146. //************************************************************
  147. void Clear_Display()
  148. {
  149.         unsigned char i,j;
  150.         for(j = 0 ; j < Display_Num_Word; j++)
  151.         {
  152.                 for(i = 0 ; i < 32 ;i++)
  153.                 {
  154.                         Display_Swap_Buffer[j][i] = 0xff;                                //0=顯示  1=不顯示        
  155.                 }
  156.         }
  157. }

  158. //************************************************************
  159. //num為字數  dat[][32]為字模的名稱
  160. //*************************************************************
  161. void Display(unsigned char dat[][32])                                       
  162. {
  163.         unsigned char i,j;

  164.         for( i = 0 ; i < 16 ; i++ )
  165.         {
  166.                 LEDARRAY_G = 1;                        //更新數據時候關閉顯示。等更新完數據,打開138顯示行。防止重影。

  167.                 Display_Buffer[0] = dat[0][i];               
  168.                 Display_Buffer[1] = dat[0][i+16];
  169.                 Display_Buffer[2] = dat[1][i];
  170.                 Display_Buffer[3] = dat[1][i+16];

  171.                 Send(Display_Buffer[3]);
  172.                 Send(Display_Buffer[2]);
  173.                 Send(Display_Buffer[1]);
  174.                 Send(Display_Buffer[0]);

  175.                 LEDARRAY_LAT = 1;                                        //鎖存數據
  176.                 _nop_();
  177.        
  178.                 LEDARRAY_LAT = 0;
  179.                 _nop_();

  180.                 Scan_Line(i);                                                //選擇第i行

  181.                 LEDARRAY_G = 0;
  182.                
  183.                 for( j = 0 ; j < 30 ; j++);                //延時一段時間,讓LED亮起來。
  184.         }       
  185. }

  186. //****************************************************
  187. //掃描某一行
  188. //****************************************************
  189. void Scan_Line( unsigned char m)
  190. {       
  191.         switch(m)
  192.         {
  193.                 case 0:                       
  194.                         LEDARRAY_D = 0;LEDARRAY_C = 0;LEDARRAY_B = 0;LEDARRAY_A = 0;                                        
  195.                         break;
  196.                 case 1:                                       
  197.                         LEDARRAY_D = 0;LEDARRAY_C = 0;LEDARRAY_B = 0;LEDARRAY_A = 1;                
  198.                         break;
  199.                 case 2:                                       
  200.                         LEDARRAY_D = 0;LEDARRAY_C = 0;LEDARRAY_B = 1;LEDARRAY_A = 0;                
  201.                         break;
  202.                 case 3:                                       
  203.                         LEDARRAY_D = 0;LEDARRAY_C = 0;LEDARRAY_B = 1;LEDARRAY_A = 1;                
  204.                         break;
  205.                 case 4:
  206.                         LEDARRAY_D = 0;LEDARRAY_C = 1;LEDARRAY_B = 0;LEDARRAY_A = 0;                
  207.                         break;
  208.                 case 5:
  209.                         LEDARRAY_D = 0;LEDARRAY_C = 1;LEDARRAY_B = 0;LEDARRAY_A = 1;                
  210.                         break;
  211.                 case 6:
  212.                         LEDARRAY_D = 0;LEDARRAY_C = 1;LEDARRAY_B = 1;LEDARRAY_A = 0;                
  213.                         break;
  214.                 case 7:
  215.                         LEDARRAY_D = 0;LEDARRAY_C = 1;LEDARRAY_B = 1;LEDARRAY_A = 1;                
  216.                         break;
  217.                 case 8:
  218.                         LEDARRAY_D = 1;LEDARRAY_C = 0;LEDARRAY_B = 0;LEDARRAY_A = 0;                
  219.                         break;
  220.                 case 9:
  221.                         LEDARRAY_D = 1;LEDARRAY_C = 0;LEDARRAY_B = 0;LEDARRAY_A = 1;                
  222.                         break;       
  223.                 case 10:
  224.                         LEDARRAY_D = 1;LEDARRAY_C = 0;LEDARRAY_B = 1;LEDARRAY_A = 0;                
  225.                         break;
  226.                 case 11:
  227.                         LEDARRAY_D = 1;LEDARRAY_C = 0;LEDARRAY_B = 1;LEDARRAY_A = 1;                
  228.                         break;
  229.                 case 12:
  230.                         LEDARRAY_D = 1;LEDARRAY_C = 1;LEDARRAY_B = 0;LEDARRAY_A = 0;                
  231.                         break;
  232.                 case 13:
  233.                         LEDARRAY_D = 1;LEDARRAY_C = 1;LEDARRAY_B = 0;LEDARRAY_A = 1;                
  234.                         break;
  235.                 case 14:
  236.                         LEDARRAY_D = 1;LEDARRAY_C = 1;LEDARRAY_B = 1;LEDARRAY_A = 0;                
  237.                         break;
  238.                 case 15:
  239.                         LEDARRAY_D = 1;LEDARRAY_C = 1;LEDARRAY_B = 1;LEDARRAY_A = 1;                
  240.                         break;
  241.                 default : break;       
  242.         }
  243. }

  244. //****************************************************
  245. ……………………

  246. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
0.png

所有資料51hei提供下載:
漢字點陣滾動.zip (1.13 MB, 下載次數: 58)


評分

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

查看全部評分

回復

使用道具 舉報

ID:291645 發表于 2018-3-15 18:02 | 顯示全部樓層
我打開這個仿真的,顯示非法字符,咋回事,有知道怎么改的嗎
回復

使用道具 舉報

ID:443613 發表于 2018-12-10 20:33 | 顯示全部樓層
想問下帶不帶論文啊
回復

使用道具 舉報

ID:275479 發表于 2019-1-2 13:22 來自手機 | 顯示全部樓層
dqm123 發表于 2018-12-10 20:33
想問下帶不帶論文啊

不帶論文,可以自己寫寫
回復

使用道具 舉報

ID:483687 發表于 2019-3-23 22:12 | 顯示全部樓層
為什么仿真出現錯誤啊 Wire label contains illegal characters [P20,]
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一级淫片 | 黄色大全免费看 | 视频一区在线观看 | 成人欧美一区二区三区黑人孕妇 | 欧美日韩一区二区三区四区五区 | 91精品国产一区二区三区蜜臀 | 精品欧美一区二区三区久久久 | 521av网站 | 国产目拍亚洲精品99久久精品 | 91在线看片 | 国产蜜臀| 国产精品99视频 | 91 在线 | 色999日韩 | 在线观看成人小视频 | 97精品一区二区 | 欧美国产精品一区二区三区 | 九九精品视频在线 | 精品久久久久久久 | 欧美一区二区免费 | 福利av在线 | 黄色在线免费观看 | 欧洲亚洲视频 | 国产精品久久久久久久久久三级 | 成人免费视频网站在线看 | 亚洲一区久久 | 国产成人精品一区二区三区四区 | 中文字幕亚洲国产 | 欧美一级全黄 | 国产精品久久 | 国产精品69毛片高清亚洲 | 亚洲高清在线 | 中文字幕91| 毛片免费看| 久草视| 国产精品乱码一区二区三区 | 日韩国产中文字幕 | 日韩av一区二区在线观看 | 日韩欧美在线精品 | 国际精品鲁一鲁一区二区小说 | 欧美精品久久久久久久久老牛影院 |