欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 16*64點陣時鐘仿真+源程序 [打印本頁]

作者: lids    時間: 2018-4-9 18:20
標題: 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)



作者: 537224    時間: 2020-10-8 04:34
不錯,樓主辛苦了。這個還是很受用的,好資料。
作者: superliew    時間: 2023-7-20 21:19
這個資料不錯,正在學習驅動點陣,多謝!
作者: cnfloatleaf    時間: 2023-7-20 23:20
74HC595可以用5020芯片,5020等于恒流輸出的74HC595,不需要限流電阻,顯示亮度更高。
行驅動也有大功率芯片,不記得具體型號了,應該容易找
作者: superliew    時間: 2023-7-23 18:29
這個資料8不錯,正在學習點陣驅動。準備按這個電路做一塊板。
作者: obenk    時間: 2023-7-29 20:29
Thank for sharing, learn
作者: ziba108    時間: 2023-8-12 17:10
這個資料8不錯,正在學習點陣驅動。準備按這個電路做一塊板。
作者: gzgy    時間: 2024-6-18 09:21
正在學習點陣字符移動,謝謝分享!但感覺移動得不夠絲滑。




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1