求AT89C51单片机16个信号灯闪烁控制的程序流程图和源程序代码

用AT89S51单片机串行口扩展并行I/O端口电路,驱动16个发光二极管,并编写控制程序,使每片74LS164所连接的8个发光二极管同时按左右方向往返循环,依次点亮。

采用串口发送一次0x0001,然后一次移位0x0002,0x0004,0x0008,0x0010,0x0020,0x0040...
#include "STC89C51RC_RD_PLUS.H"

#define uchar unsigned char
#define uint unsigned int

void Com_Init()
{
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xFC;
TL1 = TH1;
PCON = 0x00;
TR1 = 1;
}

void Delay (uint Milliseconds)//延时2ms,
{
uchar a,b;
for(a=3;a>0;a--)
{
for(b=245;b>0;b--)
for (; Milliseconds > 0; Milliseconds--);
}
}

void SendChar (uchar chr)//发送一个字符
{
SBUF = chr;
while(!TI);
TI=0;

}
main()
{

Com_Init();
while(1)
{ u8 i;
for(i=0;i<16;i++)
{
u16 dat= 0x0001<<i;
SendChar (dat);
SendChar ( dat>>8);
Delay (1000);//延时
}
}
}
温馨提示:答案为网友推荐,仅供参考
相似回答
大家正在搜