P10点阵屏C51程序
1/4扫描,四扫下行,1路16行,数据低OE高(04-P16-08)
适用于HUB12接口单色P10
串口模式0,普通左移,亮度速度可调,6个IO口,用的STC8F1K08,最多231个字
制作出来的实物图如下:
单片机源程序如下:
#include
#include
#include
#define DATA P30 //
#define CLOCK P31 //↑ ↓
#define ADDR_A P32 //↑
#define ADDR_B P33 //
#define LATCH P54 //↓ ↓
#define ENABLE P55 //↓
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();
}
void Line_Driver(unsigned char temp)
{
switch(temp)
{
case 0:
ADDR_A=0;
ADDR_B=0;
break;
case 1:
ADDR_A=1;
ADDR_B=0;
break;
case 2:
ADDR_A=0;
ADDR_B=1;
break;
case 3:
ADDR_A=1;
ADDR_B=1;
break;
default:
break;
}
ENABLE=1;
}
void Send_One_Byte(unsigned char temp)
{
unsigned char i,temp1;
for(i=0;i<8;i++)
{
temp1<<=1;
if(temp&0x01)
temp1|=0x01;
temp>>=1;
}
SBUF=~temp1;
while(!TI);
TI=0;
}
void Send_Display(unsigned char line)
{
unsigned char i,j,a,b;
unsigned int c,d;
b=2*line;
for(i=0;i<4;i++)
{
c=(Offset_String+i)*32;
for(j=0;j<8;j++)
{
if(j<4)
{
a=(3-j)*8;
d=a+b+c;
if(Offset_Bit<=8)
Send_One_Byte((String[d]<
else
Send_One_Byte((String[d+1]<>(8-(Offset_Bit-8)));
}
else
{
a=(7-j)*8;
d=a+b+c;
if(Offset_Bit<=8)
Send_One_Byte((String[d+1]<
else
Send_One_Byte((String[d+32]<>(8-(Offset_Bit-8)));
}
}
}
LATCH=0;
LATCH=1;
}
void Display(unsigned char brightness)
{
unsigned char line;
for(line=0;line<4;line++)
{
Send_Display(line);
Line_Driver(line);
Delay_x10us(brightness);
ENABLE=0;
Delay_x10us(10-brightness);
}
}
void Init(void)
{
AUXR|=0x20;
P3M0=0x0f;
P3M1=0x00;
P5M0=0x30;
P5M1=0x00;
Offset_Bit=0;
Offset_String=0;
}
void main(void)
{
unsigned char i;
Init();
while(1)
{
for(i=0;i<10;i++)
{
Display(1);
}
Offset_Bit++;
if(Offset_Bit==16)
{
Offset_Bit=0;
Offset_String++;
}
if(Offset_String==159)
{
Offset_String=0;
}
}
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』