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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

德飛萊ly-51s單片機程序求解讀

[復制鏈接]
跳轉到指定樓層
樓主
ID:562262 發表于 2021-3-19 22:20 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
如圖所示的一個16*16點陣顯示左移的示例程序,這里是主函數部分,我知道怎么靜態顯示一個漢字,但是搞不懂他這個是怎么在左移。求告知!!v4.0資料鏈接如附件
  1. /*-----------------------------------------------
  2.   名稱:16x16漢字屏流動顯示
  3.   編寫:shifang
  4.   日期:2009.5
  5.   修改:bob_write 2021.3
  6.   硬件:LY-51S V4.0 單片機開發板
  7.   內容:
  8.         P1.0-P1.3分別連接A、B、C、D,用于控制16行,通過2路HC138控制
  9.                                 SER接P1.4 通過2片HC595控制
  10.                                 CLK時鐘連接P1.5
  11.                                 LAT鎖存連接P1.6
  12.                                 OE接P1.7

  13.   現象:使用普通速度51系列單片機。1個漢字顯示屏,向左流動顯示多個漢字,重復循環顯示。
  14. ------------------------------------------------*/
  15. #include<reg52.h>
  16. #include <intrins.h>

  17. sbit J32_LAT = P1^6;                //鎖存引腳
  18. sbit J32_SER = P1^4;                //數據引腳
  19. sbit J32_CLK = P1^5;          //時鐘引腳
  20. sbit J32_OE  = P1^7;          //使能引腳
  21. sbit KEY = P0^5;                                                  //獨立按鍵

  22. unsigned char MoveBitNum,MoveBitNumtemp,IncNum;//移動位數,臨時移動位數,大于一個字節增加字節數
  23. unsigned int HzNum;//漢字個數
  24. unsigned char buff[10];

  25. /*-----------------------------------------------
  26.              16x16漢字取模數據
  27. ------------------------------------------------*/
  28. unsigned char code hztest[][32]=    //取模選擇字節正序n行32列的數組,長度是固定的
  29. {
  30.         
  31.         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  32.         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //前面一屏大小的空字符,不顯示,這里根據屏的大小修改,這個是1個漢字屏
  33.         //所以寫入1個漢字

  34. /*--  文字:  電  --*/
  35. /*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
  36. 0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xF8,0x21,0x08,0x21,0x08,0x21,0x08,0x3F,0xF8,
  37. 0x21,0x08,0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x0A,0x01,0x02,0x01,0x02,0x00,0xFE,

  38. /*--  文字:  子  --*/
  39. /*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
  40. 0x00,0x00,0x7F,0xF8,0x00,0x10,0x00,0x20,0x00,0x40,0x01,0x80,0x01,0x00,0xFF,0xFE,
  41. 0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00,

  42. /*--  文字:  信  --*/
  43. /*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
  44. 0x08,0x40,0x08,0x20,0x0B,0xFE,0x10,0x00,0x10,0x00,0x31,0xFC,0x30,0x00,0x50,0x00,
  45. 0x91,0xFC,0x10,0x00,0x10,0x00,0x11,0xFC,0x11,0x04,0x11,0x04,0x11,0xFC,0x11,0x04,

  46. /*--  文字:  息  --*/
  47. /*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
  48. 0x01,0x00,0x02,0x00,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,
  49. 0x1F,0xF0,0x10,0x10,0x01,0x00,0x08,0x84,0x48,0x92,0x48,0x12,0x87,0xF0,0x00,0x00,

  50. /*--  文字:  工  --*/
  51. /*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
  52. 0x00,0x00,0x00,0x00,0x7F,0xFC,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
  53. 0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,

  54. /*--  文字:  程  --*/
  55. /*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
  56. 0x08,0x00,0x1D,0xFC,0xF1,0x04,0x11,0x04,0x11,0x04,0xFD,0xFC,0x10,0x00,0x30,0x00,
  57. 0x39,0xFE,0x54,0x20,0x54,0x20,0x91,0xFC,0x10,0x20,0x10,0x20,0x13,0xFE,0x10,0x00,

  58. };



  59. /*-----------------------------------------------
  60.              向595寫入一個字節 單紅色
  61. ------------------------------------------------*/
  62. void InputByte( unsigned  char DataR1) //寫一個字節用串行八位所以8次循環
  63. {
  64.         unsigned  char i;
  65.         for(i=8; i>0; i--)
  66.         {
  67.                 J32_SER = (DataR1&0x01);//分離最低位,即0000 0001和data相與取最低位
  68.                 J32_CLK = 0;
  69.                 J32_CLK = 1;
  70.                 DataR1 = DataR1 >> 1;//
  71.         }
  72. }


  73. /*-----------------------------------------------
  74.                     延時程序
  75. ------------------------------------------------*/
  76. void Delay(unsigned int t)
  77. {
  78.         while(--t);
  79. }

  80. void Delay10ms()                //@12.000MHz
  81. {
  82.         unsigned char i, j;

  83.         i = 117;
  84.         j = 184;
  85.         do
  86.         {
  87.                 while (--j);
  88.         } while (--i);
  89. }

  90. void Delay15ms()                //@12.000MHz
  91. {
  92.         unsigned char i, j, k;

  93.         _nop_();
  94.         _nop_();
  95.         i = 1;
  96.         j = 176;
  97.         k = 19;
  98.         do
  99.         {
  100.                 do
  101.                 {
  102.                         while (--k);
  103.                 } while (--j);
  104.         } while (--i);
  105. }





  106. /*-----------------------------------------------
  107.                       主程序
  108. ------------------------------------------------*/
  109. main()
  110. {
  111.         unsigned char count;//16行掃描數據,范圍0-15
  112.         unsigned int i, j;
  113.         unsigned char temp;
  114.         //計算數組的元素個數,最終需要的是漢字的個數
  115.         int lenTotal = sizeof(hztest) / sizeof(int);  //所有,整個數組的大小
  116.         int lenLow = sizeof(hztest[0]) / sizeof(int);  //低位,單個數組的大小
  117.         int lenHigh = lenTotal / lenLow;  //高位,相除相當于字的個數


  118. while(1)
  119.         {
  120.                 /*MoveBitNum,移動位數,
  121.                 MoveBitNumtemp,臨時移動位數,
  122.                 IncNum,大于一個字節增加字節數*/
  123.                
  124.                 i++;
  125.                 if(i==60)//更改流動速度,1T單片機和12T單片機速度大約5-8倍,注意更改參數
  126.                 {
  127.                         i=0;
  128.                         MoveBitNum++;
  129.                         if(MoveBitNum==16)//每次移動完一個漢字大小后循環
  130.                         {
  131.                                 MoveBitNum=0;
  132.                                 HzNum+=1;    //調用下一個漢字
  133.                                 if(HzNum>=lenHigh-1)//需要顯示的漢字個數,包括前面的一屏空字符的個數,后面清屏的空字符不包含在內,這里是(漢字個數+1)
  134.                                                                                                                 //如果已經是最后一個了,則令漢字個數為0,即hznum指針歸零
  135.                                         HzNum=0;   //完全顯示完后循環調用
  136.                         }
  137.                 }

  138.                 Delay(1);//控制掃描頻率
  139.                 //讀取漢字對應屏幕緩沖區的數據,不同大小的屏幕不一樣
  140.                 for(j=0; j<2; j++) //取每個漢字的前2個字節,即32位,2/32
  141.                 {
  142.                         //漢字個數+1
  143.                         buff[j+j+1]=hztest[HzNum+j][count+count+1];  //每次移動完一個漢字后,選擇下一個漢字
  144.                         buff[j+j]=hztest[HzNum+j][count+count];

  145.                 }
  146.                 //判斷移動的位數
  147.                 if(MoveBitNum<8)                   //  判讀移動距離是大于一個字節還是小于一個字節,因為一個字節左移右移最大只能8位
  148.                 {
  149.                         IncNum=0;
  150.                         MoveBitNumtemp=MoveBitNum;
  151.                 }
  152.                 else
  153.                 {
  154.                         IncNum=1;    //大于8就減去8得到的數值還是小于8
  155.                         MoveBitNumtemp=MoveBitNum-8;
  156.                 }

  157.                 J32_LAT=0;       //鎖存無效

  158.                 for(j=2; j>0; j--)        //按bit的方式移動緩沖區的內容,然后輸出到595,即取出的數值每個字節左移一定的位數,
  159.                 {
  160.                         //后面左移出的數據整合到前面的字節中,保持數據的連續性
  161.                         temp=(buff[j-1+IncNum]<<MoveBitNumtemp)|(buff[j+IncNum]>>(8-MoveBitNumtemp));//這句比較重要,需要自行拿出2個字節的數據模擬分析
  162.                         InputByte(temp);//輸出到595
  163.                 }//8個字節傳輸完鎖存輸出
  164.                 //控制使能端
  165.                 J32_OE  = 1;
  166.                 P1=count;//用P0口的前4位控制16行,屏內部通過4-16譯碼器工作,循環掃描16行
  167.                 J32_LAT=1;      //鎖存有效,此時一行的數據顯示到屏上
  168.                 J32_OE = 0;


  169.                 count++;
  170.                 if(count==16)
  171.                         count=0;


  172.         }
  173. }
復制代碼

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品在线免费观看 | 久久精品国产一区老色匹 | 久久免费观看视频 | 亚洲黄色在线免费观看 | 四虎影音| 黄色一级网 | 别c我啊嗯国产av一毛片 | 日本黄色免费视频 | 精品中文字幕一区 | 久久久www成人免费精品张筱雨 | 日本精品一区二区三区四区 | 亚洲一区二区三区在线播放 | 亚洲精选久久 | 欧美日韩1区2区3区 欧美久久一区 | 日日摸日日添日日躁av | a毛片| 一区二区三区精品视频 | 久久爆操 | 精品91久久 | 国产精品高潮呻吟久久 | 丁香五月网久久综合 | 亚洲a在线观看 | 在线免费看毛片 | 激情av免费看 | 国产精品久久久亚洲 | 中文字幕亚洲一区二区三区 | 日韩精品一区二区三区久久 | 国产三级精品三级在线观看四季网 | av超碰 | 欧美性a视频 | 国产精品午夜电影 | 国产乱码精品一区二区三区中文 | 草草草久久久 | 日韩网站免费观看 | av在线三级 | 亚洲成人综合在线 | 欧美中文字幕在线 | 精品欧美一区二区三区久久久 | www.99热.com| 一区二区三区韩国 | 亚洲午夜精品视频 |