查表方式双IO口流水灯(C51)
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
void delay_ms(uchar ms); // 延时毫秒@12M,ms最大值255
uint state[16] = {0xfffe, 0xfffd, 0xfffb, 0xfff7, //状态表
0xffef, 0xffdf, 0xffbf, 0xff7f,
0x7fff, 0xbfff, 0xdfff, 0xefff,
0xf7ff, 0xfbff, 0xfdff, 0xfeff};
void main()
{
uchar i; // 循环控制变量,兼有变址作用
while(1)
{
for(i = 0; i < 16; i++)
{
P2 = state[i] / 256; // 查表将高字节送入P2口
P0 = state[i] % 256; // 查表将低字节送入P0口
delay_ms(100); // 延时100ms
}
}
}
void delay_ms(uchar ms)
{
uchar i;
while(ms--)
for(i = 0; i < 124; i++);
} |