51单片机16个灯流水循环,C语言

麻烦大家改个程序,仿真图,源程序都有,上图求大家指点下,感谢

代码已修改,并仿真通过。

#include<reg51.h>     //包含单片机寄存器的头文件
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
 sbit CLK=P1^0;
 sbit IN =P1^1;
//uchar code a[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uint code w[]={0xfffe,0xfffd,0xfffb,0xfff7,0xffef,0xffdf,0xffbf,0xff7f,0xfeff,0xfdff,0xfbff,0xf7ff,0xefff,0xdfff,0xbfff,0x7fff};//【新建了一个流水表】
void delay(uint i)
{
    uint j;
    uchar k;
    for(j=i;j>0;j--)
        for(k=125;k>0;k--);
}
//【发送1字节给74LS164】
void send_byte(uchar temp)
{
    uchar i;
    for(i=0;i<8;i++)
    {
        if(temp & 0x80)
        {
            IN =1;
        }
        else
        {
           IN =0;
        }
        CLK = 0;
         _nop_();  //if Keil,require use intrins.h
        CLK = 1;
        
        temp=temp<<1;// temp左移1位
    }
}
//【发送2字节给74LS164】
void send_word(uint temp)
{
    
    send_byte((uchar)(temp>>8));//先发送高字节
    send_byte((uchar)(temp&0x00FF));//再发送低字节
}
void main(void)
{
    uint i;
    
    while(1)
    {
        for(i=0;i<16;i++)
        {
            //send_byte(a[i]);
            send_word(w[i]);//【发送2字节】
            delay(4000);
            
           
        }
    }
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-04-23

花样流水灯的玩法,一个51单片机8位端口轮流输出16颗灯珠,

相似回答