DebugLab 发表于 2024-4-3 00:12:00

STC8H4K64TL 16*16点阵屏

STC8H4K64TL 16*16点阵屏
点阵管都用共阳的,下面两个旋转90度当共阴的用,仅供
学习STC8H4K64TL的硬件LED驱动器和汉字左移算法,
程序仅为LED点阵屏部分,无关内容已删除。


attach://40360.mp4


https://www.stcaimcu.com/forum.php?mod=redirect&goto=findpost&ptid=7541&pid=69780


#include <STC8G.H>
#include "define.h"
#include <intrins.h>
#include <absacc.h>
#include <string.h>
#include <stdarg.h>
#include <stdio.h>
#include <math.h>

#define LED0 P50
#define LED1 P51
#define LED2 P04
#define LED3 P52
#define LED4 P07
#define LED5 P06
#define LED6 P05
#define LED7 P53
#define TSK0 P54
#define TSK1 P13
#define TSK2 P17
#define TSK3 P16
#define TSK4 P15
#define TSK5 P14
#define TSK6 P11
#define TSK7 P10
#define COM0 P20
#define COM1 P21
#define COM2 P22
#define COM3 P23
#define COM4 P24
#define COM5 P25
#define COM6 P26
#define COM7 P27
#define SEG0 P40
#define SEG1 P41
#define SEG2 P42
#define SEG3 P43
#define SEG4 P44
#define SEG5 P45
#define SEG6 P46
#define SEG7 P47
#define SEG8 P00
#define SEG9 P01
#define SEGA P02
#define SEGB P03
#define SEGC P34
#define SEGD P35
#define SEGE P36
#define SEGF P37

#define                FOSC                11059200UL
#define                BAUD                115200UL
#define                BRT                        (0x10000-FOSC/BAUD/4)

unsigned char Offset_Bit,Offset_String;

unsigned char code String[]=
{
      #include <0.h>
};

/*----------------------------延时10us@STC-Y6@11.0592MHz----------------------------*/
//void Delay_10us(void)
//{
//      unsigned char i;
//      i=35;
//      while(--i);
//}

/*----------------------------延时x10us----------------------------*/
//void Delay_x10us(unsigned char x)
//{
//      while(x--)
//                Delay_10us();
//}

/*----------------------------延时10ms@STC-Y6@11.0592MHz----------------------------*/
void Delay_10ms(void)
{
      unsigned char i,j;
      _nop_();
      _nop_();
      i=144;
      j=157;
      do
      {
                while(--j);
      }while(--i);
}

/*----------------------------延时x10ms----------------------------*/
void Delay_x10ms(unsigned char x)
{
      while(x--)
                Delay_10ms();
}

void Display_String(void)
{
      unsigned char i;
      unsigned char xdata *p=XBYTE+0xfb10;
      for(i=0;i<8;i++)
      {
                *(p+i)=Offset_Bit<8?(String>>Offset_Bit)|(String<<(8-Offset_Bit)):(String>>Offset_Bit-8)|(String<<(8-(Offset_Bit-8)));
                *(p+8+i)=Offset_Bit<8?(String>>Offset_Bit)|(String<<(8-Offset_Bit)):(String>>Offset_Bit-8)|(String<<(8-(Offset_Bit-8)));
                *(p+16+i)=Offset_Bit<8?(String>>Offset_Bit)|(String<<(8-Offset_Bit)):(String>>Offset_Bit-8)|(String<<(8-(Offset_Bit-8)));
                *(p+24+i)=Offset_Bit<8?(String>>Offset_Bit)|(String<<(8-Offset_Bit)):(String>>Offset_Bit-8)|(String<<(8-(Offset_Bit-8)));
      }
}

void Init(void)
{
      P_SW2|=EAXFR;
      LED0=0;
      LED1=0;
      LED2=0;
      LED3=0;
      LED4=0;
      LED5=0;
      LED6=0;
      LED7=0;
      P0M0=0x0F; P0M1=0x00;
      P1M0=0x00; P1M1=0x00;
      P2M0=0xFF; P2M1=0x00;
      P3M0=0xF0; P3M1=0x00;
      P4M0=0xFF; P4M1=0x00;
      P5M0=0x00; P5M1=0x00;
      P6M0=0x00; P6M1=0x00;
      P7M0=0x00; P7M1=0x00;
      P0PU=0xF0;      
      P5PU=0x0F;
      P2DR=0x00;
      
      COMEN=0xFF;
      SEGENL=0xFF;
      SEGENH=0xFF;
      LEDCTRL=0xA0;
      LEDCKS=0x00;
      
      EA=1;
      
      COM0_DA_L=0x00;
      COM0_DA_H=0x00;
      COM1_DA_L=0x00;
      COM1_DA_H=0x00;
      COM2_DA_L=0x00;
      COM2_DA_H=0x00;
      COM3_DA_L=0x00;
      COM3_DA_H=0x00;
      COM4_DA_L=0x00;
      COM4_DA_H=0x00;
      COM5_DA_L=0x00;
      COM5_DA_H=0x00;
      COM6_DA_L=0x00;
      COM6_DA_H=0x00;
      COM7_DA_L=0x00;
      COM7_DA_H=0x00;
      COM0_DC_L=0x00;
      COM0_DC_H=0x00;
      COM1_DC_L=0x00;
      COM1_DC_H=0x00;
      COM2_DC_L=0x00;
      COM2_DC_H=0x00;
      COM3_DC_L=0x00;
      COM3_DC_H=0x00;
      COM4_DC_L=0x00;
      COM4_DC_H=0x00;
      COM5_DC_L=0x00;
      COM5_DC_H=0x00;
      COM6_DC_L=0x00;
      COM6_DC_H=0x00;
      COM7_DC_L=0x00;
      COM7_DC_H=0x00;
}

void main(void)
{
      Init();
      while(1)
      {
                Offset_Bit++;
                if(Offset_Bit==16)
                {
                        Offset_Bit=0;
                        Offset_String++;
                }
                if(Offset_String==sizeof String/32-1)
                {
                        Offset_String=0;
                }
                Display_String();
                Delay_x10ms(5);
      }
}








国学芯用 发表于 2024-4-3 08:48:56

荣誉版主 持续发力{:5_332:}

飞龙在天 发表于 2024-4-3 09:11:52

感谢楼主分享!!!!!!

yjawei 发表于 2024-4-3 09:39:39

字符走起来相当流畅丝滑,支持一下。

xxxevery 发表于 2024-4-3 22:40:11

支持,学习一下

yzhkpli 发表于 6 天前

真厉害,可惜stc8H没法在proteus中仿真。
页: [1]
查看完整版本: STC8H4K64TL 16*16点阵屏