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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

16*32LED點陣的51單片機源碼和原理圖

[復制鏈接]
跳轉到指定樓層
樓主
這是原理圖

下載:
16X32點陣源碼51.zip (56.44 KB, 下載次數: 49)

單片機程序源碼:
  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #define  DATAOUT P1    //P3 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. void kong(char dir, char speed);
  12. void fanzhuan(unsigned char  *p);
  13. sbit  ADATA= DATAOUT^1;//DS
  14. sbit  ASCK=  DATAOUT^2;//SCK
  15. sbit  LATCH= DATAOUT^3;//LATCH
  16. sbit  BDATA= DATAOUT^4;//RDATA
  17. sbit  BCLK=  DATAOUT^6;//CLK

  18. sbit K1 =P0^0;
  19. sbit K2 =P0^1;
  20. sbit K3 =P0^2;
  21. //OE接低電平
  22. //MR接高電平
  23. //CLR接高電平
  24. unsigned char  idata buffer[64];
  25. unsigned char   bigbuffer[194];
  26. unsigned char   comm_len;
  27. unsigned char   BSBUF=0;
  28. unsigned char iii;                //全局當前顯示第幾個字

  29. void Delay10ms()                //@11.0592MHz
  30. {
  31.         unsigned char i, j;

  32.         i = 18;
  33.         j = 235;
  34.         do
  35.         {
  36.                 while (--j);
  37.         } while (--i);
  38. }


  39. void UART_Init(void)//串口初始化函數
  40. {
  41.         SCON=0X50; //串口方式1,允許接收
  42.     TMOD|=0X20; //定時器1 定時方式2  T0 is mode 1\

  43.         TH1=0xfd;       //Baud:9600  fosc=11.0592MHz
  44.         TL1=0xfd;  

  45.     TR1=1;    //啟動定時器
  46.    
  47.         ES = 1;                //開串口中斷
  48.         EA = 1;                //開總中斷

  49. }       



  50. void main(void)
  51. {
  52.         unsigned char i;

  53.         init164();
  54.         UART_Init();
  55.         for(i=0;i<194;i++)
  56.         {
  57.         bigbuffer[i]=0x00;
  58.         }



  59.         //fanzhuan(&bigbuffer[1]);
  60.   //for(i=0;i<32;i++)
  61. //        buffer[i+32]=buffer[i];
  62.         while(1)
  63.         {
  64.         if(bigbuffer[0]==0x16)
  65.         {
  66.         for(iii=0;iii<bigbuffer[1];iii++)
  67.         {
  68.           ymove(1,&bigbuffer[2+iii*32],SPEED);
  69.         }
  70.         }
  71.         else  if(bigbuffer[0]==0x15)
  72.         for(iii=0;iii<bigbuffer[1];iii++)
  73.         {
  74.           ymove(0,&bigbuffer[2+iii*32],SPEED);
  75.         }
  76.         else
  77.         display();
  78.         }
  79. }
  80. /*************  子函數   ******************/
  81. void delay(unsigned int a)        //延時函數
  82. {
  83.         while(a--);
  84. }
  85. void fanzhuan(unsigned char  *p)
  86. {
  87. unsigned char i,j,k,temp,*w,temp1,temp2,temp3;                                                                  
  88. w=p;
  89. for(i=0;i<8;i++) //左下角的8*8 翻轉后位于左上角
  90. {
  91. temp=0x00;
  92.   for(j=0;j<8;j++)
  93.   {
  94.          temp1= *(p+30-j*2) ;
  95.          temp2=temp1<<i;
  96.          temp3=temp2&0x80;
  97.          temp3=temp3>>j;
  98.          temp=temp|temp3;

  99.   
  100.   }
  101.   buffer[i*2]=temp;
  102. }
  103. for(i=0;i<8;i++) //左上角的8*8         反轉后位于右上角
  104. {
  105. temp=0x00;
  106.   for(j=0;j<8;j++)
  107.   {
  108.          temp1= *(p+14-j*2);
  109.          temp2=temp1<<i;
  110.          temp3=temp2&0x80;
  111.          temp3>>=j;
  112.          temp|=temp3;
  113.   }
  114.   buffer[i*2+1]=temp;
  115. }

  116. for(i=0;i<8;i++) //右上角的8*8         反轉后位于右下角
  117. {
  118. temp=0x00;
  119.   for(j=0;j<8;j++)
  120.   {
  121.          temp1= *(p+15-j*2);
  122.          temp2=temp1<<i;
  123.          temp3=temp2&0x80;
  124.          temp3>>=j;
  125.          temp|=temp3;
  126.   }
  127.   buffer[i*2+17]=temp;
  128. }
  129. for(i=0;i<8;i++) //右下角的8*8         反轉后位于左下角
  130. {
  131. temp=0x00;
  132.   for(j=0;j<8;j++)
  133.   {
  134.          temp1= *(p+31-j*2);
  135.          temp2=temp1<<i;
  136.          temp3=temp2&0x80;
  137.          temp3>>=j;
  138.          temp|=temp3;
  139.   }
  140.   buffer[i*2+16]=temp;
  141. }
  142. }

  143. /*顯示*/


  144. void display()        //顯示buffer里32*16的數據
  145. {
  146.         unsigned char hang,ib,k,tmp;

  147.     DATAOUT= 0x0;
  148.         BDATA = 1 ;
  149.         for(hang=0;hang<16;hang++)
  150.         {
  151.                 ASCK =0;               
  152.                 LATCH=0;
  153.                 BCLK =0;
  154.                 for(ib=0;ib<2;ib++)
  155.                 {
  156.                         tmp = buffer[hang*2+ib];
  157.                         for(k=0;k<8;k++)
  158.                         {
  159.                                 tmp <<=1;
  160.                                 ASCK  =0;
  161.                                 ADATA =CY;
  162.                                 ASCK  =1;
  163.                         }


  164.                 }
  165.                                 for(ib=0;ib<2;ib++)
  166.                 {
  167.                         tmp = buffer[hang*2+ib+32];
  168.                         for(k=0;k<8;k++)
  169.                         {
  170.                                 tmp <<=1;
  171.                                 ASCK  =0;
  172.                                 ADATA =CY;
  173.                                 ASCK  =1;
  174.                         }


  175.                 }
  176.                 //DATAOUT|=0x14;
  177.                 LATCH=1;
  178.                 BCLK=1;
  179.                 BDATA=0;
  180.        
  181.         }
  182.         delay(64);
  183.         ASCK =0;
  184.         ASCK =1;
  185. }

  186. void displaytime(char time)                //循環刷新顯示
  187. {
  188.         unsigned char i;
  189.         while(time--)
  190.         {
  191.                 i=130;
  192.                 while(i--)
  193.                          display();
  194.         }
  195. }

  196. /*74ls164,74ls595的初始化*/

  197. void init164()
  198. {

  199.         char i;
  200.         BDATA=0;
  201.         for(i=0;i<16;i++)  //清空164
  202.         {
  203.                 BCLK =0;
  204.                 BCLK =1;
  205.         }


  206.         for(i=0;i<32;i++)        //清空595
  207.         {
  208.                        
  209.                 ASCK  =0;
  210.                 ADATA =0;
  211.                 ASCK  =1;
  212.         }
  213. }

  214. /*左右移動*/
  215. void ymove(char dir,unsigned char *ptr, char speed)
  216. {                   //dir=1左移動,dir=0為右移動
  217.         char i=0, j=0, ib=0;
  218.         unsigned int  tmp=0, speedm=0;

  219.         if(dir==0)      
  220.         {       
  221.    /****  向右移  ****/
  222.                 ib=31;               
  223.                 for(i=16;i>0;i--)   //下移16行
  224.                 {               
  225.                         for(j=61;j>-1;j--)
  226.                                 buffer[j+2]=buffer[j];        //將上一行的內容復制到下一行
  227.        
  228.                         if(ptr==0)
  229.                         {                                //移空時,buffer的首行用0移入
  230.                                 buffer[0]=0;
  231.                                 buffer[1]=0;
  232.                         }
  233.                         else
  234.                         {                                //否則,處理buffer的首行元素               
  235.                             buffer[1]=ptr[ib];
  236.                                 buffer[0]=ptr[ib-1];
  237.                                 ib=ib-2;
  238.                         }
  239.                         speedm=speed;       
  240.                         while(speedm--)          //更新點陣
  241.                                 display();
  242.                 }
  243.         }

  244. /****** 向左移 *******/
  245.         else
  246.         {                       
  247.                 ib=0;          //數組元素序號
  248.                 for(i=0;i<16;i++)    //上移16行
  249.                 {                               
  250.                         for(j=0;j<62;j++)           //將下一行的內容復制到上一行
  251.                                 buffer[j]=buffer[j+2];

  252.                         if(ptr==0)        //移入為空,buffer的末行用0移入
  253.                         {                       
  254.                                 buffer[62]=0;
  255.                                 buffer[63]=0;
  256.                         }
  257.                         else
  258.                         {                        //否則,處理buffer的末行元素
  259.                                 buffer[62]=ptr[ib];
  260.                                 buffer[63]=ptr[ib+1];
  261.                                 ib=ib+2;                          
  262.                         }
  263.                         speedm=speed;        //更新點陣
  264.                         while(speedm--)
  265.                                 display();
  266.                    }
  267.            }                       
  268. }
  269. void kong(char dir, char speed)
  270. {                   //dir=1左移動,dir=0為右移動
  271.         char i=0, j=0, ib=0;
  272.         unsigned int  tmp=0, speedm=0;

  273.         if(dir==0)      
  274.         {       
  275.    /****  向左移  ****/
  276.                 ib=31;               
  277.                 for(i=8;i>0;i--)   //下移16行
  278.                 {               
  279.                         for(j=61;j>-1;j--)
  280.                                 buffer[j+2]=buffer[j];        //將上一行的內容復制到下一行
  281.        
  282.                                 buffer[0]=0;
  283.                                 buffer[1]=0;
  284.                         speedm=speed;       
  285.                         while(speedm--)          //更新點陣
  286.                                 display();
  287.                 }
  288.         }
  289. /****** 向右移 *******/
  290.         else
  291.         {                       
  292.                 ib=0;          //數組元素序號
  293.                 for(i=0;i<8;i++)    //上移16行
  294.                 {                               
  295.                         for(j=0;j<62;j++)           //將下一行的內容復制到上一行
  296.                                 buffer[j]=buffer[j+2];


  297.                                 buffer[62]=0;
  298.                                 buffer[63]=0;
  299.                                 ib=ib+2;                          
  300.                        
  301.                         speedm=speed;        //更新點陣
  302.                         while(speedm--)
  303.                                 display();
  304.                    }
  305.            }                       
  306. }
  307. void uart_get_int(void) interrupt  4//串口中斷接收函數
  308. {
  309. unsigned char i,j,k;
  310. RI=0;

  311.   if(SBUF==0XEF&&BSBUF==0xFE)  //啟始幀
  312.   {
  313.    comm_len=0;
  314.    return;

  315.   }
  316.   BSBUF=SBUF;

  317.    bigbuffer[comm_len]=SBUF;
  318.    comm_len++;

  319.          if(comm_len==194)        //所有數據接受完畢 串口發送數據 字模轉換 主函數里面滾屏
  320.          {
  321.           comm_len=0;
  322.           if(bigbuffer[0]==11)return;
  323.           iii=bigbuffer[1]-1;
  324.       for(i=0;i<194;i++)
  325.           {     
  326.            SBUF= bigbuffer[i];
  327.            while(!TI);         
  328.             TI=0;
  329.       }

  330.           for(j=0;j<6;j++)//6個漢字的字模轉換
  331.           {

  332.                   fanzhuan(&bigbuffer[2+j*32]);
  333.                 for(k=0;k<32;k++)
  334.                 {
  335.                  bigbuffer[2+j*32+k]=buffer[k];
  336.                 }
  337.           }
  338.      }
  339. }
  340. void saomiao()
  341. {
  342.         if(K1==0)
  343.         {
  344.         Delay10ms();
  345.         if(K1==0)
  346.         {
  347.          
  348.         }
  349.         }
  350. }

復制代碼


評分

參與人數 1黑幣 +5 收起 理由
WEIDADETG + 5 很給力!

查看全部評分

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

使用道具 舉報

沙發
ID:237140 發表于 2018-1-16 08:42 | 只看該作者
很好,謝謝!
回復

使用道具 舉報

板凳
ID:267393 發表于 2018-1-16 11:15 | 只看該作者
如果有仿真的話希望樓主也一起放上來,謝謝
回復

使用道具 舉報

地板
ID:430280 發表于 2018-12-2 23:16 | 只看該作者
垃圾,沒有一點用
回復

使用道具 舉報

5#
ID:337540 發表于 2019-3-28 13:46 | 只看該作者
感謝樓主
回復

使用道具 舉報

6#
ID:337540 發表于 2019-4-16 21:52 | 只看該作者
樓主,下載下來只有代碼,原理圖呢?
回復

使用道具 舉報

7#
ID:514161 發表于 2019-4-16 23:06 來自觸屏版 | 只看該作者
感謝樓主
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久爱综合 | 在线免费观看a级片 | 国产视频一视频二 | 免费在线观看黄视频 | 国产精品久久久久久久久久妇女 | 精品在线观看一区二区 | 亚洲精品国产综合区久久久久久久 | 一区二区免费 | 久久久蜜臀国产一区二区 | 精品久久网 | 免费一级黄色电影 | 日韩欧美国产一区二区三区 | 国产91综合一区在线观看 | 色天堂视频| 精品久久久久久久久久 | 欧美精品中文字幕久久二区 | 国产在线精品一区二区三区 | 国产免费看 | 国产不卡视频 | 福利视频一区二区 | 国产女人叫床高潮大片免费 | 成人小视频在线观看 | 国产成人高清成人av片在线看 | 欧美精品一区在线观看 | 在线播放91 | 欧美精品久久久 | 午夜精品 | 很很干很很日 | 亚洲日本欧美日韩高观看 | 国产一区二区影院 | 91精品国产综合久久精品 | 一区二区免费 | 欧美久久久久久久久 | 国产精品久久久久久久久久妇女 | 国产成人精品一区二区三区网站观看 | 亚洲精品无 | 久久在线 | 亚洲网站在线 | 亚洲激情在线 | 欧美在线小视频 | 国产高清在线精品一区二区三区 |