|
地板
楼主 |
发表于 2011-3-24 08:32:46
|
只看该作者
本帖最后由 zhujianfeng 于 2011-3-24 08:33 编辑
这是程序,帮看下
// A B C D 对应P1.0; P1.1 ; P1.2; P1.3
//--------------------------------
#include "reg52.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
void Keyscan (void); //修改参数按键扫描子程序
void Sendping(); //发送半屏子程序
sbit CLK =P1^5 ; //74HC595移时钟
sbit STB =P1^4 ; // 74HC595锁存信号
sbit Red=P1^6 ; //红色数据输出引脚低电平有效
sbit Greed=P1^7; //全屏控制使能0,低电平有效
sbit OE = P0^7; //全屏使能
uchar SendData; //要发送的数据变量
uchar hang; //行扫描变量 (半屏只有16行,所以hang=0到15)
void delay()
{
uint i;
for(i=0;i<2;i++);
}
uchar code zhong[]=
{
0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x3F,0xFC,0x31,0x8C,0x31,0x8C,0x31,0x8C,0x31,0x8C,0x3F,0xFC,0x31,0x8C,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x00,0x00
};
uchar code guo[]=
{
0x00,0x00,0x00,0x00,0x3F,0xFE,0x20,0x06,0x2F,0xF6,0x21,0x86,0x21,0x86,0x27,0xF6,0x21,0xA6,0x21,0xA6,0x2F,0xF6,0x2F,0xFE,0x20,0x06,0x3F,0xFE,0x20,0x06,0x00,0x00
};
uchar code ren[]=
{
0x00,0x00,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x03,0x80,0x03,0xC0,0x02,0x40,0x06,0x60,0x0C,0x30,0x18,0x18,0x78,0x0E,0x20,0x06,0x00,0x00
};
uchar code min[]=
{
0x00,0x00,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x03,0x80,0x03,0xC0,0x02,0x40,0x06,0x60,0x0C,0x30,0x18,0x18,0x78,0x0E,0x20,0x06,0x00,0x00
};
uchar code zhu[]=
{
0x01,0x80,0x19,0x80,0x19,0x80,0x1F,0xF8,0x3F,0xF8,0x31,0x80,0x01,0x80,0x7F,0xFE,0x03,0xC0,0x07,0xE0,0x0D,0xA0,0x19,0xB8,0x39,0x9C,0x71,0x8E,0x01,0x80,0x00,0x00
};
//------------------------------------
//----------字发送子程序-----------
void delays(int s)
{
int i,j;
for(i=s;i>0;i--)
for(j=110;j>0;j--);
}
void SendByte()
{
uchar m;
for(m=0;m<8;m++)
{
CLK = 0;
Red =(SendData & 0x80); //红屏显示
Greed =0;//(SendData & 0x80); //红屏显示
SendData =SendData<<1;
CLK = 1; //移位时钟上升沿
}
}
//-----------------------------------
//----------行扫描子程序-------------
void RowsCan(void)
{
if (hang>=16)
{
hang =0x00;
}
P1 = P1 & 0xf0;
P1 = P1 | hang;
hang++;
}
//---------------------------------------
//----------发送一屏数据-----------------
void initial(void)
{
OE = 1;
Red = 1;
Greed = 1;
SendData = 0x00;
hang = 0x00;
}
//;---------主程序循环--------------
void main()
{
int m,t=0;
initial();
while(1)
{
STB = 0;
for(m=t;m<2+t;m++)///////////
{
SendData=zhong[m];
SendByte();
}
for(m=t;m<2+t;m++)//////////////////////
{
SendData=guo[m];
SendByte();
}
for(m=t;m<2+t;m++)//////////////////////////////////
{
SendData=ren[m];
SendByte();
}
for(m=t;m<2+t;m++)//////////////////
{
SendData=min[m];
SendByte();
}
for(m=t;m<2+t;m++)/////////////////////////
{
SendData=zhu[m];
SendByte();
}
t=t+2;
if(t==32)
{t=0;}
STB =1; //上升沿数据锁存
RowsCan(); //行扫描
OE = 0;
delay();
}
} |
|