c51单片机,如题为8位流水灯定时器程序,要求改为12位的,在原来基础上修改
deplay()函数未定义
1、要改为12位,需要增加4个IO口,硬件要更改;
2、程序需要把变量state改为unsigned int数据类型;
3、state左移超过0x80的值,即0x100、0x200、0x400、0x800的值作为判断条件,点亮相应IO的LED即可。
P0(8)+P2(4)
#include "REG52.h"
void main()
{
unsigned char Xd=0,qh=0,ci=0;//消抖
unsigned int shu=0,ys=0;
P0=P2=0;
while(1)
{
if(++ys==0)
{
if(qh>0)
{
P0<<=1;
if(P0==0)if(qh==1)
{P0=1;++qh;}
else qh=P0=0;
}
else
{
P2<<=1;
if(P2==0)P2=1;
if(P2==16){P2=0;qh=1;}
}
}
}
}
1、要改为12位,需要增加4个IO口,硬件要更改,如果现在资源足够,比如可以用P2 的一些位,比如P2的低4位。
2、程序需要把变量state改为unsigned short int数据类型;
3、state左移到一定状态后,需要指定置位,重新进入循环
... /*其它省略代码*/
unsigned int state=0x01;
while (1){
P1= ~((unsigned char) (state & 0xff));/*按原来方法处理数据,不过因为state是更长的数据,所以需要特别处理*/
P2= ~((unsigned char) (state & 0xf00)>>8); /*这里假定P2 的其它没有用到的位是空置的,否则不能这样处理*/
deplay(1000);
state=state<<1 ;
if (state == 0x1000 ){
state=0x01;
}
}
... /*其它省略代码*/