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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機64x128LED點陣屏顯示不完整的問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:284453 發表于 2023-6-3 11:35 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
大家好。我有一塊64x128LED全彩點陣屏,HUB75E接口,可以顯示4排每排8個16x16的漢字。
用STC8H3K64S單片機核心板,在網上搜了一個32x64的LED屏代碼。
添加一下行掃描(原本是16掃,改成32掃),屏點亮,顯示兩幅相同畫面,右幅比左幅整個要上移一行,如圖1。
繼續修改其它參數,第1和3排可以完整顯示,第2和4排只顯示上8行,下8行被條紋覆蓋。如圖2。
如果讓主程序只運行Timer1_Init()和DZ64X32_Write_Buffer(),點陣屏第2和第4組下8行出現條紋,如圖3
源代碼附上,修改過的地方已經標注出來了。
向大家請教,這個代碼怎樣修改才能完美點亮這塊64x128的屏。先謝謝了。

單片機源程序如下:
  1. #include <stc8h.h>
  2. #include <intrins.h>
  3. #define FOSC 22118400L
  4. #define BAUD  38400
  5. #define     uint    unsigned int
  6. #define     uchar   unsigned char

  7. //HUB75引腳
  8. sbit        R0      =   P0^0;    sbit        G0      =   P1^0;
  9. sbit        B0      =   P0^1;    //接地
  10. sbit        R1      =   P0^2;                 sbit        G1      =   P1^1;
  11. sbit        B1      =   P0^3;    sbit        HC_138E =   P1^2;
  12. sbit        HC_138A =   P0^4;    sbit        HC_138B =   P1^6;
  13. sbit        HC_138C =   P0^5;    sbit        HC_138D =   P1^7;
  14. sbit        RGB_CLK =   P0^6;    sbit        LE      =   P2^0;//LAT
  15. sbit        OE      =   P0^7;    //接地


  16. void DZ64X32_Write_Buffer();
  17. void SM16126_Send_Data();
  18. void HC138_Sel(uchar hang);
  19. void LED_Tu(uchar x,uchar y,uchar num,uchar Background);
  20. uchar code Tu_16X16[][32];                   //***********************************
  21. #define T10MS12T (65536-FOSC/12/3000)//967   //原值1000,畫面閃動,改成3000就穩定了
  22. #define T1MS12T  (65536-FOSC/12/1000)        //************************************
  23. void Timer1_Init()//主刷新定時器
  24. {
  25.         TL0 = T10MS12T;               
  26.         TH0 = T10MS12T>>8;
  27.     TR0 = 1;                                    
  28.     ET0 = 1;
  29. }
  30. void TM1_Rountine(void) interrupt 1
  31. {
  32.                         SM16126_Send_Data();                        
  33. }

  34. void HC138_Sel(uchar hang)//hang 選擇
  35. {
  36.         HC_138A=hang&0x01;
  37.         HC_138B=hang&0x02;
  38.         HC_138C=hang&0x04;
  39.         HC_138D=hang&0x08;//***********************************
  40.         HC_138E=hang&0x10;//改成32掃
  41. }                   //******************************************

  42. //數據存儲方式,因為漢字需要左右滾動,所以上下兩16行存儲在同一Byte
  43. #define C_0          0
  44. #define C_R          0x09
  45. #define C_G                0x0A
  46. #define C_B         0x0C
  47. #define C_RG        0x0B
  48. #define C_RB        0x0D
  49. #define C_GB        0x0E
  50. #define C_RGB        0x0F

  51. uchar bdata dat;
  52. /*
  53. 0 1 2 3 4 5 6 7
  54. R G B L R G B H
  55. L存儲是否點亮,R,G,B存儲值
  56. 一個點需要4bit,一共是32*64*4=32*32Byte
  57. */
  58. sbit dat_RL=dat^0;
  59. sbit dat_GL=dat^1;
  60. sbit dat_BL=dat^2;
  61. sbit dat_LL=dat^3;

  62. sbit dat_RH=dat^4;
  63. sbit dat_GH=dat^5;
  64. sbit dat_BH=dat^6;
  65. sbit dat_LH=dat^7;

  66. uchar Point_color;//取值范圍0,9-15,同時//********************************************************
  67. uchar xdata RGB_DZ64X32_Buffer[32][128];//原值為32和64;點亮64x128點陣屏
  68.                                         //顯示分左右兩相同內容,右邊內容上移壹行。如圖1.
  69. void DZ64X32_Write_Buffer()             //改成32和128時,第2和第4排的上部8行顯示正常,
  70. {                                       //下8行位置被條紋覆蓋,如圖2.
  71.         uchar i,j;                            //*******************************************************
  72.         for(i=0;i<32;i++)
  73.         {
  74.                 for(j=0;j<128;j++)
  75.                 {
  76.                         RGB_DZ64X32_Buffer[i][j]=0x00;
  77.                 }
  78.         }
  79. }

  80. void SM16126_Send_Data()
  81. {
  82.         uchar i;
  83.         static uchar hang;
  84.         
  85.         RGB_CLK=0;//低電平
  86.         LE=1;//允許數據,
  87.         OE=1;//失效,不亮
  88.                                    //****************************************
  89.         for(i=0;i<128;i++)         //64列是原值,改成128列  
  90.         {                                                                                       //****************************************
  91.                 dat=RGB_DZ64X32_Buffer[hang][i];//取出數據
  92.                 RGB_CLK=0;
  93.                 //---上半屏
  94.                 if(dat_LL)//有數據
  95.                 {
  96.                         R0=dat_RL;
  97.                         G0=dat_GL;
  98.                         B0=dat_BL;
  99.            }
  100.         
  101.                  else//沒有數據
  102.                 {
  103.                         R0=0;
  104.                         G0=0;
  105.                         B0=0;
  106.                 }
  107.                 //---下半屏
  108.                 if(dat_LH)//有數據
  109.                 {
  110.                         R1=dat_RH;
  111.                         G1=dat_GH;
  112.                         B1=dat_BH;
  113.           }
  114.                
  115.                 else//沒有數據
  116.                 {
  117.                         R1=0;
  118.                         G1=0;
  119.                         B1=0;
  120.                 }
  121.                 RGB_CLK=1;//上升沿數據吸收
  122.         }
  123.         
  124.         LE=0;//禁止輸入
  125.         HC138_Sel(hang);//行選
  126.   hang++;          //*************************************
  127.         hang&=0x1f;      //原值是0x0f,0~15 16行;改成0x1f,0~31 32行
  128.         OE=0;//點亮      //***************************************
  129. }

  130. void DZRGB_DrawPoint(uchar x,uchar y)
  131. {
  132.         uchar da,db;
  133.         if(Point_color)//有亮度
  134.         {
  135.                 if(y>=32)//在高位  //************************************
  136.                 {                  //原值16,改成32
  137.                         y-=32;           //**************************************
  138.                         da=Point_color<<=4;//移動到高位
  139.                         
  140.                         db=RGB_DZ64X32_Buffer[y][x];//取出數據
  141.                         db&=0X0F;//清除高位00001111
  142.                
  143.                         RGB_DZ64X32_Buffer[y][x]=db+da;
  144.                 }
  145.                 else//在低位
  146.                 {
  147.                         db=RGB_DZ64X32_Buffer[y][x];//取出數據
  148.                         db&=0XF0;//清除低位 11110000
  149.                
  150.                         RGB_DZ64X32_Buffer[y][x]=db+Point_color;
  151.                 }
  152.         }
  153.         else//沒有亮度
  154.         {
  155.                 if(y>=32)//在高位
  156.                 {
  157.                         y-=32;
  158.                         RGB_DZ64X32_Buffer[y][x]&=0x7F;//01111111
  159.                 }
  160.                 else
  161.                 {
  162.                         RGB_DZ64X32_Buffer[y][x]&=0xE7;//11100111
  163.                 }
  164.         }
  165. }

  166. uchar code er[8]={1,2,4,8,16,32,64,128};
  167. void LED_Tu(uchar x,uchar y,uchar num,uchar Background)
  168. {
  169.         uchar i,j;
  170.         uchar Point_color_Save;
  171.         Point_color_Save=Point_color;//保存顏色

  172.         for(j=0;j<16;j++)//16列
  173.         {
  174.                 for(i=0;i<8;i++)//前8行
  175.                 {
  176.                         if(Tu_16X16[num][j]&er[i])
  177.                         {
  178.                                 Point_color=Point_color_Save;
  179.                         }
  180.                         else
  181.                         {
  182.                                 Point_color=Background;
  183.                         }
  184.                         DZRGB_DrawPoint(x+j,y+i);        
  185.                 }
  186.         }
  187.         for(j=0;j<16;j++)//16列
  188.         {
  189.                 for(i=0;i<8;i++)//后8行
  190.                 {
  191.                         if(Tu_16X16[num][j+16]&er[i])
  192.                         {
  193.                                 Point_color=Point_color_Save;
  194.                         }
  195.                         else
  196.                         {
  197.                                 Point_color=Background;
  198.                         }
  199.                         DZRGB_DrawPoint(x+j,y+8+i);        
  200.                 }
  201.         }
  202.         Point_color=Point_color_Save;
  203. }

  204. void main()
  205. {
  206.         P2M0=0x00;P2M1=0X00;
  207.         P1M0=0X00;P1M1=0X00;
  208.         P0M0=0X00;P0M1=0X00;
  209.                                                                                                                                 //*******************************************
  210.         Timer1_Init();                                                                //主程序只運行Timer1_Init();DZ64X32_Write_Buffer();        .
  211.   DZ64X32_Write_Buffer();                        //點陣屏第2和第4組下8行出現條紋,如圖3
  212.                                       //*******************************************
  213. //        Point_color=C_R;
  214. //        LED_Tu(0,0,1,C_0);LED_Tu(48,0,5,C_0);
  215. //        LED_Tu(0,16,2,C_0);LED_Tu(48,16,10,C_0);

  216. //        Point_color=C_G;
  217. //        LED_Tu(0,32,3,C_0);LED_Tu(48,32,7,C_0);
  218. //        LED_Tu(0,48,4,C_0);LED_Tu(48,48,8,C_0);
  219.         
  220.         EA=1;       //打開總中斷

  221.         while(1)
  222.         {        
  223.                  
  224.         }
  225. }


  226. uchar code Tu_16X16[][32]={ //陰碼 順向 行列掃描

  227.         0x10,0x0C,0x05,0x55,0x55,0x55,0x85,0x7F,0x85,0x55,0x55,0x55,0x05,0x14,0x0C,0x00,
  228. 0x04,0x04,0x02,0x0A,0x09,0x29,0x2A,0x4C,0x48,0xA9,0x19,0x02,0x02,0x04,0x04,0x00, //"零",0
  229. 0x00,0xC4,0x44,0x54,0x54,0x54,0x54,0x5F,0x54,0x54,0x54,0x54,0x44,0x44,0xC0,0x00,
  230. 0x81,0x80,0x80,0x9D,0xB5,0xD5,0x95,0x95,0x95,0xD5,0xB5,0x9D,0x80,0x81,0x80,0x00, //"壹",1
  231. 0x04,0x44,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x04,0xFF,0x04,0x05,0x06,0x04,0x00,
  232. 0x00,0x80,0x9F,0x41,0x21,0x1D,0x21,0x41,0x9F,0x00,0x01,0x0E,0x30,0x40,0xF0,0x00, //"貳",2
  233. 0x00,0x20,0x20,0xA8,0x6C,0x2A,0x39,0x28,0x28,0x2A,0x6C,0xA8,0x20,0x20,0x00,0x00,
  234. 0x02,0x02,0x41,0x40,0x48,0x49,0x49,0x49,0x49,0x49,0x48,0x40,0x41,0x02,0x02,0x00, //"叁",3
  235. 0x00,0x00,0xFE,0x92,0x92,0x92,0x02,0x10,0x54,0x54,0xFF,0x54,0x54,0x7C,0x10,0x00,
  236. 0x44,0xE4,0x5F,0x44,0x44,0x54,0xE4,0x12,0x12,0x12,0xFF,0x12,0x12,0x12,0x10,0x00, //"肆",4
  237. 0x00,0x80,0x60,0xF8,0x07,0x00,0x42,0x42,0xC2,0x7E,0x42,0x42,0xC2,0x02,0x00,0x00,
  238. 0x01,0x00,0x00,0xFF,0x00,0x40,0x40,0x78,0x47,0x40,0x40,0x40,0x7F,0x40,0x40,0x00, //"伍",5
  239. 0x00,0xFE,0x02,0x22,0xDA,0x06,0x80,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x80,0x00,
  240. 0x00,0xFF,0x08,0x10,0x08,0x07,0x00,0x7C,0x40,0x40,0x7F,0x40,0x40,0xFC,0x00,0x00, //"陸",6
  241. 0x00,0x88,0x91,0x42,0x20,0x08,0x08,0x08,0x7F,0x88,0x88,0x84,0x84,0xE4,0x00,0x00,
  242. 0x44,0x44,0x25,0x24,0x14,0x0C,0x04,0xFF,0x04,0x0C,0x14,0x24,0x24,0x44,0x44,0x00, //"柒",7
  243. 0x10,0x10,0xFF,0x10,0x90,0x3E,0xE2,0x22,0x22,0x3E,0x00,0xF8,0x00,0xFF,0x00,0x00,
  244. 0x42,0x82,0x7F,0x81,0x40,0x31,0x0F,0x41,0x81,0x7F,0x00,0x4F,0x80,0x7F,0x00,0x00, //"捌",8
  245. 0x04,0x44,0x44,0xFC,0x44,0x44,0x80,0x70,0x0F,0x08,0x08,0xC8,0x38,0x00,0x00,0x00,
  246. 0x10,0x30,0x10,0x0F,0x08,0x88,0x40,0x20,0x10,0x0C,0x03,0x0C,0x30,0x40,0x80,0x00, //"玖",9
  247. 0x10,0x10,0x10,0xFF,0x10,0x90,0x20,0x50,0x48,0x44,0x43,0x44,0x48,0x50,0x20,0x00,
  248. 0x04,0x44,0x82,0x7F,0x01,0x00,0x00,0xFE,0x42,0x42,0x42,0x42,0x42,0xFE,0x00,0x00, //"拾",10        
  249.         

  250. };
復制代碼


51hei圖片1.jpg (111.72 KB, 下載次數: 61)

51hei圖片1.jpg

51hei圖片2.jpg (114 KB, 下載次數: 61)

51hei圖片2.jpg

51hei圖片3.jpg (88.14 KB, 下載次數: 64)

51hei圖片3.jpg
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:123289 發表于 2023-6-5 13:47 | 只看該作者
先弄清硬件原理、掃描顯示原理。再按照原理寫程序。
回復

使用道具 舉報

板凳
ID:161164 發表于 2023-6-5 16:06 | 只看該作者
75行 xdata 32x128 = 4096 >> 4k


回復

使用道具 舉報

地板
ID:284453 發表于 2023-6-5 20:27 | 只看該作者
lkc8210 發表于 2023-6-5 16:06
75行 xdata 32x128 = 4096 >> 4k

謝謝指出錯誤之處。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人在线视频免费播放 | 国产亚洲精品成人av久久ww | 国产一区久久 | 激情久久网 | 男女在线免费观看 | 日韩精品一区二区三区四区视频 | 久久精品视频9 | 一区二区三区四区不卡视频 | 中国大陆高清aⅴ毛片 | 久久成人一区 | 亚洲视频一区 | 亚洲成人一级 | 亚洲 中文 欧美 日韩 在线观看 | 毛片久久久 | 欧美在线| 国产免费视频在线 | 91精品久久久久久久久久入口 | 成人国产一区二区三区精品麻豆 | 青青久久av北条麻妃海外网 | 91资源在线 | 国产精品久久久久久久久久久新郎 | 国产精品无码专区在线观看 | 亚洲国产精品视频 | 欧美午夜精品 | 四虎影院免费在线播放 | 中文字幕一区二区三区乱码在线 | 精品国产乱码久久久久久蜜臀 | 免费黄色的网站 | 免费永久av | 国产精品污www一区二区三区 | 欧美日韩不卡在线 | 中文字幕免费在线 | 干干干日日日 | 亚洲人成免费 | 天天操天天天 | 九色视频网站 | 久久久久久国产 | www.久久精品 | 九九视频网 | 91成人精品 | 亚洲男女激情 |