/*******************************************************
程序功能:花样流水灯
开发环境:Keil4
硬件环境:eeskill多功能开发学习板/实验箱(2017版),STC12C5A60S2,11.092M晶振
接线说明:使用杜邦线连接P1口与底板单色流水灯模块的JP15 ,具体接法:P10-I1,P11-I2,P12-I3,P13-I4,P14-I5,P15-I6,P16-I7,P17-I8.
跳线说明:无
实验现象:8个流水灯采用查询法,从L1到L8依次点亮,然后由L1到L8依次熄灭;
然后,采用循环法,分别从从L8到L1和L1到L8依次点亮,只亮一次。
最后同时闪烁3次
技术支持:http://www.eeskill.com
淘宝店铺:http://cepark.taobao.com
作者:eeskill
时间:2017-07-01
*******************************************************/
#include "REG52.h"
/******************************************************
查表表格
*******************************************************/
unsigned char code table[]={0xfe,0xfc,0xf8,0xf0,
0xe0,0xc0,0x80,0x00,
0x01,0x03,0x07,0x0f,
0x1f,0x3f,0x7f,0xff,
}; //rom允许情况可以无限添加
void Delay(unsigned int); //延时函数
void main(void)
{
unsigned char i; //定义一个无符号字符型局部变量 i 取值范围 0~255
while(1)
{
for(i=0;i<16;i++) //查询法依次点亮和熄灭8个LED
{
P1=table[i];
Delay(1000);
}
P1=0x7f; //赋初始值
for(i=0;i<8;i++) //循环右移点亮LED
{
Delay(800);
P1>>=1;
P1=P1|0x80; //右移后,最左端自动赋值0,所以需要该语句赋值1
}
P1=0xfe; //赋初始值
for(i=0;i<8;i++) //循环左移点亮LED
{
Delay(800);
P1<<=1;
P1=P1|0x01; //左移后,最右端自动赋值0,所以需要该语句赋值1
}
for(i = 0;i<3;i++) // 8个LED同时闪烁
{
P1 = 0x00; // 八个灯全亮
Delay(1000); // 延时一段时间
P1 = 0xff; // 八个灯全灭
Delay(1000); // 延时一段时间
}
}
}
/******************************************************************************
函数名称:Delay
函数功能:延时函数
入口参数:uiCount-延时参数,每加1增加0.5ms
返回值:无
备注:无
*******************************************************************************/
void Delay(unsigned int uiCount)
{
unsigned char j = 244;
for(;uiCount > 0;uiCount--) while(--j);
}