试验的一个16乘16的点阵仅仅显示两个汉字。用两个74HC164和两个74HC595移位寄存器 采用串入并出的方式 为什么 无法显示程序看了很长时间了 感觉并没有什么逻辑错误啊 还请大神求解下 谢谢啦
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define dataout P3
sbit ds=dataout^0;
sbit shcp=dataout^1;
sbit stcp=dataout^2;
sbit ab=dataout^3;
sbit sck=dataout^4;
uchar word[32];
uchar code dis[]={0x00,0x10,0x11,0x12,0x14,0x18,0xF0,0x17,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,
0x00,0x04,0x88,0x90,0xA0,0x82,0x81,0xFE,0x80,0x80,0xA0,0x90,0x88,0x04,0x00,0x00};
uchar code wu[]={0x00,0x00,0x00,0x00,0x01,0xe0,0x07,0x80,0x01,0x00,0x01,0x60,0x03,0xf0,0x1f,0x00,
0x02,0xc0,0x04,0x80,0x08,0x80,0x18,0x82,0x20,0x86,0x00,0x7e,0x00,0x00,0x00,0x00};
void output(uchar);
void display();
void delaydis(uchar);
void delaydis(uchar timer)
{
uchar i;
while(timer--)
{
i=24;
while(i--)
display();
}
}
void output(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
shcp="0;_nop_();
" ds="dat&0x01;
" shcp="1;_nop_();
" dat="dat">>1;
}
}
void display()
{
uchar i;
ab=0;
for(i=0;i<16;i++)
{
sck="0;
" stcp="0;
" _nop_();
output(~word[2*i+1]);
output(~word[2*i]);
sck="1;
" stcp="1;
" _nop_();
ab="1;
" }
}
void main()
{
uchar i;
while(1)
{
for(i=0;i<32;i++)
word=wu;
delaydis(20);
for(i=0;i<32;i++)
word=dis;
delaydis(20);
}
} |