看一下程序吗 可以有点报酬

img

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;
   }
}
... /*其它省略代码*/