找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5654|回復(fù): 7
收起左側(cè)

16*64點(diǎn)陣時(shí)鐘仿真+源程序

  [復(fù)制鏈接]
ID:140489 發(fā)表于 2018-4-9 18:20 | 顯示全部樓層 |閱讀模式
16*64點(diǎn)陣仿真,74HC138做行驅(qū)動(dòng),74HC595做列驅(qū)動(dòng),文字上移、下移、靜止顯示,時(shí)鐘“:”閃爍;有完整的源程序和仿真文件;
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
QQ截圖20180409180406.jpg 0.png

單片機(jī)源碼:
  1. /************16*16LED點(diǎn)陣屏顯示*****************/
  2. #include<reg52.h>
  3. #include<intrins.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. sbit R=P2^0;          //595數(shù)據(jù)輸入端口
  7. sbit CLK=P2^1;          //595 時(shí)鐘信號(hào)
  8. sbit STB=P2^2;          // 595鎖存端
  9. uchar cont,num,xs;
  10. char miao=30,fen=30,shi=12;
  11. //bit flag;

  12. char code table[][32]={
  13.                                    
  14.                   
  15. /////////////////////////////////////////////////////////////////////////
  16. // 漢字字模表                                                          //
  17. // 漢字庫: 宋體16.dot,橫向取模左高位,數(shù)據(jù)排列:從左到右從上到下 ,對(duì)應(yīng)R=1 else R=0的寫法        //
  18. /////////////////////////////////////////////////////////////////////////

  19.           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  20.           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  21.           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  22.           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,


  23. /*"點(diǎn)",*/ 0x02,0x00,0x02,0x00,0x02,0x08,0x03,0xFC,
  24.       0x02,0x00,0x02,0x10,0x3F,0xF8,0x20,0x10,
  25.       0x20,0x10,0x20,0x10,0x3F,0xF0,0x00,0x00,
  26.       0x29,0x10,0x24,0xC8,0x44,0x44,0x80,0x04,

  27.           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  28.           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  29.           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  30.           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,


  31. /*"陣",*/ 0x00,0x80,0x78,0x84,0x4F,0xFE,0x50,0x80,
  32.       0x50,0xA0,0x61,0x20,0x51,0x28,0x4B,0xFC,
  33.       0x48,0x20,0x48,0x20,0x68,0x24,0x57,0xFE,
  34.       0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,

  35.           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  36.           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  37.           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  38.           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,


  39. /*"時(shí)",*/ 0x00,0x08,0x04,0x08,0x7E,0x08,0x44,0x08,
  40.       0x47,0xFE,0x44,0x08,0x44,0x08,0x7C,0x88,
  41.       0x44,0x48,0x44,0x48,0x44,0x08,0x44,0x08,
  42.       0x7C,0x08,0x44,0x48,0x00,0x28,0x00,0x10,

  43.           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  44.           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  45.           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  46.           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,


  47. /*"鐘",*/ 0x10,0x20,0x10,0x20,0x10,0x20,0x1C,0x24,
  48.       0x21,0xFE,0x21,0x24,0x7D,0x24,0x91,0x24,
  49.       0x11,0x24,0xFD,0xFC,0x11,0x24,0x10,0x20,
  50.       0x14,0x20,0x18,0x20,0x10,0x20,0x00,0x20,

  51.           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  52.           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  53.           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  54.           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00


  55. };

  56. uchar code tab[][16]={

  57.         0x00,0x00,0x00,0x7C,0xC6,0xC6,0xCE,0xD6,  // -0-
  58.         0xD6,0xE6,0xC6,0xC6,0x7C,0x00,0x00,0x00,

  59.         0x00,0x00,0x00,0x18,0x38,0x78,0x18,0x18,  // -1-
  60.         0x18,0x18,0x18,0x18,0x7E,0x00,0x00,0x00,

  61.         0x00,0x00,0x00,0x7C,0xC6,0x06,0x0C,0x18,  // -2-
  62.         0x30,0x60,0xC0,0xC6,0xFE,0x00,0x00,0x00,

  63.         0x00,0x00,0x00,0x7C,0xC6,0x06,0x06,0x3C,  // -3-
  64.         0x06,0x06,0x06,0xC6,0x7C,0x00,0x00,0x00,

  65.         0x00,0x00,0x00,0x0C,0x1C,0x3C,0x6C,0xCC,  // -4-
  66.         0xFE,0x0C,0x0C,0x0C,0x1E,0x00,0x00,0x00,

  67.         0x00,0x00,0x00,0xFE,0xC0,0xC0,0xC0,0xFC,  // -5-
  68.         0x0E,0x06,0x06,0xC6,0x7C,0x00,0x00,0x00,

  69.         0x00,0x00,0x00,0x38,0x60,0xC0,0xC0,0xFC,  // -6-
  70.         0xC6,0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,

  71.         0x00,0x00,0x00,0xFE,0xC6,0x06,0x06,0x0C,  // -7-
  72.         0x18,0x30,0x30,0x30,0x30,0x00,0x00,0x00,

  73.         0x00,0x00,0x00,0x7C,0xC6,0xC6,0xC6,0x7C,  // -8-
  74.         0xC6,0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,

  75.         0x00,0x00,0x00,0x7C,0xC6,0xC6,0xC6,0x7E,  // -9-
  76.         0x06,0x06,0x06,0x0C,0x78,0x00,0x00,0x00,

  77.         0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,  // -:-
  78.         0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,

  79.         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  80.         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  81. };   

  82. void delay(uint z)
  83. {
  84.         uint x,y;
  85.         for(x=0;x<z;x++)
  86.                 for(y=0;y<110;y++);
  87. }


  88. void WriteByte(uchar dat)   
  89. {
  90.         uchar i;
  91.         /* 通過8循環(huán)將8位數(shù)據(jù)一次移入74HC595 */
  92.         CLK = 0;
  93.         for(i = 0; i < 8; i++)
  94.         {
  95.                 if(dat & 0x80)
  96.                         R = 1;
  97.                 else
  98.                          R = 0;
  99.                 dat = dat << 1;
  100.                 CLK = 0;                                          
  101.         _nop_();_nop_();
  102.                 CLK = 1;
  103.         }
  104. }

  105. void main()
  106. {
  107. //        uint num;
  108.         uint num,move,speed;
  109.         TMOD |=0x01;
  110.         TH0=(65536-50000)/256;
  111.         TL0=(65536-50000)%256;
  112.         EA=1;
  113.         ET0=1;
  114.         TR0=1;
  115.         while(1)
  116.         {
  117.                  switch(xs)
  118.                  {
  119.                  
  120.                         case 0:
  121.                         {
  122.                                  for(num=0;num<16;num++)  //靜止顯示4個(gè)漢字
  123.                                 {
  124.                                           WriteByte(~table[7][2*num+1]);          //送出一個(gè)字節(jié)  
  125.                                           WriteByte(~table[7][2*num]);
  126.                         
  127.                                           WriteByte(~table[5][2*num+1]);          //送出一個(gè)字節(jié)  
  128.                                           WriteByte(~table[5][2*num]);
  129.                         
  130.                                           WriteByte(~table[3][2*num+1]);          //送出一個(gè)字節(jié)  
  131.                                           WriteByte(~table[3][2*num]);
  132.                         
  133.                                           WriteByte(~table[1][2*num+1]);          //送出一個(gè)字節(jié)  
  134.                                           WriteByte(~table[1][2*num]);
  135.                         
  136.                         
  137.                                           P1=num;     //行選
  138.                                           STB=0;          //輸出鎖存器中的數(shù)據(jù)
  139.                                           STB=1;                  
  140.                                           delay(1);
  141.                                 }
  142.                         }         break;  
  143.         
  144.                         case 1:
  145.                          {
  146.                                  for(num=0;num<16;num++)  //時(shí)鐘顯示88:88:88
  147.                                 {
  148.                                           WriteByte(~tab[miao%10][num]);          //小時(shí)十位  
  149.                         
  150.                                           WriteByte(~tab[miao/10][num]);          //小時(shí)個(gè)位  
  151.                                           
  152.                                           if(cont>=10)
  153.                                           WriteByte(~tab[10][num]);          //顯示‘:’號(hào)   
  154.                                           else
  155.                                           WriteByte(~tab[11][num]);           //不顯
  156.                                           
  157.                                           WriteByte(~tab[fen%10][num]);          //分鐘十位  
  158.                         
  159.                                           WriteByte(~tab[fen/10][num]);          //分鐘個(gè)位
  160.                                           
  161.                                           if(cont>=10)
  162.                                           WriteByte(~tab[10][num]);          //顯示‘:’號(hào)
  163.                                           else
  164.                                           WriteByte(~tab[11][num]);           //不顯
  165.                         
  166.                                           WriteByte(~tab[shi%10][num]);          //秒鐘十位  
  167.                         
  168.                                           WriteByte(~tab[shi/10][num]);          //秒鐘個(gè)位  
  169.                         
  170.                                           P1=num;     //行選
  171.                                           STB=0;           
  172.                                           STB=1;        //輸出鎖存器中的數(shù)據(jù),上升沿         
  173.                                           delay(1);
  174.                                 }
  175.                   }        break;           
  176.                   
  177.                   case 2:
  178.         
  179.                   {
  180.                           if(++speed>4)   //移動(dòng)速度控制
  181.                          {
  182.                                  speed=0;
  183.                                 move++;    //移位
  184.                                 if(move>16)  //是否完成移位一個(gè)漢字
  185.                                         move=0;  //從頭開始
  186.                          }
  187.                         
  188.                         
  189.                         for(num=0;num<16;num++)  //上移 顯示4個(gè)漢字 "點(diǎn)陣時(shí)鐘"                74HC154+反相器,行高,74HC595 列低 ,數(shù)據(jù)取反
  190.                         {
  191.                                   WriteByte(~table[7][2*num+1+move*2]);          //送出一個(gè)字節(jié)  
  192.                                   WriteByte(~table[7][2*num+move*2]);
  193.                
  194.                                   WriteByte(~table[5][2*num+1+move*2]);          //送出一個(gè)字節(jié)  
  195.                                   WriteByte(~table[5][2*num+move*2]);
  196.                
  197.                                   WriteByte(~table[3][2*num+1+move*2]);          //送出一個(gè)字節(jié)  
  198.                                   WriteByte(~table[3][2*num+move*2]);
  199.                
  200.                                   WriteByte(~table[1][2*num+1+move*2]);          //送出一個(gè)字節(jié)  
  201.                                   WriteByte(~table[1][2*num+move*2]);
  202.                
  203.                                   P1=num;     //行選
  204.                                   STB=0;          //輸出鎖存器中的數(shù)據(jù)
  205.                                   STB=1;                  
  206.                                   delay(1);
  207.                         }
  208.                   
  209.                   }        break;
  210.                   
  211.                   case 3:
  212.         
  213.                   {
  214.                           if(++speed>4)   //移動(dòng)速度控制
  215.                          {
  216.                                  speed=0;
  217.                                 move++;    //移位
  218.                                 if(move>16)  //是否完成移位一個(gè)漢字
  219.                                         move=0;  //從頭開始
  220.                          }
  221.                         
  222.                         
  223.                         for(num=0;num<16;num++)  //上移 顯示4個(gè)漢字 "點(diǎn)陣時(shí)鐘"                74HC154+反相器,行高,74HC595 列低 ,數(shù)據(jù)取反
  224.                         {
  225.                                   WriteByte(~table[7][2*num+1-move*2]);          //送出一個(gè)字節(jié)  
  226.                                   WriteByte(~table[7][2*num-move*2]);
  227.                
  228.                                   WriteByte(~table[5][2*num+1-move*2]);          //送出一個(gè)字節(jié)  
  229.                                   WriteByte(~table[5][2*num-move*2]);
  230.                
  231.                                   WriteByte(~table[3][2*num+1-move*2]);          //送出一個(gè)字節(jié)  
  232.                                   WriteByte(~table[3][2*num-move*2]);
  233.                
  234.                                   WriteByte(~table[1][2*num+1-move*2]);          //送出一個(gè)字節(jié)  
  235.                                   WriteByte(~table[1][2*num-move*2]);
  236.                
  237.                                   P1=num;     //行選
  238.                                   STB=0;          //輸出鎖存器中的數(shù)據(jù)
  239.                                   STB=1;                  
  240.                                   delay(1);
  241.                         }
  242.                   
  243.                   }        break;  
  244.                   
  245.                 }
  246.         }        
  247. }

  248. void timer0() interrupt 1
  249. {
  250.         TH0=(65536-50000)/256;
  251.         TL0=(65536-50000)%256;
  252.         
  253.         cont++;
  254.         num++;

  255.         if(cont==20)
  256.         {        
  257.                 cont=0;
  258.                 miao++;
  259.                 if(miao==60)
  260.                 {
  261.                         miao=0;
  262.                         fen++;
  263.                         if(fen==60)
  264.                         {
  265.                                 fen=0;
  266.                                 shi++;
  267.                                 if(shi==24)
  268.                                         shi=0;
  269.                         }
  270.                 }
  271.         }

  272.         if(num==60)           //3秒鐘換1種顯示
  273.         {
  274.                 num=0;
  275.                 xs++;
  276.                 if(xs==4)
  277.                         xs=0;
  278.         }
  279. }
復(fù)制代碼
完整的文件在附件里面: 16x64 -595 138 -時(shí)鐘.rar (304.83 KB, 下載次數(shù): 184)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:84791 發(fā)表于 2020-10-8 04:34 | 顯示全部樓層
不錯(cuò),樓主辛苦了。這個(gè)還是很受用的,好資料。
回復(fù)

使用道具 舉報(bào)

ID:1089144 發(fā)表于 2023-7-20 21:19 | 顯示全部樓層
這個(gè)資料不錯(cuò),正在學(xué)習(xí)驅(qū)動(dòng)點(diǎn)陣,多謝!
回復(fù)

使用道具 舉報(bào)

ID:1085441 發(fā)表于 2023-7-20 23:20 | 顯示全部樓層
74HC595可以用5020芯片,5020等于恒流輸出的74HC595,不需要限流電阻,顯示亮度更高。
行驅(qū)動(dòng)也有大功率芯片,不記得具體型號(hào)了,應(yīng)該容易找
回復(fù)

使用道具 舉報(bào)

ID:1089144 發(fā)表于 2023-7-23 18:29 | 顯示全部樓層
這個(gè)資料8不錯(cuò),正在學(xué)習(xí)點(diǎn)陣驅(qū)動(dòng)。準(zhǔn)備按這個(gè)電路做一塊板。
回復(fù)

使用道具 舉報(bào)

ID:1090025 發(fā)表于 2023-7-29 20:29 | 顯示全部樓層
Thank for sharing, learn
回復(fù)

使用道具 舉報(bào)

ID:138707 發(fā)表于 2023-8-12 17:10 | 顯示全部樓層
這個(gè)資料8不錯(cuò),正在學(xué)習(xí)點(diǎn)陣驅(qū)動(dòng)。準(zhǔn)備按這個(gè)電路做一塊板。
回復(fù)

使用道具 舉報(bào)

ID:1112603 發(fā)表于 2024-6-18 09:21 | 顯示全部樓層
正在學(xué)習(xí)點(diǎn)陣字符移動(dòng),謝謝分享!但感覺移動(dòng)得不夠絲滑。
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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