#include <reg52.h> //包含型号头文件
#define uchar unsigned char
#define uint unsigned int
sbit LR11=P2^0;//红色数据锁存端口
sbit LR12=P2^1;
sbit LG11=P2^2;//绿色数据锁存端口
sbit LG12=P2^3;
sbit SK= P2^7;//595时钟端口
sbit LT= P2^6;//595数据锁存输出端口
sbit EN= P2^5;//打开LED显示使能端口
sbit LED=P2^4;//MCU工作指示灯
uchar i,k,s;
uint j,j0,j1,j2;
uchar num;
uchar dat,acc,w,b,Lx;
/**********************************************/
uchar code tab_r[1024]=
{/*红色LED显示数据*/};
/***********************************************/
void clr_disp() //清屏程序
{
P0=0xff;
for(i=0;i<=64;i++)
{
P1&=0xf0; //PD0~3=0、低电平触发值数
P1|=0x0f; //PD0~3=0、LT_ALL 高电平保持
for(b=0;b<8;b++)
{
SK=1;//SK
SK=0;
}
}
LT=1;//LT
LT=0;
}
//++++++++++++++++++++++++++++++++++++++++++++++
void delay(uchar z)
{
uchar x,y;
for(x=0;x<=z;x++)
for(y=0;y<=50;y++); //1141
}
/*************************************************************/
uchar code tab_g[1024]=
{/*绿色LED显示数据*/};
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void main()
{
EN=0; //EN=0、关闭显示
clr_disp(); //清屏
while(1)
{
Lx++;
while(Lx>=15)//灰度调节值转变换
Lx=0x00;
// j1=0;
for(s=0;s<15;s++)//10帧画面显示完成否?
{
j0=0;
LED=0;//LED=on
for(k=0;k<16;k++) //32行扫完否?
{
j=j0;
j0+=32; //
for(i=0;i<32;i++)//每列256像素=32B
{
P0=tab_r[j];
LR11=1;
LR11=0; //LR11
P0=tab_r[j+512];
LR12=1;
LR12=0; //LR12
P0=tab_g[j];
LG11=1;
LG11=0; //LG11
P0=tab_g[j+512];
LG12=1;
LG12=0; //LG12
for(b=0;b<8;b++)//拨动8个脉冲作为595时钟
{
SK=1;//PD6=1 SK
SK=0;
}
j++;
}
LED=1; //LED=off
P1=k; //打开行扫数据信号
LT=1; //PD6=1 LT
LT=0;
EN=1; //EN=1、打开显示
delay(Lx); //亮度调节++
EN=0; //EN
delay(30-Lx); //亮度调节--
}
}
}
}
- 1
- 2
前往页