单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 315|回复: 1
打印 上一主题 下一主题
收起左侧

P10点阵屏C51单片机程序

[复制链接]
跳转到指定楼层
楼主
P10点阵屏C51程序
1/4扫描,四扫下行,1路16行,数据低OE高(04-P16-08)

适用于HUB12接口单色P10

串口模式0,普通左移,亮度速度可调,6个IO口,用的STC8F1K08,最多231个字

制作出来的实物图如下:


单片机源程序如下:
  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. /*----------------------------延时10us@STC-Y6@11.0592MHz----------------------------*/
  16. void Delay_10us(void)
  17. {
  18.         unsigned char i;
  19.         i=35;
  20.         while(--i);
  21. }

  22. /*----------------------------延时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. }
复制代码

所有资料51hei提供下载:
P10点阵屏_STC8F1K08.zip (795.8 KB, 下载次数: 3)

评分

参与人数 1黑币 +80 收起 理由
admin + 80 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 顶 踩
回复

使用道具 举报

沙发
 楼主| cryophysics 发表于 2020-1-14 19:56 | 只看该作者
50fps最多10块级联,改第77行代码,是字数,1块单元板对应2,第136行控制移速,第138行控制亮度
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|单片机论坛 |51黑电子论坛技术交流 QQ 管理员QQ:125739409;技术交流QQ群636986012

Powered by 单片机教程网

快速回复 返回顶部 返回列表