这是我的测试程序,简单的静态显示,劳驾看看有什么问题?芯片89S52 晶振24.750M 138+TIP127控制行 595控制列
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit G_74138=P2^4; //行输出控制
sbit SDATA_595=P2^5; //数据
sbit RCK_595=P2^6; //时钟
sbit SCLK_595=P2^7;
uchar temp;
uchar sjhc[20]; //数据缓冲
uchar hsj[16]={0x00,0x80,0x40,0xC0,0x20,0xA0,0x60,0xE0, //行扫描数据
0x10,0x90,0x50,0xD0,0x30,0xB0,0x70,0xF0};
unsigned char j=0,n,m;
unsigned char code HZ[][32]=
{
{0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0x80,0x03,0xFC,0x7F,0xFA,0xBF,0xFA,0xBF,
0xF6,0xDF,0xEE,0xEF,0xDE,0xF7,0xB0,0x1B,0x7E,0xFD,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF},/*"本",0*/
{0xFE,0xFF,0xFF,0x7F,0xC0,0x01,0xDF,0x7F,0xDF,0x7F,0xDF,0x7F,0xDF,0x03,0xDF,0x7F,
0xDF,0x7F,0xD8,0x07,0xDB,0xF7,0xDB,0xF7,0xBB,0xF7,0xB8,0x07,0x7B,0xF7,0xFF,0xFF},/*"店",0*/
{0xEF,0x7F,0xEF,0x7F,0x00,0x07,0xEF,0x6F,0xED,0x6F,0xE6,0x6F,0x0F,0x2F,0xAE,0x97,
0xED,0xD5,0xAB,0xF5,0xD7,0xF9,0xFE,0xEF,0xD7,0x77,0x9B,0x33,0x3B,0xBB,0x7F,0xFF},/*"热",0*/
{0xFF,0xFB,0x80,0x7B,0xF7,0xDB,0xF7,0xDB,0xE0,0xDB,0xDE,0xDB,0xAE,0xDB,0xF5,0xDB,
0xFB,0xFB,0xF7,0xEB,0xCF,0xF7,0x3F,0xFF,0xDB,0x77,0xDD,0xBB,0xBD,0xBB,0x7F,0xFB},/*"烈",0*/
{0xFF,0x7F,0xFF,0x7F,0x03,0x7F,0xFA,0x01,0x7A,0xFB,0xB5,0xB7,0xD7,0xBF,0xEF,0xBF,
0xE7,0xBF,0xE7,0x9F,0xDB,0x5F,0xDB,0x6F,0xBE,0xE7,0x79,0xF1,0xC7,0xFB,0xFF,0xFF},/*"欢",0*/
{0xBF,0xFF,0xDE,0x7F,0xC9,0x83,0xDB,0xBB,0xFB,0xBB,0xFB,0xBB,0x1B,0xBB,0xDB,0xBB,
0xDA,0xBB,0xD9,0xAB,0xDB,0xB7,0xDF,0xBF,0xDF,0xBF,0xAF,0xFF,0x70,0x01,0xFF,0xFF},/*"迎",0*/
{0xF6,0xFF,0xF6,0xFF,0xEE,0x03,0xCD,0xFB,0xAB,0xB7,0x66,0xAF,0xEE,0xB7,0xED,0xBB,
0xEB,0xBB,0xEE,0xBF,0xEF,0x7F,0xFD,0xFF,0xAE,0xFB,0xAE,0xED,0x6F,0xED,0xF0,0x0F},/*"您",0*/
{0xEF,0xBF,0xEF,0xBF,0xDF,0xBF,0x81,0x83,0xBD,0x7B,0xBD,0x7B,0xBC,0xFB,0xBD,0xBB,
0x81,0xDB,0xBD,0xDB,0xBD,0xFB,0xBD,0xFB,0xBD,0xFB,0x81,0xFB,0xBD,0xD7,0xFF,0xEF},/*"的",0*/
{0xFE,0xFF,0xDE,0xEF,0xE6,0xE7,0xF2,0xEF,0xF6,0xDF,0xFE,0xFB,0x80,0x01,0xFB,0xBF,
0xFB,0xBF,0xFB,0xBF,0xFB,0xBF,0xF7,0xBD,0xF7,0xBD,0xEF,0xBD,0xDF,0xC1,0xBF,0xFF},/*"光",0*/
{0xFE,0xFF,0xF6,0x7F,0xF6,0xFF,0xB6,0x01,0xB5,0xDF,0xB5,0xEF,0xB3,0xEF,0xB6,0xFB,
0xB6,0x01,0xB6,0xDB,0xB6,0xDB,0xB6,0xDB,0xB6,0xDB,0xF6,0x03,0xF6,0xFB,0xFF,0xFF},/*"临",0*/
};
void Delay( int num) //延时
{
while( --num );
}
void WR_595(void) //向595发送一个字节数据
{
unsigned char x;
for(x=0;x<8;x++)
{
temp=temp<<1;
SDATA_595=CY;
SCLK_595=1;
_nop_();
_nop_();
SCLK_595=0;
}
}
void srlsj() //将10个字的列数据送入缓冲
{ uchar i,n;
for(n=0,i=0;i<10;i++,n++)
{ sjhc[2*i]=HZ[n][j];
sjhc[2*i+1]=HZ[n][j+1];
}
}
void fslsj() //将一行列数据发送至595
{ uchar i=0;
for(i=0; i<20;i++)
{ temp=sjhc;
WR_595();
}
}
void main(void)
{
RCK_595=0;
SCLK_595=0;
while(1)
{
uchar i;
j=0;
for(i=0;i<16;i++)
{
G_74138=1; //清屏
srlsj(); //将字符数据送入缓冲
fslsj(); //将缓冲中的数据送入595
RCK_595=1;
P1=hsj; //行数据输出
RCK_595=0;
G_74138=0;
Delay(10); //延时
j+=2;
}
}
} |