做了一个LED旋转显示屏,抄了一个程序,有一部分程序一直不能理解,就是下面这部分,运行的流程是什么样子呀,
这里shownum初始化为0;程序没有问题,但是,一直不能理解为什么这样能够达到显示效果,数据输送到P1,P0,然后如何循环显示的,为什么数组的字模数据存在showdat[160+i],
- uchar xdata ShowDat[176];
- void EX0_int() interrupt 0 //外部中断0
- {
- ShowNum=0;
- ms++;
-
- }
- void timer0() interrupt 1 //定时中断0 中断处理
- {
- TH0=0xfe; //0.37ms 11.0592M 晶振
- TL0=0xab;
- if(ShowNum<80)
- {
- P1=ShowDat[ShowNum*2];
- P0=ShowDat[ShowNum*2+1];
- ShowDat[ShowNum*2]=ShowDat[ShowNum*2+2];
- ShowDat[ShowNum*2+1]=ShowDat[ShowNum*2+3];
- ShowNum++;
- QuanOK=1;
- }
- else
- {
- P1=P0=0xff;
- if(ms==8)
- {
- ms=0;
- QuanOK=0;
-
- for(i=0;i<16;i++)
- {
- ShowDat[160+i]=Zimo1[ziNum][i];
- }
- ziNum=(ziNum+1)%61; //重复
- }
-
- else
- {
- if(QuanOK==1&&ms!=0) // 如果全部数据发送完毕 则更新160---176 数据
- {
- QuanOK=0;
- for(i=0;i<7;i++)
- {
- ShowDat[(80+i)*2]=ShowDat[(80+i)*2+2];
- ShowDat[(80+i)*2+1]=ShowDat[(80+i)*2+3];
- }
- }
- }
- }
- }
复制代码
|