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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

16*64點陣時鐘仿真+源程序

  [復制鏈接]
跳轉到指定樓層
樓主
16*64點陣仿真,74HC138做行驅動,74HC595做列驅動,文字上移、下移、靜止顯示,時鐘“:”閃爍;有完整的源程序和仿真文件;
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源碼:
  1. /************16*16LED點陣屏顯示*****************/
  2. #include<reg52.h>
  3. #include<intrins.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. sbit R=P2^0;          //595數據輸入端口
  7. sbit CLK=P2^1;          //595 時鐘信號
  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,橫向取模左高位,數據排列:從左到右從上到下 ,對應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. /*"點",*/ 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. /*"時",*/ 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循環將8位數據一次移入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個漢字
  123.                                 {
  124.                                           WriteByte(~table[7][2*num+1]);          //送出一個字節  
  125.                                           WriteByte(~table[7][2*num]);
  126.                         
  127.                                           WriteByte(~table[5][2*num+1]);          //送出一個字節  
  128.                                           WriteByte(~table[5][2*num]);
  129.                         
  130.                                           WriteByte(~table[3][2*num+1]);          //送出一個字節  
  131.                                           WriteByte(~table[3][2*num]);
  132.                         
  133.                                           WriteByte(~table[1][2*num+1]);          //送出一個字節  
  134.                                           WriteByte(~table[1][2*num]);
  135.                         
  136.                         
  137.                                           P1=num;     //行選
  138.                                           STB=0;          //輸出鎖存器中的數據
  139.                                           STB=1;                  
  140.                                           delay(1);
  141.                                 }
  142.                         }         break;  
  143.         
  144.                         case 1:
  145.                          {
  146.                                  for(num=0;num<16;num++)  //時鐘顯示88:88:88
  147.                                 {
  148.                                           WriteByte(~tab[miao%10][num]);          //小時十位  
  149.                         
  150.                                           WriteByte(~tab[miao/10][num]);          //小時個位  
  151.                                           
  152.                                           if(cont>=10)
  153.                                           WriteByte(~tab[10][num]);          //顯示‘:’號   
  154.                                           else
  155.                                           WriteByte(~tab[11][num]);           //不顯
  156.                                           
  157.                                           WriteByte(~tab[fen%10][num]);          //分鐘十位  
  158.                         
  159.                                           WriteByte(~tab[fen/10][num]);          //分鐘個位
  160.                                           
  161.                                           if(cont>=10)
  162.                                           WriteByte(~tab[10][num]);          //顯示‘:’號
  163.                                           else
  164.                                           WriteByte(~tab[11][num]);           //不顯
  165.                         
  166.                                           WriteByte(~tab[shi%10][num]);          //秒鐘十位  
  167.                         
  168.                                           WriteByte(~tab[shi/10][num]);          //秒鐘個位  
  169.                         
  170.                                           P1=num;     //行選
  171.                                           STB=0;           
  172.                                           STB=1;        //輸出鎖存器中的數據,上升沿         
  173.                                           delay(1);
  174.                                 }
  175.                   }        break;           
  176.                   
  177.                   case 2:
  178.         
  179.                   {
  180.                           if(++speed>4)   //移動速度控制
  181.                          {
  182.                                  speed=0;
  183.                                 move++;    //移位
  184.                                 if(move>16)  //是否完成移位一個漢字
  185.                                         move=0;  //從頭開始
  186.                          }
  187.                         
  188.                         
  189.                         for(num=0;num<16;num++)  //上移 顯示4個漢字 "點陣時鐘"                74HC154+反相器,行高,74HC595 列低 ,數據取反
  190.                         {
  191.                                   WriteByte(~table[7][2*num+1+move*2]);          //送出一個字節  
  192.                                   WriteByte(~table[7][2*num+move*2]);
  193.                
  194.                                   WriteByte(~table[5][2*num+1+move*2]);          //送出一個字節  
  195.                                   WriteByte(~table[5][2*num+move*2]);
  196.                
  197.                                   WriteByte(~table[3][2*num+1+move*2]);          //送出一個字節  
  198.                                   WriteByte(~table[3][2*num+move*2]);
  199.                
  200.                                   WriteByte(~table[1][2*num+1+move*2]);          //送出一個字節  
  201.                                   WriteByte(~table[1][2*num+move*2]);
  202.                
  203.                                   P1=num;     //行選
  204.                                   STB=0;          //輸出鎖存器中的數據
  205.                                   STB=1;                  
  206.                                   delay(1);
  207.                         }
  208.                   
  209.                   }        break;
  210.                   
  211.                   case 3:
  212.         
  213.                   {
  214.                           if(++speed>4)   //移動速度控制
  215.                          {
  216.                                  speed=0;
  217.                                 move++;    //移位
  218.                                 if(move>16)  //是否完成移位一個漢字
  219.                                         move=0;  //從頭開始
  220.                          }
  221.                         
  222.                         
  223.                         for(num=0;num<16;num++)  //上移 顯示4個漢字 "點陣時鐘"                74HC154+反相器,行高,74HC595 列低 ,數據取反
  224.                         {
  225.                                   WriteByte(~table[7][2*num+1-move*2]);          //送出一個字節  
  226.                                   WriteByte(~table[7][2*num-move*2]);
  227.                
  228.                                   WriteByte(~table[5][2*num+1-move*2]);          //送出一個字節  
  229.                                   WriteByte(~table[5][2*num-move*2]);
  230.                
  231.                                   WriteByte(~table[3][2*num+1-move*2]);          //送出一個字節  
  232.                                   WriteByte(~table[3][2*num-move*2]);
  233.                
  234.                                   WriteByte(~table[1][2*num+1-move*2]);          //送出一個字節  
  235.                                   WriteByte(~table[1][2*num-move*2]);
  236.                
  237.                                   P1=num;     //行選
  238.                                   STB=0;          //輸出鎖存器中的數據
  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. }
復制代碼
完整的文件在附件里面: 16x64 -595 138 -時鐘.rar (304.83 KB, 下載次數: 184)


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:84791 發表于 2020-10-8 04:34 | 只看該作者
不錯,樓主辛苦了。這個還是很受用的,好資料。
回復

使用道具 舉報

無效樓層,該帖已經被刪除
無效樓層,該帖已經被刪除
5#
無效樓層,該帖已經被刪除
6#
ID:1089144 發表于 2023-7-20 21:19 | 只看該作者
這個資料不錯,正在學習驅動點陣,多謝!
回復

使用道具 舉報

7#
ID:1085441 發表于 2023-7-20 23:20 | 只看該作者
74HC595可以用5020芯片,5020等于恒流輸出的74HC595,不需要限流電阻,顯示亮度更高。
行驅動也有大功率芯片,不記得具體型號了,應該容易找
回復

使用道具 舉報

8#
ID:1089144 發表于 2023-7-23 18:29 | 只看該作者
這個資料8不錯,正在學習點陣驅動。準備按這個電路做一塊板。
回復

使用道具 舉報

9#
ID:1090025 發表于 2023-7-29 20:29 | 只看該作者
Thank for sharing, learn
回復

使用道具 舉報

10#
無效樓層,該帖已經被刪除
11#
ID:138707 發表于 2023-8-12 17:10 | 只看該作者
這個資料8不錯,正在學習點陣驅動。準備按這個電路做一塊板。
回復

使用道具 舉報

12#
ID:1112603 發表于 2024-6-18 09:21 | 只看該作者
正在學習點陣字符移動,謝謝分享!但感覺移動得不夠絲滑。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久精品青青大伊人av | 免费观看一级黄色录像 | 成人亚洲视频 | 欧美精品一区在线 | 午夜电影网 | 日本小视频网站 | 国产免费一区二区 | 黄在线免费观看 | 玖玖国产| 日韩欧美在线免费观看 | 免费观看一区二区三区毛片 | 精品国产乱码久久久 | av一级久久 | 亚洲精品一区中文字幕乱码 | 日韩福利视频 | 日日干日日操 | 久久久福利 | 91免费看片 | 国产激情视频在线观看 | 亚洲国产精品久久久久 | 羞羞视频在线观看网站 | 久久久久久久一区 | 亚洲人成网亚洲欧洲无码 | 欧美色性| 一级做a爰片性色毛片 | 国产综合视频 | 日本免费视频在线观看 | 国产精品久久久久久久久久久新郎 | 在线观看免费高清av | 一级一级毛片免费看 | 精品美女在线观看视频在线观看 | 国产区精品视频 | 日韩一区二区在线视频 | 免费的色网站 | 亚洲精品久久久久久一区二区 | 一区中文字幕 | 午夜久久久| 国产精品久久国产精品 | 天堂亚洲 | 亚洲精品久久久一区二区三区 | 日韩午夜影院 |