游客
主题
帖子
积分27
阅读权限1
注册时间2014-3-15
最后登录1970-1-1
在线时间 小时
|
两块P10的16*32 4分之扫描方式 上下组成32*32 静态显示不了 求大神指点 只能显示一块 上边或是下边 另一块就瞎显示 不知道为什么 我用的stc12c5a60s2 晶振11M的 这是程序 //serial_input(table1[j][3*8+2*k+i],table[j][3*8+2*k+i]);只能正常显示括号前边变的,后边的不行
#include <STC12C5A.H>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define NOP _nop_()
sbit OE = P2^0;
sbit A1 = P2^1;
sbit B1 = P2^2;
sbit SHCP=P2^4; //11脚SHCP 移位时钟
sbit STCP=P2^3; //12脚STCP 锁存时钟
sbit DATA=P3^7;
sbit DATA1=P3^6; //数据输入
uchar code table[2][32]=
{
{0xF7,0x7F,0xF7,0x7F,0xF7,0x7F,0xEE,0x01,0xEE,0xFD,0xCD,0xFB,0xCB,0xDF,0xAF,0xDF,0x6E,0xD7,0xEE,0xDB,0xED,0xDB,0xED,0xDD,0xEB,0xDD,0xEF,0xDF,0xEF,0x5F,0xEF,0xBF},
{0xF7,0x7F,0xF7,0x7F,0xF7,0x7F,0xEE,0x01,0xEE,0xFD,0xCD,0xFB,0xCB,0xDF,0xAF,0xDF,0x6E,0xD7,0xEE,0xDB,0xED,0xDB,0xED,0xDD,0xEB,0xDD,0xEF,0xDF,0xEF,0x5F,0xEF,0xBF}
};
uchar code table1[2][32]=
{
{0xEF,0xFF,0xEF,0x03,0xEF,0xFB,0xEF,0xF7,0x03,0xEF,0xDB,0xDF,0xDB,0xDF,0xDA,0x01,0xDB,0xDF,0xB7,0xDF,0xD7,0xDF,0xEF,0xDF,0xD7,0xDF,0xBB,0xDF,0x7B,0x5F,0xFF,0xBF},
{0xEF,0xFF,0xEF,0x03,0xEF,0xFB,0xEF,0xF7,0x03,0xEF,0xDB,0xDF,0xDB,0xDF,0xDA,0x01,0xDB,0xDF,0xB7,0xDF,0xD7,0xDF,0xEF,0xDF,0xD7,0xDF,0xBB,0xDF,0x7B,0x5F,0xFF,0xBF}
};
/*******************************************************************************************/
/*******************************************************************************************/
/*******************************************************************************************/
void io_init() //端口初始化 //填了这段程序也没用
{
P2M0 = 0xff; // 推挽输出
P2M1 = 0x00; //
P3M0 = P3M0|0x60; //0011 1000 推挽输出
}
//数据串行输入
void serial_input(uchar dat,uchar dat1)
{
uint i;
for(i=0; i<8; i++)
{
DATA=dat&0x80;
DATA1=dat1&0x80;
SHCP=0;
SHCP=1; //上升沿移位
dat<<=1;
dat1<<=1; //左移1位
}
}
/*******************************************************************************************/
//并出
void serial_output()
{
STCP=1;
NOP;
NOP;
STCP=0;
}
/*******************************************************************************************/
/*******************************************************************************************/
//行显控制
void HC138_scan(uchar temp)
{
OE=1;
A1=0x01 & temp;
B1=0x01 &(temp>>1);
}
/*******************************************************************************************/
/*******************************************************************************************/
//整屏显示
void display()
{
uint i,j,k;
for(k=0;k<4;k++) //显示的四行
{
for(j=0;j<2;j++) //显示3、4列
{
for(i=0;i<2;i++) // 显示1、2列
{
serial_input(table1[j][3*8+2*k+i],table[j][3*8+2*k+i]);//只能正常显示括号前边变的,后边的不行
serial_input(table1[j][2*8+2*k+i],table[j][2*8+2*k+i]);
serial_input(table1[j][1*8+2*k+i],table[j][1*8+2*k+i]);
serial_input(table1[j][0*8+2*k+i],table[j][0*8+2*k+i]);
}
}
serial_output();
HC138_scan(k);
}
}
/*******************************************************************************************/
/*******************************************************************************************/
/*******************************************************************************************/
/*******************************************************************************************/
void main()
{io_init();
while(1)
{
display();
}
}
求指点
|
|