/*编译环境**************************************
功能:跑马灯实验,依靠程序延时控制跑马灯
CPU: STC12C5A系列
IDE: KEIL uVission2 V2.4a
************************************************/
/*资源分配**************************************
P0: 跑马灯
P33:跑马灯整体控制
P24-P27:数码管控制
************************************************/
#include "stc12c5a.h"
#define Dtube_SEG3 P27 //每一位的数码管总控IO定义
#define Dtube_SEG2 P26
#define Dtube_SEG1 P25
#define Dtube_SEG0 P24
#define LED_SEG P33 //跑马灯总控IO定义
#define HORSE_BUS P0 //跑马灯定义
void Delay_Time(unsigned int time) //延时函数
{
while(time>0)
time--;
}
void main(void)
{
unsigned char horse_led;
P2M1&=~0xf0; //P2口 7 6 5 4 3 2 1 0
// O O O O :数码管总控IO为强推挽输出
//P2M1 0 0 0 0
P2M0|=0xf0; //P2M0 1 1 1 1
P3M1&=~0x08; //P3口 7 6 5 4 3 2 1 0
// O :跑马灯总控IO为强推挽输出
//P3M1 0
P3M0|=0x08; //P3M0 1
Dtube_SEG0=0; //关闭数码管显示
Dtube_SEG1=0;
Dtube_SEG2=0;
Dtube_SEG3=0;
LED_SEG=1; //打开跑马灯显示
horse_led=1; //跑马灯初始值
for(;;)
{
HORSE_BUS=horse_led; //把跑马灯的值送出,点亮一个灯
horse_led<<=1; //把跑马灯的值左移,准备点亮下一个灯.更改此处可以改变方向
if(horse_led==0) //直到点亮最后一个灯,
{
horse_led=1; //再回到第一个灯
}
Delay_Time(50000); //延时,更改此处可以改变周期
}
}