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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1822|回復: 6
收起左側

單片機在16×64點陣顯示屏上擴展的16×128點陣顯示屏程序問題

[復制鏈接]
ID:976963 發表于 2021-12-22 11:24 | 顯示全部樓層 |閱讀模式
我在別人做好的16×64點陣顯示屏上擴展了16×128點陣顯示屏。但是在程序運行后,兩塊16×64點陣顯示屏分別顯示,要修改哪條程序讓他可以在16×128點陣上從右往左顯示
SWIL{%J7NA2(U9LP6Y)LWT9.png
單片機源程序如下:
  1. #include <reg51.H>
  2. #include <intrins.h>
  3. #define I2Cdelay() {_nop_();_nop_();_nop_();_nop_();}
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. uchar flag=1,yid,h;                           //YID為移動計數器,H為行段計數器
  7.                                //flag=1 左移顯示 flag=0靜態顯示  
  8. uint zimuo;                               //字模計數器
  9. uchar BUFF[10];                           //緩存
  10. void in_data(void);                       //調整數據
  11. void rxd_data(void);               //發送數據
  12. void Scan(void);                           //掃描
  13. void I2CStart(void);
  14. void I2CWrite(uchar dat);
  15. sbit R=P2^0;                       //數據輸入端口
  16. sbit CLK=P2^1;                       //時鐘信號
  17. sbit STB=P2^2;                       //鎖存端
  18. sbit key=P3^2;                                   //定義按鍵
  19. sbit I2C_SCL = P3^7;
  20. sbit I2C_SDA = P3^6;
  21. uchar code table[]={
  22. /*前4位無顯示*/
  23. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  24. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  25. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  26. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  32. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  33. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  34. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  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. /*--  文字:  愛  --*/
  40. /*--  宋體9;  此字體下對應的點陣為:寬x高=16x16   --*/

  41. 0x00,0x00,0x00,0x1E,0xFC,0x09,0x48,0x08,
  42. 0x90,0x04,0xFE,0x3F,0x42,0x20,0xFC,0x1F,
  43. 0x20,0x00,0xF0,0x0F,0x50,0x04,0x88,0x02,
  44. 0x04,0x01,0xC2,0x06,0x38,0x38,0x00,0x00,
  45. /*--  文字:  我  --*/
  46. /*--  宋體9;  此字體下對應的點陣為:寬x高=16x16   --*/
  47. 0x00,0x00,0x60,0x02,0x1C,0x0A,0x10,0x12,
  48. 0x10,0x02,0xFE,0x3F,0x10,0x02,0x10,0x12,
  49. 0x70,0x12,0x18,0x0A,0x16,0x0A,0x10,0x24,
  50. 0x10,0x2A,0x10,0x31,0x9C,0x20,0x00,0x00,

  51. /*--  文字:  中  --*/
  52. /*--  宋體9;  此字體下對應的點陣為:寬x高=16x16  --*/
  53. 0x00,0x00,0x80,0x00,0x80,0x00,0xFC,0x1F,
  54. 0x84,0x10,0x84,0x10,0x84,0x10,0x84,0x10,
  55. 0x84,0x10,0xFC,0x1F,0x84,0x10,0x80,0x00,
  56. 0x80,0x00,0x80,0x00,0x80,0x00,0x00,0x00,
  57. /*--  文字:  華  --*/
  58. /*--  宋體9;  此字體下對應的點陣為:寬x高=16x16   --*/
  59. 0x00,0x00,0x10,0x01,0x10,0x11,0x08,0x09,
  60. 0x0C,0x07,0x8A,0x01,0x68,0x21,0x08,0x21,
  61. 0x08,0x3E,0x88,0x00,0x80,0x00,0xFE,0x3F,
  62. 0x80,0x00,0x80,0x00,0x80,0x00,0x00,0x00,
  63. /*后4位無顯示*/
  64. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  65. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  66. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  67. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  68. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  69. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  70. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  71. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  72. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  73. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  74. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  75. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  76. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  77. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  78. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  79. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};

  80. void delay(int z)                               //延時
  81. {
  82.      int x,y;
  83.      for(x=0;x<z;x++)
  84.                 for(y=0;y<50;y++);
  85. }

  86. void main(void)
  87. {
  88.      uchar i,speed=2;
  89.      yid=0;
  90.      zimuo=0;
  91.          I2CStart();
  92.      I2CWrite(0xA0);                                     //10100001讀10100000寫        
  93.          EA=1;EX0=1;IT0=1;                          //全局中斷開,中斷0初始化                                                           
  94.      
  95.          while(1)
  96.      {
  97.             if(flag==1)
  98.                 {
  99.                   while(zimuo<8*32)
  100.              {   if(flag==1)
  101.                      {
  102.                             while(yid<16)                                //數據移位。
  103.                            {        if(flag==1)
  104.                               {
  105.                                          for(i=0;i<speed;i++)       //移動速度
  106.                                          {        
  107.                                             if(flag==1)
  108.                                             {Scan();}
  109.                                                 else break;
  110.                                          }
  111.                                          yid++;                                    //移動一步
  112.                               }
  113.                                 else  break;
  114.                        }
  115.                    yid=0;
  116.                    zimuo=zimuo+32;                                //后移一個字,
  117.                     }
  118.                         else break;
  119.              }
  120.              zimuo=0;                               //到最后從頭開始,有字數決定
  121.         }
  122.             else
  123.              {  
  124.                 zimuo=128;                                                //靜態掃描從第一個中文字開始
  125.                     Scan();
  126.              }
  127.          }
  128. }

  129. /*----------中斷0的服務子程序-----------*/
  130. void int_0s() interrupt 0 using 0
  131. {
  132.             if(key==0)
  133.           {
  134.              delay(2);                                                                //去抖
  135.                  if(key==0)
  136.                  flag=~flag;
  137.                  while(key==0);                                                    //等待按鍵釋放
  138.           }
  139.          
  140. }

  141. /*-------------掃描函數-----------------*/
  142. void Scan()
  143. {
  144.       for(h=0;h<16;h++)                                //16行掃描
  145.       {
  146.                    in_data();                                        //調整數據
  147.                    rxd_data();                                    //串口發送數據
  148.                P1=h;                                            //送行選
  149.                    STB=1;
  150.                    STB=0;
  151.                    delay(2);                        
  152.           }
  153. }

  154. void in_data(void)
  155. {
  156.           uchar s;
  157.       for(s=0;s<5;s++)                                       
  158.           {
  159.                    BUFF[2*s]=table[zimuo+32*s+2*h];     /*把第一個字模的第一個字節放入BUFF0
  160.                                                     中,第二個字模的第一個字節放入BUFF2中*/
  161.                    BUFF[2*s+1]=table[zimuo+1+32*s+2*h]; /* 把第一個字模的第二個字節放入BUFF1
  162.                                                                                                 中,第二個字模的第二個字節放入BUFF3中*/                          
  163.           }         
  164. }

  165. /**********74HC595輸出函數*************/
  166. void rxd_data(void)                                        //串行發送數據
  167. {
  168.           char s;
  169.           uchar inc,tempyid,temp;
  170.           uchar k;
  171.           R=1;
  172.           if(yid<8)
  173.             inc=0;
  174.           else
  175.             inc=1;
  176.           for(s=0+inc;s<=7+inc;s++)                                //發送2字節數據
  177.                 {
  178.                         if(yid<8)
  179.                     tempyid=yid;
  180.                     else
  181.                     tempyid=yid-8;                    //字模左邊字節右移tempyid位,右邊字節左移8-tempyid位,2者相或
  182.                     temp=(BUFF[s]>>tempyid)|(BUFF[s+1]<<(8-tempyid));
  183.                           for(k=0;k<8;k++)
  184.                         {
  185.                               I2C_SCL =1;          //拉高SCL
  186.                                   CLK=0;
  187.                                 //R=(bit)(temp&0x80);
  188.                                    temp=temp>>1;
  189.                                   R=CY;
  190.                                   CLK=1;
  191.                                   I2C_SDA =R;
  192.                                   I2C_SCL =0;          //再拉低SCL,完成一個位周期
  193.                         }
  194.                 }
  195. }


  196. /*----------AT24C512-------------*/
  197. /* 產生總線起始信號 */
  198. void I2CStart()
  199. {
  200.                 I2C_SDA=1; //首先確保SDA、SCL都是高電平
  201.                 I2C_SCL=1;
  202.                 I2Cdelay();
  203.                 I2C_SDA=0; //先拉低SDA
  204.                 I2Cdelay();
  205.                 I2C_SCL=0; //再拉低SCL
  206. }


  207. /* I2C總線寫操作,dat-待寫入字節,返回值-從機應答位的值 */
  208. void I2CWrite(uchar dat)
  209. {
  210.                
  211.                 uchar mask;  //用于探測字節內某一位值的掩碼變量
  212.                 for (mask=0x80;mask!=0;mask>>=1) //從高位到低位依次進行
  213.                 {
  214.                         if ((mask&dat)==0)  //該位的值輸出到SDA上
  215.                         I2C_SDA=0;
  216.                         else
  217.                         I2C_SDA=1;
  218.                         I2Cdelay();
  219.                         I2C_SCL=1;          //拉高SCL
  220.                         I2Cdelay();
  221.                         I2C_SCL=0;          //再拉低SCL,完成一個位周期
  222.                 }
  223.                 I2C_SDA=1;   //8位數據發送完后,主機釋放SDA
  224.                                 
  225. }
復制代碼


新建 51hei壓縮 ZIP 文件.zip

42.47 KB, 下載次數: 16

回復

使用道具 舉報

ID:976963 發表于 2021-12-22 12:53 | 顯示全部樓層
有沒有大神幫忙看一下我需要修改哪些程序
回復

使用道具 舉報

ID:976963 發表于 2021-12-22 15:05 | 顯示全部樓層
有沒有大佬幫我看一看程序那里的問題
回復

使用道具 舉報

ID:161164 發表于 2021-12-22 15:31 | 顯示全部樓層
12T單片機驅動128X16點陣屏有點吃力,會閃爍
ezgif.com-gif-maker (1).gif

回復

使用道具 舉報

ID:976963 發表于 2021-12-22 21:43 | 顯示全部樓層
lkc8210 發表于 2021-12-22 15:31
12T單片機驅動128X16點陣屏有點吃力,會閃爍

大佬,你這改了哪些程序
回復

使用道具 舉報

ID:161164 發表于 2021-12-23 00:14 | 顯示全部樓層
Juejue635 發表于 2021-12-22 21:43
大佬,你這改了哪些程序

09,103,164,184行
table前后各再加4位無顯示
回復

使用道具 舉報

ID:976963 發表于 2021-12-23 09:47 | 顯示全部樓層
lkc8210 發表于 2021-12-23 00:14
09,103,164,184行
table前后各再加4位無顯示

感謝大佬,改了這幾行程序可以實現了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩亚洲系列 | 亚洲一二三在线观看 | 午夜视频一区二区 | 国产精品一区二区三区在线播放 | 免费在线日韩 | 在线一区观看 | 亚洲免费观看视频 | 91一区二区三区在线观看 | 国产黄色大片 | 久久精品国产免费看久久精品 | 久久久久av| 成人免费视频一区 | 91资源在线 | 日韩黄 | 在线视频国产一区 | 亚洲国产精品久久久久久 | 中文字幕国产在线 | 黄色免费在线观看网站 | 精品伊人久久 | www成人啪啪18| 一区二区福利视频 | 久久亚洲一区二区三 | 91免费看片 | 久久久久久艹 | 亚洲精品黑人 | 日韩在线不卡 | 久久精品超碰 | 欧美黄色小视频 | 国产黄色小视频在线观看 | 美女天天操 | eeuss国产一区二区三区四区 | 91精品久久久久久久久久入口 | 在线视频三区 | 亚洲一级二级三级 | 三级在线免费观看 | 成人小视频在线观看 | 国产精品久久久一区二区三区 | 日本在线网站 | 一级毛片成人免费看a | 成人av电影在线观看 | 少妇av片 |