proteus仿真点阵显示汉字
#include<reg52.h>#defineint8unsignedchar#defineint16unsignedint#defineint32unsignedlo...
#include <reg52.h>
#define int8 unsigned char
#define int16 unsigned int
#define int32 unsigned long
int8 flag;
int8 n;
int8 code table[][32]={
**********
};
void delay(void);
int16 offset;
void main(void)
{
int8 i;
int8 *p;
flag=0x10;
n=0;
TMOD=0x01;
TH0=0xb1;
TL0=0xe0;
ET0=1;
EA=1;
TR0=1;
p=&table[0][0];
while (1)
{
for (i=0;i<8;i++) //显示1左半边屏幕
{
P0=*(p+offset+2*i);
P2=i|0x08; //P2.4=0,P2.3=1 选中U2, 输出扫描码给U6
delay();
P0=*(p+offset+2*i+1);
P2=i|0x10; //P2.4=1,P2.3=0 选中U3, 输出扫描码给U7
delay();
}
for (i=8;i<16;i++) //显示1右半边屏幕
{
P0=*(p+offset+2*i);
P2=(i-8)|0x20; //P2.5=1 P2.4=0, P2.3=0 选中U4,输出扫描码U8
delay();
P0=*(p+offset+2*i+1);
P2=(i-8)|0x40; //P2.6=1 P2.5=0, P2.4=0 选中U5,输出扫描码U9
delay();
}
for (i=16;i<24;i++) //显示2左半边屏幕
{
P0=*(p+offset+2*i);
P1=(i-16)|0x08; //P1.4=0,P1.3=1 选中U, 输出扫描码给U10
delay();
P0=*(p+offset+2*i+1);
P1=(i-16)|0x10; //P1.4=1,P1.3=0 选中, 输出扫描码给U11
delay();
}
for (i=24;i<32;i++) //显示2右半边屏幕
{
P0=*(p+offset+2*i);
P1=(i-24)|0x20; //P1.5=1 P1.4=0, P1.3=0 选中U,输出扫描码U12
delay();
P0=*(p+offset+2*i+1);
P1=(i-24)|0x40; //P1.6=1 P1.5=0, P1.4=0 选中U,输出扫描码U13
delay();
}
}
}
void delay(void)
{
***
;
}
void timer0() interrupt 1 using 3
{
*******
}
用32*16的点阵仿加上
for (i=24;i<32;i++) //显示2右半边屏幕
{
P0=*(p+offset+2*i);
P1=(i-24)|0x20; //P1.5=1 P1.4=0, P1.3=0 选中U,输出扫描码U12
delay();
P0=*(p+offset+2*i+1);
P1=(i-24)|0x40; //P1.6=1 P1.5=0, P1.4=0 选中U,输出扫描码U13
delay();
这句点阵就不能工作,不加前3列可以显示,这个问题怎么解释 展开
#define int8 unsigned char
#define int16 unsigned int
#define int32 unsigned long
int8 flag;
int8 n;
int8 code table[][32]={
**********
};
void delay(void);
int16 offset;
void main(void)
{
int8 i;
int8 *p;
flag=0x10;
n=0;
TMOD=0x01;
TH0=0xb1;
TL0=0xe0;
ET0=1;
EA=1;
TR0=1;
p=&table[0][0];
while (1)
{
for (i=0;i<8;i++) //显示1左半边屏幕
{
P0=*(p+offset+2*i);
P2=i|0x08; //P2.4=0,P2.3=1 选中U2, 输出扫描码给U6
delay();
P0=*(p+offset+2*i+1);
P2=i|0x10; //P2.4=1,P2.3=0 选中U3, 输出扫描码给U7
delay();
}
for (i=8;i<16;i++) //显示1右半边屏幕
{
P0=*(p+offset+2*i);
P2=(i-8)|0x20; //P2.5=1 P2.4=0, P2.3=0 选中U4,输出扫描码U8
delay();
P0=*(p+offset+2*i+1);
P2=(i-8)|0x40; //P2.6=1 P2.5=0, P2.4=0 选中U5,输出扫描码U9
delay();
}
for (i=16;i<24;i++) //显示2左半边屏幕
{
P0=*(p+offset+2*i);
P1=(i-16)|0x08; //P1.4=0,P1.3=1 选中U, 输出扫描码给U10
delay();
P0=*(p+offset+2*i+1);
P1=(i-16)|0x10; //P1.4=1,P1.3=0 选中, 输出扫描码给U11
delay();
}
for (i=24;i<32;i++) //显示2右半边屏幕
{
P0=*(p+offset+2*i);
P1=(i-24)|0x20; //P1.5=1 P1.4=0, P1.3=0 选中U,输出扫描码U12
delay();
P0=*(p+offset+2*i+1);
P1=(i-24)|0x40; //P1.6=1 P1.5=0, P1.4=0 选中U,输出扫描码U13
delay();
}
}
}
void delay(void)
{
***
;
}
void timer0() interrupt 1 using 3
{
*******
}
用32*16的点阵仿加上
for (i=24;i<32;i++) //显示2右半边屏幕
{
P0=*(p+offset+2*i);
P1=(i-24)|0x20; //P1.5=1 P1.4=0, P1.3=0 选中U,输出扫描码U12
delay();
P0=*(p+offset+2*i+1);
P1=(i-24)|0x40; //P1.6=1 P1.5=0, P1.4=0 选中U,输出扫描码U13
delay();
这句点阵就不能工作,不加前3列可以显示,这个问题怎么解释 展开
广州晶晟电子
2023-08-29 广告
2023-08-29 广告
广州晶晟电子科技有限公司一直专注生产销售中高端石英晶体谐振器和石英晶体振荡器。公司拥有从美国、日本、德国进口的生产及检测设备,超净化生产环境,娴熟的工艺及专业的技术人员。通过质量和服务获得了ISO9001质量体系认证和ISO14001环境体...
点击进入详情页
本回答由广州晶晟电子提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询