標(biāo)題: P10點(diǎn)陣屏C51單片機(jī)程序 [打印本頁]

作者: cryophysics    時(shí)間: 2019-12-17 12:23
標(biāo)題: P10點(diǎn)陣屏C51單片機(jī)程序
P10點(diǎn)陣屏C51程序
1/4掃描,四掃下行,1路16行,數(shù)據(jù)低OE高(04-P16-08)

適用于HUB12接口單色P10

串口模式0,普通左移,亮度速度可調(diào),6個(gè)IO口,用的STC8F1K08,最多231個(gè)字

制作出來的實(shí)物圖如下:


單片機(jī)源程序如下:
  1. #include <STC8.H>
  2. #include <intrins.h>
  3. #include <string.h>
  4. #define                DATA        P30                //
  5. #define                CLOCK        P31                //↑        ↓
  6. #define                ADDR_A        P32                //↑
  7. #define                ADDR_B        P33                //
  8. #define                LATCH        P54                //↓        ↓
  9. #define                ENABLE        P55                //↓
  10. unsigned char Offset_Bit,Offset_String;
  11. unsigned char code String[]=
  12. {
  13.         #include <0.h>
  14. };

  15. /*----------------------------延時(shí)10us@STC-Y6@11.0592MHz----------------------------*/
  16. void Delay_10us(void)
  17. {
  18.         unsigned char i;
  19.         i=35;
  20.         while(--i);
  21. }

  22. /*----------------------------延時(shí)x10us----------------------------*/
  23. void Delay_x10us(unsigned char x)
  24. {
  25.         while(x--)
  26.                 Delay_10us();
  27. }

  28. void Line_Driver(unsigned char temp)
  29. {
  30.         switch(temp)
  31.         {
  32.                 case 0:
  33.                         ADDR_A=0;
  34.                         ADDR_B=0;
  35.                 break;
  36.                 case 1:
  37.                         ADDR_A=1;
  38.                         ADDR_B=0;
  39.                 break;
  40.                 case 2:
  41.                         ADDR_A=0;
  42.                         ADDR_B=1;
  43.                 break;
  44.                 case 3:
  45.                         ADDR_A=1;
  46.                         ADDR_B=1;
  47.                 break;
  48.                 default:
  49.                 break;
  50.         }
  51.         ENABLE=1;
  52. }

  53. void Send_One_Byte(unsigned char temp)
  54. {
  55.         unsigned char i,temp1;
  56.         for(i=0;i<8;i++)
  57.         {
  58.                 temp1<<=1;
  59.                 if(temp&0x01)
  60.                         temp1|=0x01;
  61.                 temp>>=1;
  62.         }
  63.         SBUF=~temp1;
  64.         while(!TI);
  65.         TI=0;
  66. }

  67. void Send_Display(unsigned char line)
  68. {
  69.         unsigned char i,j,a,b;
  70.         unsigned int c,d;
  71.         b=2*line;
  72.         for(i=0;i<4;i++)
  73.         {
  74.                 c=(Offset_String+i)*32;
  75.                 for(j=0;j<8;j++)
  76.                 {
  77.                         if(j<4)
  78.                         {
  79.                                 a=(3-j)*8;
  80.                                 d=a+b+c;
  81.                                 if(Offset_Bit<=8)
  82.                                         Send_One_Byte((String[d]<<Offset_Bit)|(String[d+1])>>(8-Offset_Bit));
  83.                                 else
  84.                                         Send_One_Byte((String[d+1]<<(Offset_Bit-8))|(String[d+32])>>(8-(Offset_Bit-8)));
  85.                         }
  86.                         else
  87.                         {
  88.                                 a=(7-j)*8;
  89.                                 d=a+b+c;
  90.                                 if(Offset_Bit<=8)
  91.                                         Send_One_Byte((String[d+1]<<Offset_Bit)|(String[d+32])>>(8-Offset_Bit));
  92.                                 else
  93.                                         Send_One_Byte((String[d+32]<<(Offset_Bit-8))|(String[d+33])>>(8-(Offset_Bit-8)));
  94.                         }
  95.                 }
  96.         }
  97.         LATCH=0;
  98.         LATCH=1;
  99. }

  100. void Display(unsigned char brightness)
  101. {
  102.         unsigned char line;
  103.         for(line=0;line<4;line++)
  104.         {
  105.                 Send_Display(line);
  106.                 Line_Driver(line);
  107.                 Delay_x10us(brightness);
  108.                 ENABLE=0;
  109.                 Delay_x10us(10-brightness);
  110.         }
  111. }

  112. void Init(void)
  113. {
  114.         AUXR|=0x20;
  115.         P3M0=0x0f;
  116.         P3M1=0x00;
  117.         P5M0=0x30;
  118.         P5M1=0x00;
  119.         Offset_Bit=0;
  120.         Offset_String=0;
  121. }

  122. void main(void)
  123. {
  124.         unsigned char i;
  125.         Init();
  126.         while(1)
  127.         {
  128.                 for(i=0;i<10;i++)
  129.                 {
  130.                         Display(1);
  131.                 }
  132.                 Offset_Bit++;
  133.                 if(Offset_Bit==16)
  134.                 {
  135.                         Offset_Bit=0;
  136.                         Offset_String++;
  137.                 }
  138.                 if(Offset_String==159)
  139.                 {
  140.                         Offset_String=0;
  141.                 }
  142.         }
  143. }
復(fù)制代碼

所有資料51hei提供下載:
P10點(diǎn)陣屏_STC8F1K08.zip (795.8 KB, 下載次數(shù): 96)


作者: cryophysics    時(shí)間: 2020-1-14 19:56
50fps最多10塊級(jí)聯(lián),改第77行代碼,是字?jǐn)?shù),1塊單元板對(duì)應(yīng)2,第136行控制移速,第138行控制亮度
作者: tieq1952    時(shí)間: 2020-2-22 06:58
謝謝分享!!!
作者: ty417502873    時(shí)間: 2020-9-16 01:08
要是2塊板級(jí)聯(lián), b=2*line;是不是要改成b=4*line;

作者: ty417502873    時(shí)間: 2020-9-16 20:42
按這個(gè)程序下下來不能運(yùn)行。啥子問題喲
作者: 6874577    時(shí)間: 2022-5-22 08:18
不錯(cuò)很工整
作者: 隨風(fēng)1314    時(shí)間: 2023-2-2 15:57
ty417502873 發(fā)表于 2020-9-16 20:42
按這個(gè)程序下下來不能運(yùn)行。啥子問題喲

代碼不完整,好幾個(gè)變量都沒有在上述代碼里。當(dāng)然不能顯示咯。編譯能通過
作者: coody_sz    時(shí)間: 2023-2-2 16:35
我用STC8系列MCU驅(qū)動(dòng)燈板,大部分是1/16掃的,最大驅(qū)動(dòng)256*128沒有任何問題。
作者: 這一生只為你    時(shí)間: 2023-2-7 20:39
感謝樓主分享!幾年前搞過P10的和P4的單元板顯示,這些程序很吃單片機(jī)內(nèi)存的,市售LED屏的控制板基本都是STM32,速度和內(nèi)存都足夠,自己做著玩,剛開始用STC15F2K16S2,16*16字體還行,級(jí)聯(lián)后顯示24*24或者32*32的字,顯示不了幾個(gè)內(nèi)存就不夠了,只能換更大的。。。
作者: Sofint    時(shí)間: 2025-4-9 04:51
I check . This code is not working. Maybe a problem .




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1