找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 24184|回復(fù): 43
打印 上一主題 下一主題
收起左側(cè)

16x16點(diǎn)陣電路圖及c51程序Proteus仿真74hc595 74hc164

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:84765 發(fā)表于 2015-7-4 16:59 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
電路圖:

16X16點(diǎn)陣圖
Proteus仿真文件下載及完整程序源碼: 16x16點(diǎn)陣.rar (70.65 KB, 下載次數(shù): 449)

評(píng)分

參與人數(shù) 4黑幣 +62 收起 理由
cxz19961010 + 5 很給力!
婧小婧 + 1 很給力!
qjzyx + 6 贊一個(gè)!
admin + 50 共享資料的積分獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:84791 發(fā)表于 2015-7-5 00:46 | 只看該作者
最近正想找有關(guān)點(diǎn)陣的資料,學(xué)習(xí)了,謝謝。
回復(fù)

使用道具 舉報(bào)

板凳
ID:1 發(fā)表于 2015-7-5 00:53 | 只看該作者
源代碼:
  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #define  DATAOUT P2    //P2 use as data,  you can change
  4. #define  SPEED  13

  5. void ymove(char dir,unsigned char *ptr,char speed);
  6. void xmove(char dir,unsigned char *ptr,char n,char speed);
  7. void delay(unsigned int a);
  8. void display();
  9. void displaytime(char time);
  10. void init164();

  11. sbit  ADATA=2^0;
  12. sbit  ASCK=2^1;
  13. sbit  LATCH=2^2;
  14. sbit  BDATA=2^3;
  15. sbit  BCLK=2^4;

  16. code unsigned char xin[32]={
  17.         0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x38,   //心
  18.       0x1F,0x7C,0x3F,0xFE,0x3F,0xFE,0x3F,0xFE,
  19.       0x1F,0xFC,0x0F,0xF8,0x07,0xF0,0x03,0xE0,
  20.       0x01,0xC0,0x00,0x80,0x00,0x00,0x00,0x00};

  21. code unsigned char zhong[32]={  
  22.         0x01,0x00,0x01,0x00,0x01,0x04,0x7F,0xFE,  //中
  23.       0x41,0x04,0x41,0x04,0x41,0x04,0x41,0x04,
  24.       0x7F,0xFC,0x41,0x04,0x01,0x00,0x01,0x00,
  25.       0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00};
  26.        
  27. code unsigned char guo[32]={
  28.         0x00,0x04,0x7F,0xFE,0x40,0x24,0x5F,0xF4,  //國(guó)
  29.       0x41,0x04,0x41,0x04,0x41,0x44,0x4F,0xE4,
  30.       0x41,0x04,0x41,0x44,0x41,0x24,0x41,0x04,
  31.       0x5F,0xF4,0x40,0x04,0x7F,0xFC,0x40,0x04};

  32. code unsigned char dui[32]={           
  33.         0x7C,0x40,0x44,0x40,0x48,0x40,0x48,0x40,  //隊(duì)
  34.       0x50,0x40,0x48,0x40,0x48,0x40,0x44,0xA0,
  35.       0x44,0xA0,0x44,0xA0,0x69,0x10,0x51,0x10,
  36.       0x42,0x08,0x44,0x06,0x48,0x04,0x00,0x00};

  37. code unsigned char jia[32]={                                        
  38.         0x10,0x00,0x10,0x00,0x10,0x04,0x12,0x7E,  //加
  39.       0xFF,0x44,0x12,0x44,0x12,0x44,0x12,0x44,
  40.       0x12,0x44,0x22,0x44,0x22,0x44,0x22,0x44,
  41.       0x22,0x44,0x4A,0x7C,0x84,0x44,0x00,0x00};

  42. code unsigned char you[32]={
  43.         0x00,0x40,0x40,0x40,0x30,0x40,0x10,0x44,  //油
  44.       0x87,0xFE,0x64,0x44,0x24,0x44,0x0C,0x44,
  45.       0x14,0x44,0x27,0xFC,0xE4,0x44,0x24,0x44,
  46.       0x24,0x44,0x24,0x44,0x27,0xFC,0x24,0x04 };

  47. code unsigned char gth[32]={
  48.         0x00,0x00,0x01,0x80,0x03,0xC0,0x03,0xC0,    //!
  49.       0x03,0xC0,0x03,0xC0,0x03,0xC0,0x01,0x80,
  50.       0x01,0x80,0x01,0x80,0x00,0x00,0x01,0x80,
  51.       0x03,0xC0,0x01,0x80,0x00,0x00,0x00,0x00};

  52. unsigned char idata buffer[32];

  53. void main(void)
  54. {
  55.         unsigned char i;
  56.         init164();
  57.         while(1)
  58.         {       
  59.                 for(i=0;i<32;i++)
  60.                         buffer[i]=xin[i];

  61.                 displaytime(1);
  62.                
  63.                 xmove(1,zhong,3,SPEED);
  64.                 displaytime(1);

  65.                 ymove(1,0,SPEED);
  66.                 ymove(1,jia,SPEED);
  67.                 ymove(1,you,SPEED);
  68.                 ymove(1,0,SPEED);
  69.                 xmove(0,jia,3,SPEED);
  70.                 ymove(0,gth,SPEED);
  71.                 ymove(0,0,SPEED);
  72.                 xmove(1,xin,1,SPEED);

  73.         }
  74. }
  75. /*************  子函數(shù)   ******************/
  76. void delay(unsigned int a)
  77. {
  78.         while(a--);
  79. }

  80. void display()
  81. {
  82.         unsigned char hang,ib,k,tmp;

  83.     DATAOUT= 0x0;
  84.         BDATA = 0;
  85.         for(hang=0;hang<16;hang++)
  86.         {
  87.                 ASCK =0;               
  88.                 LATCH=0;
  89.                 BCLK =0;
  90.                 for(ib=0;ib<2;ib++)
  91.                 {
  92.                         tmp = buffer[hang*2+ib];
  93.                         for(k=0;k<8;k++)
  94.                         {
  95.                                 tmp <<=1;
  96.                                 ASCK  =0;
  97.                                 ADATA =CY;
  98.                                 ASCK  =1;
  99.                         }
  100.                 }
  101.                 DATAOUT|=0x14;
  102.                 //LATCH=1;
  103.                 //BCLK=1;
  104.                 BDATA=1;
  105.         }
  106.         delay(64);
  107.         ASCK =0;
  108.         ASCK =1;
  109. }

  110. void displaytime(char time)
  111. {
  112.         unsigned char i;
  113.         while(time--)
  114.         {
  115.                 i=130;
  116.                 while(i--)
  117.                          display();
  118.         }
  119. }

  120. void init164()
  121. {
  122.         char i;
  123.         BDATA=1;
  124.         for(i=0;i<16;i++)
  125.         {
  126.                 BCLK =0;
  127.                 BCLK =1;
  128.         }
  129. }

  130. void xmove(char dir,unsigned char *ptr,char n,char speed)                                                                                                                                       
  131. {      /*       方向                    n是要移動(dòng)的漢字個(gè)數(shù)        移動(dòng)速度*/         
  132.         unsigned char  i=0,  ib=0;
  133.         unsigned int   tmp=0, speedm=0;
  134.         unsigned char  buffer2[16];         //半個(gè)漢字的緩存

  135.         n*=2;     //左半字和右半字,所以要x2             
  136.         for(i=0;i<16;i++)   //清零
  137.                 buffer2[i]=0;

  138.         if(dir == 1)     
  139.         {
  140. /****     向左移動(dòng)    ****/
  141.                 for(n;n>0;n--)   
  142.                 {               
  143.                         if(ptr != 0)
  144.                         {
  145.                                 tmp = n%2;        //判斷是左半字還是右半字
  146.                                 for(i=0;i<16;i++)
  147.                                         buffer2[i]=ptr[i*2+tmp];
  148.        
  149.                                 if(tmp)                //tmp為1時(shí),將地址指向下一個(gè)漢字
  150.                                         ptr+=32;
  151.                         }
  152.                          
  153.                         for(tmp=8;tmp>0;tmp--)  //要移動(dòng)8列       
  154.                         {                                  
  155.                                 ib=0;       
  156.                                 for(i=0;i<16;i++)
  157.                                 {                //要移16行,共16個(gè)字節(jié)
  158.                       
  159.                                         buffer[ib] <<=1; //移第一個(gè)半字
  160.                                         if(buffer[ib+1] & 0x80)       
  161.                                                 buffer[ib]++;
  162.                                         ib++;                       
  163.        
  164.                                         buffer[ib]<<=1;                //移后半字
  165.                                         if(buffer2[i] & 0x80)          
  166.                                                 buffer[ib]++;
  167.                                         ib++;
  168.        
  169.                                         buffer2[i]<<=1;                //緩沖左半字向左移一位
  170.                                 }
  171.                                
  172.                                 speedm=speed;        //更新點(diǎn)陣
  173.                                 while(speedm--)
  174.                                         display();
  175.                         }
  176.                 }
  177.         }
  178. //--------------------------------------------------//
  179.         else        
  180.         {
  181.    /******  向右移動(dòng)   ******/
  182.                 for(n;n>0;n--)
  183.                 {               
  184.                         if(ptr != 0)
  185.                         {
  186.                                 tmp = (n+1) % 2  ;        //判斷左半字還是右半字
  187.                                 for(i=0;i<16;i++)
  188.                                         buffer2[i]=ptr[i*2+tmp];
  189.                                                                
  190.                                 if(tmp == 0)                //tmp為0時(shí),將地址指向下一個(gè)漢字
  191.                                         ptr+=32;
  192.                         }
  193.                          
  194.                         for(tmp=8;tmp>0;tmp--)  //要移動(dòng)8列       
  195.                         {                                  
  196.                                 ib=0;       
  197.                                 for(i=0;i<16;i++)
  198.                                 {                //要移16行,共16個(gè)字節(jié)
  199.                       
  200.                                         buffer[ib+1] >>= 1;             //移右半字
  201.                                         if(buffer[ib] & 0x01)       
  202.                                                 buffer[ib+1] |=0x80 ;                       
  203.        
  204.                                         buffer[ib] >>= 1;            //移左半字
  205.                                         if(buffer2[i] & 0x01)          
  206.                                                 buffer[ib] |= 0x80;
  207.                                         ib+=2;
  208.        
  209.                                         buffer2[i] >>=1;                //下個(gè)漢字的右半字向右移一位
  210.                                 }
  211.                                
  212.                                 speedm=speed;       
  213.                                 while(speedm--)  //更新點(diǎn)陣
  214.                                         display();
  215.                         }
  216.                
  217.                 }
  218.         }

  219. }
  220. void ymove(char dir,unsigned char *ptr, char speed)
  221. {                   //dir=1上移動(dòng),dir=0為下移動(dòng)
  222.         char i=0, j=0, ib=0;
  223.         unsigned int  tmp=0, speedm=0;

  224.         if(dir==0)      
  225.         {       
  226.    /****  向下移  ****/
  227.                 ib=31;               
  228.                 for(i=16;i>0;i--)   //下移16行
  229.                 {               
  230.                         for(j=29;j>-1;j--)
  231.                                 buffer[j+2]=buffer[j];        //將上一行的內(nèi)容復(fù)制到下一行
  232.        
  233.                         if(ptr==0)
  234.                         {                                //移空時(shí),buffer的首行用0移入
  235.                                 buffer[0]=0;
  236.                                 buffer[1]=0;
  237.                         }
  238.                         else
  239.                         {                                //否則,處理buffer的首行元素               
  240.                             buffer[1]=ptr[ib];
  241.                                 buffer[0]=ptr[ib-1];
  242.                                 ib=ib-2;
  243.                         }
  244.                         speedm=speed;       
  245.                         while(speedm--)          //更新點(diǎn)陣
  246.                                 display();
  247.                 }
  248.         }

  249. /****** 向上移 *******/
  250.         else
  251.         {                       
  252.                 ib=0;          //數(shù)組元素序號(hào)
  253.                 for(i=0;i<16;i++)    //上移16行
  254.                 {       
  255.                         for(j=0;j<30;j++)           //將下一行的內(nèi)容復(fù)制到上一行
  256.                                 buffer[j]=buffer[j+2];

  257.                         if(ptr==0)        //移入為空,buffer的末行用0移入
  258.                         {                       
  259.                                 buffer[30]=0;
  260.                                 buffer[31]=0;
  261.                         }
  262.                         else
  263.                         {                        //否則,處理buffer的末行元素
  264.                                 buffer[30]=ptr[ib];
  265.                                 buffer[31]=ptr[ib+1];
  266.                                 ib=ib+2;                          
  267.                         }
  268.                         speedm=speed;        //更新點(diǎn)陣
  269.                         while(speedm--)
  270.                                 display();
  271.                    }
  272.            }
  273.                        
  274. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

地板
ID:111502 發(fā)表于 2016-3-30 21:34 | 只看該作者
最近正想找有關(guān)點(diǎn)陣的資料,學(xué)習(xí)了,謝謝
回復(fù)

使用道具 舉報(bào)

5#
ID:113117 發(fā)表于 2016-4-9 14:59 | 只看該作者
真的很有用,謝謝!
回復(fù)

使用道具 舉報(bào)

6#
ID:115697 發(fā)表于 2016-5-5 14:38 | 只看該作者
想下載看看那
回復(fù)

使用道具 舉報(bào)

7#
ID:105786 發(fā)表于 2016-5-9 11:54 | 只看該作者
正在學(xué)習(xí),好資料,收藏了
回復(fù)

使用道具 舉報(bào)

8#
ID:120571 發(fā)表于 2016-5-13 19:11 | 只看該作者
額,有詳細(xì)的解析嗎?
回復(fù)

使用道具 舉報(bào)

9#
ID:149414 發(fā)表于 2016-11-28 15:20 來自手機(jī) | 只看該作者
實(shí)物焊接是不是要加三極管和電阻?多大的電阻和三極管呢?
回復(fù)

使用道具 舉報(bào)

10#
ID:150858 發(fā)表于 2016-11-28 22:12 | 只看該作者
非常好 就是看不懂 但是能用就行
回復(fù)

使用道具 舉報(bào)

11#
ID:92673 發(fā)表于 2017-3-17 20:34 | 只看該作者
拿走了
回復(fù)

使用道具 舉報(bào)

12#
ID:175551 發(fā)表于 2017-3-20 22:02 | 只看該作者
學(xué)習(xí)了,謝謝。
回復(fù)

使用道具 舉報(bào)

13#
ID:168063 發(fā)表于 2017-4-11 12:01 | 只看該作者
正在學(xué)習(xí)點(diǎn)陣,謝謝
回復(fù)

使用道具 舉報(bào)

14#
ID:188665 發(fā)表于 2017-4-11 22:56 | 只看該作者
真的想學(xué)!很棒
回復(fù)

使用道具 舉報(bào)

15#
ID:188665 發(fā)表于 2017-4-11 22:58 | 只看該作者
這個(gè)學(xué)習(xí)資料蠻不錯(cuò)的,挺有用
回復(fù)

使用道具 舉報(bào)

16#
ID:269459 發(fā)表于 2018-1-3 21:30 來自手機(jī) | 只看該作者
單片機(jī)原理圖看不懂怎么辦
回復(fù)

使用道具 舉報(bào)

17#
ID:266116 發(fā)表于 2018-1-7 12:37 | 只看該作者
很好的學(xué)習(xí)資料~~~~~下個(gè)收藏!
回復(fù)

使用道具 舉報(bào)

18#
ID:272962 發(fā)表于 2018-1-7 22:49 | 只看該作者
正在學(xué)習(xí)中
回復(fù)

使用道具 舉報(bào)

19#
ID:273028 發(fā)表于 2018-1-8 09:42 | 只看該作者
哇 正好需要
謝謝
回復(fù)

使用道具 舉報(bào)

20#
ID:248486 發(fā)表于 2018-3-3 16:15 | 只看該作者
正是需要的部分,謝謝
回復(fù)

使用道具 舉報(bào)

21#
ID:298081 發(fā)表于 2018-3-27 23:50 | 只看該作者
謝謝樓主,贊一個(gè),學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

22#
ID:300431 發(fā)表于 2018-4-1 17:10 | 只看該作者
支持支持
回復(fù)

使用道具 舉報(bào)

23#
ID:299588 發(fā)表于 2018-4-9 10:18 來自手機(jī) | 只看該作者
牛叉叉一個(gè)
回復(fù)

使用道具 舉報(bào)

24#
ID:309050 發(fā)表于 2018-4-16 10:37 | 只看該作者

想下載看看那,可惜沒嗶嗶
回復(fù)

使用道具 舉報(bào)

25#
ID:315176 發(fā)表于 2018-4-24 11:16 | 只看該作者
謝謝大佬
回復(fù)

使用道具 舉報(bào)

26#
ID:329165 發(fā)表于 2018-5-14 09:42 | 只看該作者
厲害,很有用參考一下
回復(fù)

使用道具 舉報(bào)

27#
ID:290911 發(fā)表于 2018-5-16 14:26 | 只看該作者
謝謝了,需要
回復(fù)

使用道具 舉報(bào)

28#
ID:309376 發(fā)表于 2018-6-2 11:35 | 只看該作者
還是不錯(cuò)的
回復(fù)

使用道具 舉報(bào)

29#
ID:302841 發(fā)表于 2018-6-2 16:11 | 只看該作者
正好要學(xué)習(xí),下載下來學(xué)習(xí)。
回復(fù)

使用道具 舉報(bào)

30#
ID:463391 發(fā)表于 2019-1-7 00:05 | 只看該作者
優(yōu)秀 大神
回復(fù)

使用道具 舉報(bào)

31#
ID:488398 發(fā)表于 2019-3-11 11:22 | 只看該作者
棒。。
回復(fù)

使用道具 舉報(bào)

32#
ID:554793 發(fā)表于 2019-12-1 21:30 | 只看該作者
自己用面包板弄了一個(gè),顯示的文字成鏡像的了,,這要怎么調(diào)
回復(fù)

使用道具 舉報(bào)

33#
ID:554793 發(fā)表于 2019-12-1 21:32 | 只看該作者
自己用面包板弄了一個(gè),顯示的字成鏡像了,,這個(gè)怎么調(diào)
回復(fù)

使用道具 舉報(bào)

34#
ID:554793 發(fā)表于 2019-12-3 19:37 | 只看該作者
怎樣增加字
回復(fù)

使用道具 舉報(bào)

35#
ID:676927 發(fā)表于 2019-12-30 14:39 | 只看該作者
非常感謝
回復(fù)

使用道具 舉報(bào)

36#
ID:676927 發(fā)表于 2019-12-30 14:46 | 只看該作者
164的作用是什么?
回復(fù)

使用道具 舉報(bào)

37#
ID:160661 發(fā)表于 2020-3-21 14:20 | 只看該作者
學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

38#
ID:612563 發(fā)表于 2020-4-25 01:02 來自手機(jī) | 只看該作者
嘗試做做
回復(fù)

使用道具 舉報(bào)

39#
ID:66679 發(fā)表于 2020-4-25 11:18 | 只看該作者
地方臺(tái)榮譽(yù)成員 發(fā)表于 2019-12-1 21:32
自己用面包板弄了一個(gè),顯示的字成鏡像了,,這個(gè)怎么調(diào)

字模重新取一下
回復(fù)

使用道具 舉報(bào)

40#
ID:66679 發(fā)表于 2020-4-25 11:19 | 只看該作者
LINJIONG 發(fā)表于 2019-12-30 14:46
164的作用是什么?

串行轉(zhuǎn)并行
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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