16*16点阵屏程序代码字模部分换掉,代码一直会有问题
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define data1 P0
#define data2 P2
sbit s1=P3^6;
sbit s2=P3^7;
sbit s4=P3^5;
bit fangxiang;
uint alt=0,net=0,sl=32*7;
bit ss;
bit mode;
uchar code tab[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",0*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",1*/
0x10,0x04,0x1F,0xFC,0x10,0x84,0x00,0x80,0x00,0x80,0x10,0x84,0x1F,0xFC,0x10,0x04,/*"H",0*/
0x00,0x00,0x01,0x04,0x19,0x04,0x19,0xFC,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,/*"i",1*/
0x00,0x00,0x00,0x00,0x00,0x1A,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*",",2*/
0x04,0x08,0x04,0x10,0x24,0x20,0x24,0x40,0x24,0xFC,0x24,0xA2,0xFD,0x22,0x26,0x22,
0x24,0x42,0x2C,0x42,0x14,0x42,0x24,0x82,0x44,0x1E,0x04,0x00,0x04,0x00,0x00,0x00,/*"?",3*/
0x00,0x00,0x3F,0xE1,0x00,0x02,0x00,0x0C,0xFF,0xF0,0x00,0x00,0x40,0x00,0x47,0xF8,
0x44,0x00,0x44,0x00,0x7F,0xFF,0x44,0x10,0x44,0x08,0x47,0xF0,0x40,0x00,0x00,0x00,/*"?",4*/
0x08,0x02,0x08,0x44,0x0F,0xA8,0xF8,0x10,0x08,0x68,0x0F,0x86,0x00,0x00,0x01,0x00,
0x41,0x02,0x41,0x01,0x47,0xFE,0x49,0x00,0x51,0x00,0x61,0x00,0x01,0x00,0x00,0x00,/*"?",5*/
0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xCC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"!",6*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",10*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",11*/
};
void delay(uint z) //延时子函数
{
uchar x;
for(;z>0;z--)
for(x=110;x>0;x--);
}
void xianshi() //显示
{
uchar aa,i;
for(i=0;i<16;i++)
{
P1=i; //列扫描
data1=tab[net+aa]; //取出上8行数据输出
aa++;
data2=tab[net+aa]; //取出下8行数据输出
aa++;
delay(5); //延时
data1=0; //清屏
data2=0; //清屏
P1=0x00; //消除余辉
if(aa>30) aa=0; //字模地址
}
}
void xianshi2() //显示
{
int num;
uchar aa,i;
num++;
if(num>=200)
{
num=0;
net=net+32;
if(net>sl-32)
net=32;
}
if(num<30)
{
for(i=0;i<16;i++)
{
P1=i; //列扫描
data1=tab[net+aa]; //取出上8行数据输出
aa++;
data2=tab[net+aa]; //取出下8行数据输出
aa++;
delay(5); //延时
data1=0; //清屏
data2=0; //清屏
P1=0x00; //消除余辉
if(aa>30) aa=0; //字模地址
}
}else
{
delay(5); //延时
data1=0; //清屏
data2=0; //清屏
P1=0x00; //消除余辉
}
}
void main() //主函数
{
ET1=1; //使能定时器0
EA=1; //开启总中断
TR1=1; //开始计数
net=32;
while(1) //无限循环
{
if(ss==0)
xianshi(); //显示
if(ss==1)
xianshi2();
if(s1==0) //检测按键
{
ss=0;
delay(30); //延时消抖
TR1=~TR1; //按下暂停 ,暂按继续
while(!s1)xianshi();
delay(30);
}
if(s2==0) //检测按键
{
ss=0;
delay(30); //延时消抖
fangxiang=~fangxiang; //方向取反
while(!s2)xianshi();
delay(30);
}
if(s4==0)
{
TR1=0;
ss=1;
net=(net/32)*32;
net=net+32;
if(net>sl-32)
net=32;
while(!s4)xianshi2();
delay(30);
}
}
}
void timer1() interrupt 3
{
alt++;
if(alt==10) //到一定的时间加以实现左移
{
alt=0;
if(fangxiang==0) //如果是正向 正向移动
{
net=net+2;
if(net>sl) //字移动数量
net=0;
}
else //否则反向移动
{
net=net-2;
if(net<2)
net=sl; //字移动数量
}
}
}
字模部分换成其它的,程序执行起来一直都有问题。但是有一次成功换掉了。